WWDC2014で発表されたAppleの新言語Swiftについて語りましょう
関連スレ
プログラミング言語Swift Part4
http://potato.2ch.net/test/read.cgi/mac/1484763495/
[SDK]iPhoneアプリ開発初心者質問箱48[touch][iPad]
http://potato.2ch.net/test/read.cgi/mac/1484217623/
Xcode part14
http://potato.2ch.net/test/read.cgi/mac/1476190499/
Swiftアンチスレ part1
http://echo.2ch.net/test/read.cgi/tech/1458491343/
前スレ
Swift part9
http://echo.2ch.net/test/read.cgi/tech/1476758084/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
Swift part10 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 3b3c-eq+O)
2017/02/20(月) 10:00:13.40ID:ChbPWtRt0683デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 19:55:10.84ID:pDlob0Fd0 でかいデータをstructにつっこんで扱う時に注意すべきことが書いてあるだけだろ
つまり代入が頻繁に発生する状況でも、そのプロパティに実際にアクセスがあるまでコピーを遅延させるテクニックについて触れられてるだけ
別に関数の引数に値型を使うなとかとんちんかんなことは書いてないな
つまり代入が頻繁に発生する状況でも、そのプロパティに実際にアクセスがあるまでコピーを遅延させるテクニックについて触れられてるだけ
別に関数の引数に値型を使うなとかとんちんかんなことは書いてないな
684デフォルトの名無しさん (ワッチョイ 9f3c-V38z)
2017/05/25(木) 21:10:12.75ID:1RtxtHBK0 SwiftでCOW意識する人なんているんだ。
そういう人はC++とかRustとか使えばいいのに。
そういう人はC++とかRustとか使えばいいのに。
685デフォルトの名無しさん (ワッチョイ 6b3c-9J/J)
2017/05/25(木) 22:26:04.80ID:VkchUDpW0 最適化しない場所も含めて意識くらいはするでしょ
その程度のことで言語を変える理由にはならんよ
むしろStructでCoWという設計だからこと気兼ねなく渡せるってことに気付いた方がいい
その程度のことで言語を変える理由にはならんよ
むしろStructでCoWという設計だからこと気兼ねなく渡せるってことに気付いた方がいい
686デフォルトの名無しさん (ワッチョイ fbf3-W32U)
2017/05/26(金) 05:16:56.16ID:xRlJL6be0 誤: StructでCoWという設計だからこと気兼ねなく渡せる
正: Array StructでCoWという設計だからこと気兼ねなく渡せる
どうしてもSturct全般でCOWが適用されると思い込みたいアホが食いしばってて笑う
正: Array StructでCoWという設計だからこと気兼ねなく渡せる
どうしてもSturct全般でCOWが適用されると思い込みたいアホが食いしばってて笑う
687デフォルトの名無しさん (ワッチョイ 6b3c-9J/J)
2017/05/26(金) 07:23:41.84ID:nbO+4ovP0 >>686
「Structが」じゃなくて「Structで」な
Arrayに限らず、StringやDictionaryなどのstructでCoWを実装したもの全般
classでCoWを実装する場合は使う側が明示的にcopy()clone()などを呼ぶかinitを使う必要があるが
structでは代入,引数渡し,戻り値がコピーセマンティクスなので透過的に扱うことが出来る
「Structが」じゃなくて「Structで」な
Arrayに限らず、StringやDictionaryなどのstructでCoWを実装したもの全般
classでCoWを実装する場合は使う側が明示的にcopy()clone()などを呼ぶかinitを使う必要があるが
structでは代入,引数渡し,戻り値がコピーセマンティクスなので透過的に扱うことが出来る
688デフォルトの名無しさん (ワッチョイ fbf3-W32U)
2017/05/26(金) 08:03:17.32ID:xRlJL6be0 COWの話題から、いつの間にか参照渡し/値渡しの解説になっててワロタ
結局はSturctでCOWが常時適用されるわけじゃないから気をつけようってこったな
参照渡し/値渡しの違いを知らないLL言語勢もいるかもしれんが、別の問題だから気にしない
>>671のReducing Dynamic Dispatchの節も面白い
SwiftはObjective-Cと違ってダイナミックディスパッチを減らす機構を持ってるぜ、と
これを徹底的に使い倒したら、局所的にはObjCよりSwiftの方が性能よくなる可能性が微レ存?
結局はSturctでCOWが常時適用されるわけじゃないから気をつけようってこったな
参照渡し/値渡しの違いを知らないLL言語勢もいるかもしれんが、別の問題だから気にしない
>>671のReducing Dynamic Dispatchの節も面白い
SwiftはObjective-Cと違ってダイナミックディスパッチを減らす機構を持ってるぜ、と
これを徹底的に使い倒したら、局所的にはObjCよりSwiftの方が性能よくなる可能性が微レ存?
689デフォルトの名無しさん (ワッチョイ 6b3c-nNOo)
2017/05/26(金) 08:31:19.29ID:nbO+4ovP0 細かいところだけどclassは参照の値渡しでinoutは参照渡し
690デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/26(金) 08:45:20.46ID:zBDwmOYm0 >>676
protocolにまつわる言い回しを色々見ますが、どれが適当なのでしょう?
1. protocolを切る
2. protocolを当てる
3. protocolに準拠させる
すべてadding protocol confromanceの訳語だとおもうんですけど。
protocolにまつわる言い回しを色々見ますが、どれが適当なのでしょう?
1. protocolを切る
2. protocolを当てる
3. protocolに準拠させる
すべてadding protocol confromanceの訳語だとおもうんですけど。
691デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/26(金) 08:49:45.12ID:zBDwmOYm0 最近のCPUはSIMD命令(SSEとかAVRとか言われるやつ)を内蔵していて、
でかいStructも一発でコピーできるって、理解は正しいっすかねぇ?
512bitレジスタが32個あって、しかもその32レジスタはペアで使える。
って事は、512bit x 32個 = 2Kbyteを一発でレジスタ -> メモリへmoveしたり
メモリ -> レジスタloadできる。
この理解はOKっすかねぇ。
でかいStructも一発でコピーできるって、理解は正しいっすかねぇ?
512bitレジスタが32個あって、しかもその32レジスタはペアで使える。
って事は、512bit x 32個 = 2Kbyteを一発でレジスタ -> メモリへmoveしたり
メモリ -> レジスタloadできる。
この理解はOKっすかねぇ。
692デフォルトの名無しさん (ワッチョイ 9ff3-UHtP)
2017/05/26(金) 10:19:08.37ID:LS4RNUEG0 >>689
in-out引数は参照渡しじゃない
in-out引数のセマンティクスはあくまでcopy-in copy-outで、最適化で参照渡しになる"場合もある"だけ
リファレンスではin-out引数が参照渡しであると想定したコードを書いてはいけないとはっきり言ってる
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID545
var i: Int = 0 {
willSet { print("willSet: ¥(newValue)") }
}
i = 1 // prints "willSet: 1"
i = 2 // prints "willSet: 2"
func f(_ v: inout Int) {
v = 3
v = 4
}
f(&i) // prints "willSet: 4"
参照渡しなら"willSet: 3"と"willSet: 4"両方表示されるはずだけど
実際には関数に入るときにiの値がvにcopy-inされ
関数から出るときにvの値がiにcopy-outされるので
copy-out時の"willSet: 4"しか表示されない
in-out引数は参照渡しじゃない
in-out引数のセマンティクスはあくまでcopy-in copy-outで、最適化で参照渡しになる"場合もある"だけ
リファレンスではin-out引数が参照渡しであると想定したコードを書いてはいけないとはっきり言ってる
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID545
var i: Int = 0 {
willSet { print("willSet: ¥(newValue)") }
}
i = 1 // prints "willSet: 1"
i = 2 // prints "willSet: 2"
func f(_ v: inout Int) {
v = 3
v = 4
}
f(&i) // prints "willSet: 4"
参照渡しなら"willSet: 3"と"willSet: 4"両方表示されるはずだけど
実際には関数に入るときにiの値がvにcopy-inされ
関数から出るときにvの値がiにcopy-outされるので
copy-out時の"willSet: 4"しか表示されない
693デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/26(金) 10:43:47.67ID:zBDwmOYm0 >>692
すんばらしい、説明
すんばらしい、説明
694デフォルトの名無しさん (ワッチョイ 0f1f-9J/J)
2017/05/27(土) 14:04:16.20ID:SDTaiU/Z0695デフォルトの名無しさん (ワッチョイ 7b46-sPQt)
2017/05/27(土) 21:00:43.52ID:h0JsdT2O0 >>694の心の声
(やべぇ、まじかよ…。バグ仕込んじまった…)
(やべぇ、まじかよ…。バグ仕込んじまった…)
696デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/27(土) 21:48:41.96ID:aL4+kPgB0 inoutで渡された配列変数のオリジナルを関数内で操作しても副作用はないみたいただけどな
var a = [Int]()
func f(_ v: inout [Int]) {
v.append(3)
a.append(4)
v.append(5)
}
a.append(1)
f(&a)
a.append(2)
print(a) // [1, 3, 4, 5, 2]
ただ、それを想定するなということなんだろ
var a = [Int]()
func f(_ v: inout [Int]) {
v.append(3)
a.append(4)
v.append(5)
}
a.append(1)
f(&a)
a.append(2)
print(a) // [1, 3, 4, 5, 2]
ただ、それを想定するなということなんだろ
697デフォルトの名無しさん (ワッチョイ 0fd4-ZpYF)
2017/05/27(土) 21:57:51.65ID:e57lt1AJ0 SwiftってiOSアプリ以外に広がる可能性ある?
698デフォルトの名無しさん (ワッチョイ 6b3c-waVG)
2017/05/27(土) 22:13:54.38ID:7vlRlcaj0 少なくともwillSetがある場合は参照渡しの最適化が掛からないようだね
以下のAはcopy-in, copy-outになっていて、Bは参照渡しになってる
http://swift.sandbox.bluemix.net/#/repl/592977d0d72c2a7516859cca
以下のAはcopy-in, copy-outになっていて、Bは参照渡しになってる
http://swift.sandbox.bluemix.net/#/repl/592977d0d72c2a7516859cca
699デフォルトの名無しさん (ワッチョイ 0f1f-9J/J)
2017/05/27(土) 22:20:21.28ID:SDTaiU/Z0700デフォルトの名無しさん (ワッチョイ 6b3c-9J/J)
2017/05/27(土) 22:21:46.44ID:7vlRlcaj0 >>696
var a = [Int]() { willSet{ } } にしたら [1, 3, 5, 2] になるね
var a = [Int]() { willSet{ } } にしたら [1, 3, 5, 2] になるね
701デフォルトの名無しさん (ワッチョイ 0f1f-9J/J)
2017/05/27(土) 22:26:06.26ID:SDTaiU/Z0 えええええ
ほんとに動き違うのかwwww
ほんとに動き違うのかwwww
702デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/27(土) 22:26:19.82ID:aL4+kPgB0703デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/27(土) 22:30:22.71ID:aL4+kPgB0 willSetの有無で挙動が変わるのはいただけな
デバッグで混乱する元になる
デバッグで混乱する元になる
704デフォルトの名無しさん (ワッチョイ 0f1f-9J/J)
2017/05/27(土) 22:31:17.31ID:SDTaiU/Z0705デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/27(土) 22:38:43.72ID:aL4+kPgB0 >>704
そこに
As an optimization, when the argument is a value stored at a physical address in memory, the same memory location is used both inside and outside the function body. The optimized behavior is known as call by reference
とも書いてある。参照を渡して最適化されると。
それに依存して関数内で参照元にアクセスするなとも書いてあるけど
そこに
As an optimization, when the argument is a value stored at a physical address in memory, the same memory location is used both inside and outside the function body. The optimized behavior is known as call by reference
とも書いてある。参照を渡して最適化されると。
それに依存して関数内で参照元にアクセスするなとも書いてあるけど
706デフォルトの名無しさん (ワッチョイ 0f1f-9J/J)
2017/05/27(土) 22:41:57.41ID:SDTaiU/Z0707デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/27(土) 22:47:16.42ID:aL4+kPgB0 >>706
Playgroundにコピペして試してみればいいだろ
Playgroundにコピペして試してみればいいだろ
708デフォルトの名無しさん (ワッチョイ 0f1f-9J/J)
2017/05/27(土) 22:49:30.62ID:SDTaiU/Z0 Write your code using the model given by copy-in copy-out, without depending on the call-by-reference optimization,
so that it behaves correctly with or without the optimization.
…最適化と言い張ってるがこれはひどい
so that it behaves correctly with or without the optimization.
…最適化と言い張ってるがこれはひどい
709デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/27(土) 23:01:24.62ID:aL4+kPgB0 このぐらいの最適化はやってくれた方がありがたい
参照渡しの方が確実にパフォーマンス上がるし、通常の使い方で副作用もない
副作用があるようなら書き方に問題があるだろ
inoutで受けた変数のオリジナルにアクセスするコードにワーニングぐらい出してくれたら
とも思うけど、まだそこまで面倒は見きれないんだろ
ただ、最適化の恩恵にあずかりたいなら、willSetなんかは入れない方がいいみたいだな
参照渡しの方が確実にパフォーマンス上がるし、通常の使い方で副作用もない
副作用があるようなら書き方に問題があるだろ
inoutで受けた変数のオリジナルにアクセスするコードにワーニングぐらい出してくれたら
とも思うけど、まだそこまで面倒は見きれないんだろ
ただ、最適化の恩恵にあずかりたいなら、willSetなんかは入れない方がいいみたいだな
710デフォルトの名無しさん (ワッチョイ 9ff3-UHtP)
2017/05/27(土) 23:07:17.91ID:Hem7AZxu0711デフォルトの名無しさん (ワッチョイ 6b3c-9J/J)
2017/05/27(土) 23:47:08.68ID:7vlRlcaj0 willSetがあるとmutating funcもself自体がcopy-in copy-outになった
これもリファレンスのどこかにあるのかな
struct A{
var v = [Int]()
var onAppend: (()->())? = nil
mutating func f() {
v.append(1)
onAppend?()
}
}
do {
var a = A()
a.onAppend = { a.v.append(2) }
a.f()
print("willSetなし", a.v) // [1, 2]
}
do {
var a = A() {willSet{}}
a.onAppend = { a.v.append(2) }
a.f()
print("willSetあり", a.v) // [1]
}
willSetなし [1, 2]
willSetあり [1]
これもリファレンスのどこかにあるのかな
struct A{
var v = [Int]()
var onAppend: (()->())? = nil
mutating func f() {
v.append(1)
onAppend?()
}
}
do {
var a = A()
a.onAppend = { a.v.append(2) }
a.f()
print("willSetなし", a.v) // [1, 2]
}
do {
var a = A() {willSet{}}
a.onAppend = { a.v.append(2) }
a.f()
print("willSetあり", a.v) // [1]
}
willSetなし [1, 2]
willSetあり [1]
712デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/28(日) 00:12:22.92ID:Kbiso++70 willSet/didSetの挙動が怪しすぎるな
バグなのかもな
バグなのかもな
713デフォルトの名無しさん (ワッチョイ 6b3c-9J/J)
2017/05/28(日) 08:47:45.67ID:tTxkySJm0 >>712
いや挙動的には予想通りだよ
didSetはともかく、willSetの方は呼ばれたコード内では「変更前のオリジナル変数」と「変更後のnewValue」が用意されてるから別の実体作って変更してる
想像だけどinout引数を持つ関数側はバイナリコードレベルでは常に参照で受取るようになっていて
willSetがある変数でmutating funcやinout渡しをすると、呼ぶ側が一時変数作ってそれを渡すコードを生成してると思う
var a = A() { willSet{ } }
a.f() //mutating func f()
↓
var a = A()
func a_willSet(_ newValue:A) { }
do {
var tmp = a
tmp.f()
a_willSet(tmp)
a = tmp
}
inoutの場合は a.f()とtmp.f() が f(&a)とf(&tmp)になるイメージ
いや挙動的には予想通りだよ
didSetはともかく、willSetの方は呼ばれたコード内では「変更前のオリジナル変数」と「変更後のnewValue」が用意されてるから別の実体作って変更してる
想像だけどinout引数を持つ関数側はバイナリコードレベルでは常に参照で受取るようになっていて
willSetがある変数でmutating funcやinout渡しをすると、呼ぶ側が一時変数作ってそれを渡すコードを生成してると思う
var a = A() { willSet{ } }
a.f() //mutating func f()
↓
var a = A()
func a_willSet(_ newValue:A) { }
do {
var tmp = a
tmp.f()
a_willSet(tmp)
a = tmp
}
inoutの場合は a.f()とtmp.f() が f(&a)とf(&tmp)になるイメージ
714デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/28(日) 09:31:38.11ID:o7LOyvX/0 この挙動を理解してなければ、structにwillSet/didSetを実装してパフォーマンスに意図しない影響を与える可能性があるな
715デフォルトの名無しさん (ワッチョイ 7b46-sPQt)
2017/05/28(日) 11:21:48.67ID:6qJqAaY90716デフォルトの名無しさん (ワッチョイ 9ff3-UHtP)
2017/05/28(日) 11:31:20.31ID:z3zgF0Nw0 mutatingはselfをinoutで渡す
a.f() // これは
A.f(&a)() // これと同じ
なので一般のinout引数と同様にmutatingメソッド内のselfもセマンティクス的にはcopy-in copy-out
ただmutatingが暗黙にselfをinoutで渡すって説明はリファレンスには見つけられなかった
リポジトリのdocsに放り込まれてる文書群ではしばしば言及されてるけど
a.f() // これは
A.f(&a)() // これと同じ
なので一般のinout引数と同様にmutatingメソッド内のselfもセマンティクス的にはcopy-in copy-out
ただmutatingが暗黙にselfをinoutで渡すって説明はリファレンスには見つけられなかった
リポジトリのdocsに放り込まれてる文書群ではしばしば言及されてるけど
717デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/28(日) 12:29:40.83ID:o7LOyvX/0 気軽にプロパティ変えたつもりの1行で、コピーが3回も(うち2回は配列全体のコピー)発生するのね
structのwillSetは曲者だな
struct Weapon {
var name: String {
willSet { print("new wepon name = ¥(newValue)") }
}
}
struct Monster {
var name: String
var weapons: [Weapon] {
willSet { print("new weapons = ¥(newValue)") }
}
}
var monsters = [
Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]),
Monster(name: "Orc", weapons: [Weapon(name: "Sword")]),
Monster(name: "Dragon", weapons: [])
] {
willSet { print("new monsters = ¥(newValue)") }
}
monsters[1].weapons[0].name = "Mace"
// output
/*
new weapon name = mace
new weapons = [Weapon(name: "Mace"]
new monsters = [Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]), Monster(name: "Orc", weapons: [Weapon(name: "Mace")]), Monster(name: "Dragon", weapons: [])]
*/
structのwillSetは曲者だな
struct Weapon {
var name: String {
willSet { print("new wepon name = ¥(newValue)") }
}
}
struct Monster {
var name: String
var weapons: [Weapon] {
willSet { print("new weapons = ¥(newValue)") }
}
}
var monsters = [
Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]),
Monster(name: "Orc", weapons: [Weapon(name: "Sword")]),
Monster(name: "Dragon", weapons: [])
] {
willSet { print("new monsters = ¥(newValue)") }
}
monsters[1].weapons[0].name = "Mace"
// output
/*
new weapon name = mace
new weapons = [Weapon(name: "Mace"]
new monsters = [Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]), Monster(name: "Orc", weapons: [Weapon(name: "Mace")]), Monster(name: "Dragon", weapons: [])]
*/
718デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/28(日) 12:30:23.95ID:o7LOyvX/0 クラスで実装すれば、wellSetあってもコピーはプロバティに対しての一回だけ
class Weapon {
var name: String {
willSet { print("new wepon name = ¥(newValue)") }
}
init(name: String) {
self.name = name
}
}
class Monster {
var name: String
var weapons: [Weapon] {
willSet { print("new weapons = ¥(newValue)") }
}
init(name: String, weapons: [Weapon]) {
self.name = name
self.weapons = weapons
}
}
var monsters = [
Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]),
Monster(name: "Orc", weapons: [Weapon(name: "Sword")]),
Monster(name: "Dragon", weapons: [])
] {
willSet { print("new monsters = ¥(newValue)") }
}
monsters[1].weapons[0].name = "Mace"
// output
/*
new wepon name = Mace
*/
class Weapon {
var name: String {
willSet { print("new wepon name = ¥(newValue)") }
}
init(name: String) {
self.name = name
}
}
class Monster {
var name: String
var weapons: [Weapon] {
willSet { print("new weapons = ¥(newValue)") }
}
init(name: String, weapons: [Weapon]) {
self.name = name
self.weapons = weapons
}
}
var monsters = [
Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]),
Monster(name: "Orc", weapons: [Weapon(name: "Sword")]),
Monster(name: "Dragon", weapons: [])
] {
willSet { print("new monsters = ¥(newValue)") }
}
monsters[1].weapons[0].name = "Mace"
// output
/*
new wepon name = Mace
*/
719デフォルトの名無しさん (ササクッテロル Sp0f-Kfqe)
2017/05/28(日) 12:35:53.43ID:eqNgb5P3p Swift初期にJavaScriptに似てるからWeb屋が参入してくるとか言ってた人もいたけど全然違うしSwiftはObjective-Cより仕様が複雑になってきたね
でもおかしなコードはコンパイラがビシバシ教えてくれるし仕様を詳しく知らなくてもとりあえずコードを書く事はできるかな?
でもおかしなコードはコンパイラがビシバシ教えてくれるし仕様を詳しく知らなくてもとりあえずコードを書く事はできるかな?
720デフォルトの名無しさん (ワッチョイ dbee-Uhxf)
2017/05/28(日) 22:04:52.22ID:ls5tm5z70 Swiftけっこう難しい
Objective-Cは形式張っていてコードがやたらと長くなるだけで実はそんなに難しくない
Objective-Cは形式張っていてコードがやたらと長くなるだけで実はそんなに難しくない
721デフォルトの名無しさん (ワッチョイ fb54-WkB/)
2017/05/28(日) 22:35:10.01ID:7/a46AkG0722デフォルトの名無しさん (ワッチョイ 0fa3-iTU4)
2017/05/28(日) 22:44:58.49ID:ew7wH7J40 詰め込みすぎて開発者のスキルでコードが変わりすぎるのが難点
723デフォルトの名無しさん (スップ Sdbf-sPQt)
2017/05/28(日) 22:57:25.17ID:Y/jTFKWEd >>720
C知ってればハードル高くないからなObjCは
C知ってればハードル高くないからなObjCは
724デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/28(日) 23:22:08.09ID:o7LOyvX/0 そのCがハードル高いからな初心者には
725デフォルトの名無しさん (ワッチョイ 7b46-NZKg)
2017/05/28(日) 23:28:56.75ID:6qJqAaY90 SwiftとCのどっちがハードル高いかって言ったらCとは言えないけどな
Cのシンタックスをベースにしてる言語は多いから、初学者にSwiftとC
どっちをやった方がいいかって言われたら間違いなくCだわ
Cのシンタックスをベースにしてる言語は多いから、初学者にSwiftとC
どっちをやった方がいいかって言われたら間違いなくCだわ
726デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/28(日) 23:30:24.66ID:o7LOyvX/0 初心者にポインターは結構ハードル高いと思うけど
あとメモリ管理にシビアな所とか
あとメモリ管理にシビアな所とか
727デフォルトの名無しさん (ワッチョイ 7b46-sPQt)
2017/05/29(月) 00:25:02.54ID:lFCv8yRy0 Cもわからんようなもやしエンジニアが増えると思うと先が思いやられる
ソフト屋もハードウェアに近いプリミティブな部分の理解は必要なんだけとな
そういう意味でCは高級アセンブラ的なバランスがちょうどいい
ソフト屋もハードウェアに近いプリミティブな部分の理解は必要なんだけとな
そういう意味でCは高級アセンブラ的なバランスがちょうどいい
728デフォルトの名無しさん (アウアウエー Sa3f-Kfqe)
2017/05/29(月) 00:38:37.93ID:21264BYsa >>726
ポインタが難しいって言ったって、結局ポインタ的なメモリの知識はあった方がデバッグでメモリ周り疑う疑わないに直結するしなぁ。。。
ポインタが難しいって言ったって、結局ポインタ的なメモリの知識はあった方がデバッグでメモリ周り疑う疑わないに直結するしなぁ。。。
729デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/29(月) 00:47:58.23ID:3RO08/qX0 でも今は簡単なゲーム作りたいとかなら特にポインタの知識なくても作れちゃうからなぁ
初心者にC言語でゲーム作ってだと難しいと思うけど、Swiftなら割と簡単
モグラたたきとかジャンケンゲーム程度なら初心者でも2,3日で作れるかも
初心者にC言語でゲーム作ってだと難しいと思うけど、Swiftなら割と簡単
モグラたたきとかジャンケンゲーム程度なら初心者でも2,3日で作れるかも
730デフォルトの名無しさん (アウアウエー Sa3f-Kfqe)
2017/05/29(月) 00:57:45.02ID:21264BYsa 誰もポインタないと作れないなんて言ってない。
ポインタの知識はトラブった時にトラブルの原因の候補にメモリが上がるか?どう状態かを推測出来るか?ってのに直結する。
ポインタと言うか、メモリの構造を知らなけりゃトラブルの原因として候補にすら上がらない。
下手すれば永延と原因分からないまま、プログラムは未完に終わる。
ポインタの知識はトラブった時にトラブルの原因の候補にメモリが上がるか?どう状態かを推測出来るか?ってのに直結する。
ポインタと言うか、メモリの構造を知らなけりゃトラブルの原因として候補にすら上がらない。
下手すれば永延と原因分からないまま、プログラムは未完に終わる。
731デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/29(月) 01:03:25.64ID:3RO08/qX0 そんなこと言い出したら究極的にはコンパイラの癖とかハードの特性とかまで知らないとデバッグできないことになる
初心者にそこまで求めるのは余りにも遠い道のりになる
初心者にそこまで求めるのは余りにも遠い道のりになる
732デフォルトの名無しさん (アウアウエー Sa3f-Kfqe)
2017/05/29(月) 01:19:59.07ID:21264BYsa そこまで言わんが、初心者と言えどもCPUとメモリの仕組みは理解してからプログラミングは始めて欲しいものだが。
体験して見たいだけなら兎も角、プログラマになりたいんならね。
体験して見たいだけなら兎も角、プログラマになりたいんならね。
733デフォルトの名無しさん (ワッチョイ 7bf5-vlKO)
2017/05/29(月) 06:40:45.44ID:DGY6L2yw0 kotlin nativeがllvm対応してるらしいのでiosでもkotlin使えそう。
となればswiftはもういいかな。
となればswiftはもういいかな。
734デフォルトの名無しさん (ササクッテロリ Sp0f-3U4p)
2017/05/29(月) 07:01:38.32ID:L9ed4gjcp フフってなった
昔、SwiftもLLVMだからどこでも動くって言ってたなぁ
まぁKotlinは頑張ってポーティングしてるようだから
実用性はさておき動くんだろうけど
昔、SwiftもLLVMだからどこでも動くって言ってたなぁ
まぁKotlinは頑張ってポーティングしてるようだから
実用性はさておき動くんだろうけど
735デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/29(月) 08:51:21.58ID:A7rCPaLD0736デフォルトの名無しさん (スプッッ Sdbf-iTU4)
2017/05/29(月) 09:10:28.76ID:96NrxdYRd737デフォルトの名無しさん (ワッチョイ 2b72-Kfqe)
2017/05/29(月) 10:41:09.25ID:M6frmmyd0 ポインタとか分からんレベルの人にはやりたい放題出来ないがんじがらめの世界の方がいい気はする
柔軟性はObjective-Cで安全性はSwiftなイメージ
柔軟性はObjective-Cで安全性はSwiftなイメージ
738デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/29(月) 11:13:19.98ID:A7rCPaLD0739デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/29(月) 11:14:56.30ID:A7rCPaLD0 It is not a fully functional release yet,
Kotlin/Nativeがどの程度動くのか?気になる。
Kotlin/Nativeがどの程度動くのか?気になる。
740デフォルトの名無しさん (エムゾネ FFbf-4cAo)
2017/05/29(月) 11:27:53.51ID:trx2RJe/F >>729
ポインタ分からないって人は、参照型の値型の違いが理解出来なくないか?
ポインタ分からないって人は、参照型の値型の違いが理解出来なくないか?
741デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/29(月) 12:04:20.43ID:3RO08/qX0 参照型と値型の違いがわからなくても使い方さえ理解できれば簡単なアプリは作れるからな
ある程度の最適化はコンパイラがやってくれるし、ハードの性能も上がってるから、多少の冗長性は無視できる
C言語だとそうはいかない
ポインタを知らないとまずまともなアプリはつくれない
外部のライブラリを利用する場合もポインタの知識は必須になる
ポインタの理解が参照型の理解の助けにはなるだろうけど厳密にはポインタと参照型は同じものでもないし
ある程度の最適化はコンパイラがやってくれるし、ハードの性能も上がってるから、多少の冗長性は無視できる
C言語だとそうはいかない
ポインタを知らないとまずまともなアプリはつくれない
外部のライブラリを利用する場合もポインタの知識は必須になる
ポインタの理解が参照型の理解の助けにはなるだろうけど厳密にはポインタと参照型は同じものでもないし
742デフォルトの名無しさん (スプッッ Sdbf-4cAo)
2017/05/29(月) 12:14:04.16ID:idSzy2HYd それは、ポインタを知らなくても使い方さえ覚えれば簡単なアプリは作れる、っていっても同じじゃないか?
743デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/29(月) 12:33:55.33ID:3RO08/qX0 ポインタの場合は概念を理解しないで使い方だけ覚えるってのはちと無理がある
Swiftの参照型は概念をきっちり理解できなくても、大概動くものは作れるし、変なことやろうとしてもIDEやコンパイラが注意してくれる
Swiftの参照型は概念をきっちり理解できなくても、大概動くものは作れるし、変なことやろうとしてもIDEやコンパイラが注意してくれる
744デフォルトの名無しさん (スプッッ Sdbf-iTU4)
2017/05/29(月) 13:11:45.84ID:96NrxdYRd >>740
ポインタしらなくても挙動でわかるだろ
ポインタしらなくても挙動でわかるだろ
745デフォルトの名無しさん (スプッッ Sdbf-4cAo)
2017/05/29(月) 13:27:25.51ID:idSzy2HYd746デフォルトの名無しさん (スプッッ Sdbf-iTU4)
2017/05/29(月) 13:29:35.62ID:96NrxdYRd747デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/29(月) 13:38:22.24ID:3RO08/qX0 そもそも初心者は参照型だ値型だとあまり意識しないんじゃないか
意識しなくてもコードは書ける
Swiftならね
意識しなくてもコードは書ける
Swiftならね
748デフォルトの名無しさん (ワッチョイ 7b46-NZKg)
2017/05/29(月) 21:45:25.45ID:lFCv8yRy0 >>741
だからObjective-Cはいろいろと素晴らしいと考える人が少なくないんだと思うけどな
だからObjective-Cはいろいろと素晴らしいと考える人が少なくないんだと思うけどな
749デフォルトの名無しさん (ワッチョイ fb54-2haG)
2017/05/29(月) 21:47:34.02ID:e8ZpNhPJ0 今後出現して欲しい本
SwiftプログラマのためのKotlin入門
Androidアプリ作りたいけど、Javaは嫌なんだよなぁ。
SwiftプログラマのためのKotlin入門
Androidアプリ作りたいけど、Javaは嫌なんだよなぁ。
750デフォルトの名無しさん (ワッチョイ 0fa3-iTU4)
2017/05/29(月) 21:59:32.56ID:HMZ0UBYT0 >>749
そんな本なくてもswiftの簡単版みたいなもんだから余裕でかける
そんな本なくてもswiftの簡単版みたいなもんだから余裕でかける
751デフォルトの名無しさん (ワッチョイ 7bf5-vlKO)
2017/05/30(火) 01:08:42.87ID:Q1uksSWN0 iosもandroidも共通で言えることなんだけどさ、もう一段フレームワークが欲しい。どっちもuiライブラリ止まりで、
全体の管理を行う部分が開発者任せで、正直困る。一画面アプリ止まりならそれでもいいんだけどさ。
全体の管理を行う部分が開発者任せで、正直困る。一画面アプリ止まりならそれでもいいんだけどさ。
752デフォルトの名無しさん (ワッチョイ 0fa3-iTU4)
2017/05/30(火) 01:09:28.67ID:YGoyijxE0 ???
753デフォルトの名無しさん (ワッチョイ 7bdf-0q68)
2017/05/30(火) 01:21:48.80ID:zlRLzU390 >>751
例えば?
例えば?
754デフォルトの名無しさん (ワッチョイ 7bf5-vlKO)
2017/05/30(火) 02:18:06.30ID:Q1uksSWN0 ステート管理だけで言えばreactのreduxみたいなやつとか。
あれってファイルの置き場所とかもある程度誘導されるから迷いが減るんだよね。
あれってファイルの置き場所とかもある程度誘導されるから迷いが減るんだよね。
755デフォルトの名無しさん (ササクッテロリ Sp0f-3U4p)
2017/05/30(火) 09:52:12.97ID:zOXcPiC1p ソースファイルの置場所も公式に決まってないSwiftに何期待してるのか
まずはSwift Package ManagerとXcodeで共通化することから始めよう
まずはSwift Package ManagerとXcodeで共通化することから始めよう
756デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/30(火) 10:07:35.91ID:LRk+Le9O0 俺もパッケージマネージャが複数あるのが好かんなぁ。
1. Carthage
2. CocoaPods
3. Swift Package Manager
俺は1.がxcodeprojへの変更が少なくて好みだ。
2.はxcodeprojをどう変更してるのかが、見えない。
1. Carthage
2. CocoaPods
3. Swift Package Manager
俺は1.がxcodeprojへの変更が少なくて好みだ。
2.はxcodeprojをどう変更してるのかが、見えない。
757デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/30(火) 10:49:53.98ID:hcHvAlDm0 CocoaPodsはオープンソースだからxcodeprojをどう変更してるかは見えるだろ
758デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/30(火) 10:53:32.01ID:LRk+Le9O0 Swiftとはちょいと違う事で質問です。
UMLモデリングって最近でも使われますか?
使う目的は何でしょう?
1. すでにあるコードの解析
2. これから作成するコードの可視化
UMLモデリングって最近でも使われますか?
使う目的は何でしょう?
1. すでにあるコードの解析
2. これから作成するコードの可視化
759デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/30(火) 11:24:11.63ID:hcHvAlDm0 そんなこと聞いてどうすんの? と聞き返したくなるような質問すんな
皆が使ってるなら使ってみようかってことか
皆が使ってるなら使ってみようかってことか
760デフォルトの名無しさん (アウアウウー Sacf-Evzo)
2017/05/30(火) 11:24:54.00ID:gxWnkgCCa しかるべきスレへ行ってはどうか
761デフォルトの名無しさん (スプッッ Sdbf-4cAo)
2017/05/30(火) 12:41:12.92ID:8S4zHXFCd >>758
モデリングのために決まってんだろ
モデリングのために決まってんだろ
762デフォルトの名無しさん (ブーイモ MMbf-vlKO)
2017/05/30(火) 13:35:34.23ID:MeRfIrpoM >>755
まさにこれ。決めてほしい。
それかアップル自身が公式にリファレンスとなるアプリをオープンソースにしてほしい。
react-nativeだとf8appがそれっぽいが。
なんかそれなりの規模のオープンソースアプリないかな。
まさにこれ。決めてほしい。
それかアップル自身が公式にリファレンスとなるアプリをオープンソースにしてほしい。
react-nativeだとf8appがそれっぽいが。
なんかそれなりの規模のオープンソースアプリないかな。
763デフォルトの名無しさん (ササクッテロリ Sp0f-W32U)
2017/05/30(火) 14:59:25.27ID:zOXcPiC1p swift.orgのPackage Managerのページにゴミのようなサンプルはあるけど
自身(SPM)のことしか考えてないから、自分で作った方が良いだろうねぇ
Swift Package Manager
https://swift.org/package-manager/#conceptual-overview
Package.swift作って、Sources, Testsディレクトリ作る
CocoaPods
https://guides.cocoapods.org/syntax/podfile.html
Podfile作る, Sources/*.swiftを参照
Carthage
https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile
Carfile作る, Sources/*.swiftを参照
Xcode
上の全部を適当にpodが作った.xcworkspaceのプロジェクトツリーに加える
自身(SPM)のことしか考えてないから、自分で作った方が良いだろうねぇ
Swift Package Manager
https://swift.org/package-manager/#conceptual-overview
Package.swift作って、Sources, Testsディレクトリ作る
CocoaPods
https://guides.cocoapods.org/syntax/podfile.html
Podfile作る, Sources/*.swiftを参照
Carthage
https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile
Carfile作る, Sources/*.swiftを参照
Xcode
上の全部を適当にpodが作った.xcworkspaceのプロジェクトツリーに加える
764デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/31(水) 11:13:03.77ID:9hyFYnrA0 qiitaのKotlin記事を読んでて出くわしたphrase。
Android アプリ開発者であれば普段から英語を読んでいると思いますし、平易な英語なので大きな問題はないと思います。
俺にはComputer関連の英語文章が難しく感じるのだけど、どうなんでしょう?
exressionを式だと理解するのに、随分時間がかかったと思う。
Android アプリ開発者であれば普段から英語を読んでいると思いますし、平易な英語なので大きな問題はないと思います。
俺にはComputer関連の英語文章が難しく感じるのだけど、どうなんでしょう?
exressionを式だと理解するのに、随分時間がかかったと思う。
765デフォルトの名無しさん (アウアウカー Sa8f-Kfqe)
2017/05/31(水) 12:18:51.47ID:mlMZGH6Ha 和書にも専門用語は英訳も一緒に載ってること多いから違和感無かったけど、入門してすぐ洋書だとそう感じるかも。
766デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/31(水) 12:45:27.84ID:9hyFYnrA0 たしかに!
順方向伝搬(forward propagation)って書いてあるね。和書には。
expressionを式、statementを文と訳すのは判ったけど、和書には「式文」
ってのが時々出て来て、これ何を翻訳したんだ?
と不安になる。
順方向伝搬(forward propagation)って書いてあるね。和書には。
expressionを式、statementを文と訳すのは判ったけど、和書には「式文」
ってのが時々出て来て、これ何を翻訳したんだ?
と不安になる。
767デフォルトの名無しさん (JP 0Hcf-Evzo)
2017/05/31(水) 16:07:11.28ID:nyiBm3r5H そんなあなたに
Regular Expression
はどう訳す
Regular Expression
はどう訳す
768デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/31(水) 16:13:04.68ID:9hyFYnrA0 >>767
いつも良く使うマッチ式
いつも良く使うマッチ式
769デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/31(水) 16:16:42.72ID:9hyFYnrA0 regular = いつもの
例:regular customer = 常連、regular coffee = 日々よく飲むコーヒー
regular ¥= 正規 = formal, proper
例:regular customer = 常連、regular coffee = 日々よく飲むコーヒー
regular ¥= 正規 = formal, proper
770デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/31(水) 16:19:06.25ID:9hyFYnrA0 正規表現って訳語は、誤訳だわぁ。
771デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/31(水) 16:19:30.13ID:9hyFYnrA0 誤訳を永遠と使い続けるのは、よく無い。
772デフォルトの名無しさん (JP 0Hcf-Evzo)
2017/05/31(水) 16:25:25.52ID:nyiBm3r5H >>770
石田晴久が糞って有名ですし
石田晴久が糞って有名ですし
773デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/31(水) 16:37:31.63ID:9hyFYnrA0 >>772
まあ、情報が入手しずらい時代に苦心して日本語を当てたって感じだ。
Microsoftの文書を読んで、まったく意味がわからんかったのを思い出さしてクレルわぁ。DAO ActiveX Library, RDO ActiveX Libraryに関しての記述を読んで、
さっぱり意味不明だった。和文も、英文も。
サンプルコードを見たら一発で理解できた。
まあ、情報が入手しずらい時代に苦心して日本語を当てたって感じだ。
Microsoftの文書を読んで、まったく意味がわからんかったのを思い出さしてクレルわぁ。DAO ActiveX Library, RDO ActiveX Libraryに関しての記述を読んで、
さっぱり意味不明だった。和文も、英文も。
サンプルコードを見たら一発で理解できた。
774デフォルトの名無しさん (スッップ Sdbf-fYd5)
2017/05/31(水) 19:53:48.08ID:3T0UNs5qd775デフォルトの名無しさん (ワッチョイ fb54-2haG)
2017/05/31(水) 20:15:00.41ID:Iu1e43xk0 >>774
頭悪そ。
頭悪そ。
776デフォルトの名無しさん (ワッチョイ 9f72-p7jx)
2017/05/31(水) 21:26:00.22ID:DggZESjQ0 >>750
Swiftより簡単なの?
Swiftより簡単なの?
777デフォルトの名無しさん (ワッチョイ fb54-WkB/)
2017/05/31(水) 21:33:41.18ID:Iu1e43xk0 >>750
知ったか
知ったか
778デフォルトの名無しさん (スプッッ Sdbf-iTU4)
2017/05/31(水) 21:47:41.16ID:WiTkOt3Sd >>776
果てしなく簡単
果てしなく簡単
779デフォルトの名無しさん (ワッチョイ 7bf5-vlKO)
2017/05/31(水) 22:53:30.93ID:JH+W+dlz0 swiftが言語仕様固まらないうちにkotlinがios対応しちゃうな。
780デフォルトの名無しさん (ワッチョイ 7b46-NZKg)
2017/05/31(水) 23:40:55.86ID:pEaTZtAB0 Swift使ってる自分が好きな人
781デフォルトの名無しさん (スップ Sdea-EO1S)
2017/06/01(木) 08:38:33.85ID:gogTzzXkd モダンな言語Swiftを使ってる最先端な自分
782デフォルトの名無しさん (スプッッ Sdea-v+1e)
2017/06/01(木) 09:47:53.31ID:5viUjg+Pd swiftは作る奴の思考によってパラダイムが変わるから他人のコードがストレスになる糞言語
いっそのことclassを消してしまえばいいわ
いっそのことclassを消してしまえばいいわ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★3 [蚤の市★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 ★2 [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★5 [Hitzeschleier★]
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ ★2 [Hitzeschleier★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- 【痴呆症】オム太郎「石破政権はどよーんとして何も動かなかったが、高市政権になってからは何となく明るくなって動いてる気がする」 [402859164]
- 竹中平蔵「日米が長年守り続けてき台湾有事に関する曖昧戦略の知恵を一瞬にして無にさせた岡田の責任は非常に重い」 [271912485]
- 【高市悲報】トケドロ高橋「あれまw日本は食料品だけ上がっていてインフレとは言えない😤円安上等!」 [359965264]
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
- 【画像】海外の寿司パーティー、レベチwwwwwwwwww [834922174]
- 【朗報】ほっともっとで一番好きな弁当は? 圧倒的にあれに決まるwwwwwwwwwww
