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:ChbPWtRt0624デフォルトの名無しさん (ワッチョイ c372-+Mvj)
2017/05/21(日) 11:11:35.71ID:xz6V7we20 バグレポを出す時にプルリクをセットにすれば安定はすぐだ
625デフォルトの名無しさん (ワッチョイ ff46-aHqd)
2017/05/21(日) 11:13:42.65ID:Wx20c4Ig0 >>622
無理無理
無理無理
626デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/22(月) 09:20:46.59ID:QM6p1JyG0627デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/22(月) 09:23:11.36ID:QM6p1JyG0 Swift4 betaをinstallした後、Xcode8.3.2で切り替えながら使うqiita記事を見失った。
なんと言うタイトルだったか?どんなtagでqiitaを検索すればhitするのか?
教えてクレェ?
なんと言うタイトルだったか?どんなtagでqiitaを検索すればhitするのか?
教えてクレェ?
628デフォルトの名無しさん (ワッチョイ 8af3-TEJk)
2017/05/22(月) 10:13:24.24ID:np8fDJ8H0 Xcode用のsnapshotはインストーラ形式だしダウンロードしてインストールしてXcodeのtoolchainで切り替えるだけの簡単操作やろ
Xcodeでの切り替えはXcode>Toolchainsか環境設定>Components>Toolchains
Terminalでの切り替えは
毎回頭にxcrun -toolchain swiftとつけて
xcrun -toolchain swift swift -version
とするか
export TOOLCHAINS=swift
すればいい
インストールされる実体は
/Library/Developer/Toolchains/xxx.xctoolchain
にある
.xctoolchain内のInfo.plistにあるCFBundleIdentifierをtoolchainの引数に指定すれば、複数のSnapshotをインストールしてても細かく切り替えられる
xcrun --toolchain org.swift.3020170515a swift -version
とか
去年はPlaygroundsがToolchainに対応してなかったけど今年は対応済みのようなのでPlaygroundsで色々試せていい
https://github.com/ole/whats-new-in-swift-4
Xcodeでの切り替えはXcode>Toolchainsか環境設定>Components>Toolchains
Terminalでの切り替えは
毎回頭にxcrun -toolchain swiftとつけて
xcrun -toolchain swift swift -version
とするか
export TOOLCHAINS=swift
すればいい
インストールされる実体は
/Library/Developer/Toolchains/xxx.xctoolchain
にある
.xctoolchain内のInfo.plistにあるCFBundleIdentifierをtoolchainの引数に指定すれば、複数のSnapshotをインストールしてても細かく切り替えられる
xcrun --toolchain org.swift.3020170515a swift -version
とか
去年はPlaygroundsがToolchainに対応してなかったけど今年は対応済みのようなのでPlaygroundsで色々試せていい
https://github.com/ole/whats-new-in-swift-4
629デフォルトの名無しさん (ササクッテロリ Sp03-CR9d)
2017/05/22(月) 10:14:58.82ID:WxrTRTpJp xcrun selectとか(定期待ち)
630デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/22(月) 10:47:13.23ID:QM6p1JyG0631デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/23(火) 10:52:51.90ID:3fZmvxNt0 Swift歴2年、アプリリリース経験無しの非IT系リーマンです。Generics protocolとか難しいなぁと思いながら、RxSwiftのコードを解読してます。
Fortran, C++のコードを書いて金をもらった事があります。C#, Java, Obj-Cもチョコっといじった事があります。
Swift, C#, Java, C++の4つの内、どれが一番難しいと思います?
Fortran, C++のコードを書いて金をもらった事があります。C#, Java, Obj-Cもチョコっといじった事があります。
Swift, C#, Java, C++の4つの内、どれが一番難しいと思います?
632デフォルトの名無しさん (ワッチョイ 7a6e-p3s1)
2017/05/23(火) 11:07:24.17ID:nyMT4OHb0 難しさでいったら、C++ 一択やろなぁ
633デフォルトの名無しさん (アウアウエー Sac2-PCQh)
2017/05/23(火) 11:12:58.06ID:3W0XlzKra 圧倒的にC++。
今でもMFCには玄人っぽさへの憧れはあるけど、MFCの本は最盛期に比べて大分減ったなぁ。。。
JavaやC#してから(特にC#のがC++に近いけど分からなくなる一歩手前まで取り入れてるからオススメ)、C++行くと理解が進むね。
今でもMFCには玄人っぽさへの憧れはあるけど、MFCの本は最盛期に比べて大分減ったなぁ。。。
JavaやC#してから(特にC#のがC++に近いけど分からなくなる一歩手前まで取り入れてるからオススメ)、C++行くと理解が進むね。
634デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/23(火) 11:52:49.93ID:3fZmvxNt0 AppleのReferenceで混乱してる記述を発見
1. メタ・タイプを戻すグローバル関数type(of:)の説明には、戻り値がMetatypeとある。
2. メタ・タイプを引数にとるUITableViewCell.registerの説明には、引数がAnyClassとある。
どっちかに記述を統一してほしい。
1. メタ・タイプを戻すグローバル関数type(of:)の説明には、戻り値がMetatypeとある。
2. メタ・タイプを引数にとるUITableViewCell.registerの説明には、引数がAnyClassとある。
どっちかに記述を統一してほしい。
635デフォルトの名無しさん (ワッチョイ 8af3-TEJk)
2017/05/23(火) 13:01:08.53ID:IPskfFz70 Metatypeはstructやenumも含めた型でAnyClassはclassだけじゃない
636デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/23(火) 13:07:30.75ID:3fZmvxNt0 >>635
なるほどぉ
なるほどぉ
637デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/23(火) 13:46:30.45ID:3fZmvxNt0 >>633
Visual Studio6の頃までしか、MFCは知らんけど、
Microsoftは、MFCを放置してるんちゃうの?
同時に、C++11, C++14って進化してるのに、Micorsoft C++はこれも独自仕様
で放置されてる、ちゅうのが俺の印象なんすけど、違うんでしょうか?
最近のMicrosoft系開発環境に疎いので間違ってたら申し訳ないすけど。
Visual Studio6の頃までしか、MFCは知らんけど、
Microsoftは、MFCを放置してるんちゃうの?
同時に、C++11, C++14って進化してるのに、Micorsoft C++はこれも独自仕様
で放置されてる、ちゅうのが俺の印象なんすけど、違うんでしょうか?
最近のMicrosoft系開発環境に疎いので間違ってたら申し訳ないすけど。
638デフォルトの名無しさん (ワッチョイ b33c-0jzF)
2017/05/23(火) 14:21:59.30ID:ka9VvDM30 >>634
違いは>>635(AnyClassはclassだけ)であってるけど
補足するとMetatypeという識別子の型は無い
あれは単なるジェネリクスのプレースホルダ名
実際のメタタイプの型は「(型名).Type」でAny.Type型にも入れられる
AnyClassは「AnyObject.Type」のエイリアスでclassのメタタイプのみ入る
ちなみにメタタイプの値自体はclass型でないのでメタタイプのメタタイプはAnyClassに入らない
class A{}
let a:AnyClass = A.self //OK
let b:AnyClass = A.Type.self //NG
let c:Any.Type = A.Type.self //OK
違いは>>635(AnyClassはclassだけ)であってるけど
補足するとMetatypeという識別子の型は無い
あれは単なるジェネリクスのプレースホルダ名
実際のメタタイプの型は「(型名).Type」でAny.Type型にも入れられる
AnyClassは「AnyObject.Type」のエイリアスでclassのメタタイプのみ入る
ちなみにメタタイプの値自体はclass型でないのでメタタイプのメタタイプはAnyClassに入らない
class A{}
let a:AnyClass = A.self //OK
let b:AnyClass = A.Type.self //NG
let c:Any.Type = A.Type.self //OK
639デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/23(火) 17:12:29.92ID:3fZmvxNt0 /var/folders/4x/4kvmnvfd46zdv9xt45wf2kx00000gn/T/
vzb3TAU/1:20:19: warning: operator should no longer be declared with body
infix operator ^^ { }
~^~~
SwiftコンパイラーをTerminal.appで動かすと上記の様なwarningが出ます。
エラーの内容は^^演算子が定義されていません。って事だんですけど。これは、置いておいて、
1:20:19は何を表わしてるのでしょうか?20行目19カラムって事は判ったのですが、1は何でしょう?
1番目のソースって事なんでしょうか?
vzb3TAU/1:20:19: warning: operator should no longer be declared with body
infix operator ^^ { }
~^~~
SwiftコンパイラーをTerminal.appで動かすと上記の様なwarningが出ます。
エラーの内容は^^演算子が定義されていません。って事だんですけど。これは、置いておいて、
1:20:19は何を表わしてるのでしょうか?20行目19カラムって事は判ったのですが、1は何でしょう?
1番目のソースって事なんでしょうか?
640デフォルトの名無しさん (アウアウエー Sac2-PCQh)
2017/05/23(火) 18:36:11.48ID:PJIONmxya >>637
リボンUIはMFCらしいってのまでは追ってたんで、今も地味に進化してると思うけど、おいらも分からん。
あの機能は何の為かとか分かるようになったけど、結局C++触らなくなった。
再入門しようにも入門書の少なさよ。。。
リボンUIはMFCらしいってのまでは追ってたんで、今も地味に進化してると思うけど、おいらも分からん。
あの機能は何の為かとか分かるようになったけど、結局C++触らなくなった。
再入門しようにも入門書の少なさよ。。。
641デフォルトの名無しさん (ワッチョイ ca3b-ydzL)
2017/05/23(火) 19:14:39.26ID:1Q8iu32F0 ビルドキャッシュとして
/var/folders/4x/4kvmnvfd46zdv9xt45wf2kx00000gn/T/vzb3TAU/1
ってファイルがあるんじゃないの
一時的に作られてすぐ削除されるかもしれんから存在確認できるか知らんけど
/var/folders/4x/4kvmnvfd46zdv9xt45wf2kx00000gn/T/vzb3TAU/1
ってファイルがあるんじゃないの
一時的に作られてすぐ削除されるかもしれんから存在確認できるか知らんけど
642デフォルトの名無しさん (ワッチョイ fff5-sZ5x)
2017/05/24(水) 01:14:07.99ID:9HF6LZlN0 そもそもwindowsのアプリ開発でMFC使う事情って保守以外に何あるの?
643デフォルトの名無しさん (ワッチョイ ca3b-ydzL)
2017/05/24(水) 07:14:18.79ID:6yksy5B10 このスレチの話題の結末が
MFCがmacOSで使える、そうSwiftならね
だったら感動する
MFCがmacOSで使える、そうSwiftならね
だったら感動する
644デフォルトの名無しさん (アウアウエー Sac2-PCQh)
2017/05/24(水) 10:39:54.11ID:2xFOJ35Oa 感動はするけど、真っ平御免だなw
645デフォルトの名無しさん (アウアウエー Sac2-PCQh)
2017/05/24(水) 10:40:45.91ID:2xFOJ35Oa646デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/24(水) 10:44:09.55ID:vuqBov/y0647デフォルトの名無しさん (JP 0H2f-CgLL)
2017/05/24(水) 11:45:23.69ID:4nncZNTTH MFCはクラスライブラリとは言ってるけどただのモジュールだからなω
648デフォルトの名無しさん (ワッチョイ 7a6e-p3s1)
2017/05/24(水) 12:03:02.42ID:2l4fECtb0 KFCはファーストフードとは言ってるけどただのフライドチキンだからなω
649デフォルトの名無しさん (JP 0H2f-CgLL)
2017/05/24(水) 12:10:44.50ID:4nncZNTTH KFC高いよね
650デフォルトの名無しさん (アウアウエー Sac2-9r6K)
2017/05/24(水) 12:40:42.62ID:QzCZ6xD4a あとポケトも不味いよね
651デフォルトの名無しさん (ササクッテロリ Sp03-ydzL)
2017/05/24(水) 12:43:35.78ID:5Ui6S+Mpp macもファストフードって言ってるけどハンバーガーなんだよな...
652デフォルトの名無しさん (ワッチョイ fff5-sZ5x)
2017/05/24(水) 15:21:05.18ID:9HF6LZlN0 もうkotlinでいいんじゃね。大体同じだし。
653デフォルトの名無しさん (ワッチョイ 7a6e-p3s1)
2017/05/24(水) 15:27:20.63ID:yyV+KPjA0 Kotlinの方が名前が可愛いな
654デフォルトの名無しさん (ブーイモ MMea-XqYc)
2017/05/24(水) 15:39:03.23ID:EADXj+S1M バカッターの次はマスト鈍かよ
Swiftはコンパイル必要とかスクリプト言語だとかクッソデタラメばかり撒き散らしてやがる
Swiftはスクリプト言語のようにJIT実行もできるし事前コンパイルして動作することもできるっちゅーねん
よくわかってないからと言って既存のカテゴリに当てはめようとするからおかしくなるんだ。黙ってればいいのに。
twitterもマストドンもバカに絡まれたくないから間違ってても誰も訂正してくれないてことはもうそろそろ理解しないといけないだろうに
Swiftはコンパイル必要とかスクリプト言語だとかクッソデタラメばかり撒き散らしてやがる
Swiftはスクリプト言語のようにJIT実行もできるし事前コンパイルして動作することもできるっちゅーねん
よくわかってないからと言って既存のカテゴリに当てはめようとするからおかしくなるんだ。黙ってればいいのに。
twitterもマストドンもバカに絡まれたくないから間違ってても誰も訂正してくれないてことはもうそろそろ理解しないといけないだろうに
655デフォルトの名無しさん (ワッチョイ dea3-M94C)
2017/05/24(水) 15:43:46.34ID:820zba2j0 つまりkotlin統一でいいね?
656デフォルトの名無しさん (ワッチョイ 9ff3-A/6v)
2017/05/24(水) 16:16:47.79ID:vuqBov/y0 kotlinのvar, valが嫌いだ。
var, letにしてくれ!
var, letにしてくれ!
657デフォルトの名無しさん (ワッチョイ b33c-0jzF)
2017/05/24(水) 17:53:01.63ID:IPRnvfLw0 じゃあvar, letにした新言語Kotiftで
658デフォルトの名無しさん (アウアウエー Sac2-PCQh)
2017/05/24(水) 18:40:00.41ID:fS2T0Ehba659デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/25(木) 08:20:49.95ID:STB2bQ410660デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/25(木) 08:39:03.16ID:STB2bQ410 RAD StudioってのでiOSアプリ作れるみたい。
661デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/25(木) 09:04:58.00ID:STB2bQ410662デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 09:55:30.40ID:pDlob0Fd0 >>661
ブラクラ
ブラクラ
663デフォルトの名無しさん (JP 0Hcf-Evzo)
2017/05/25(木) 10:26:57.11ID:nE79I92lH ブラクラではないが特に読む意味もなかった
664デフォルトの名無しさん (アウアウエー Sa3f-0req)
2017/05/25(木) 10:35:05.59ID:jD8c7u6va665デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/25(木) 11:18:46.81ID:STB2bQ410666デフォルトの名無しさん (スッップ Sdbf-fYd5)
2017/05/25(木) 12:08:23.03ID:ETNdktOYd >>662
ブラクラとは、どういう意味ですか。
ブラクラとは、どういう意味ですか。
667デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 12:36:36.05ID:pDlob0Fd0 >>666
ブラクラとは、どういう意味ですか。とは、どういう意味ですか?
ブラクラとは、どういう意味ですか。とは、どういう意味ですか?
668デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
2017/05/25(木) 12:53:08.46ID:STB2bQ410 >>667
お前、相当、捻くれ者!
お前、相当、捻くれ者!
669デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 13:09:18.12ID:pDlob0Fd0 >>668
ありがとー
ありがとー
670デフォルトの名無しさん (ワッチョイ 9ff3-UHtP)
2017/05/25(木) 13:38:00.17ID:A2RaX9kE0 完全にスレチな話題延々してるのとどっちもどっち
671デフォルトの名無しさん (ワッチョイ fbf3-W32U)
2017/05/25(木) 16:35:11.41ID:trjr6FJg0 下のドキュメントを読むにCopy On Writeで最適化する場合にはprotocolやclassでラップせよと言ってるんだけど
Copy On Writeって関数引数に単純なstruct型を渡した時の値渡しには適用されないって認識であってる?
教えてエロい人
https://github.com/apple/swift/blob/master/docs/OptimizationTips.rst
Advice: Use copy-on-write semantics for large values
Copy On Writeって関数引数に単純なstruct型を渡した時の値渡しには適用されないって認識であってる?
教えてエロい人
https://github.com/apple/swift/blob/master/docs/OptimizationTips.rst
Advice: Use copy-on-write semantics for large values
672デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 17:14:53.66ID:pDlob0Fd0 どこに
>Copy On Writeで最適化する場合にはprotocolやclassでラップせよ
とか書いてあんだよ
>Copy On Writeって関数引数に単純なstruct型を渡した時の値渡しには適用されないって認識であってる?
んなわけねーだろ
>Copy On Writeで最適化する場合にはprotocolやclassでラップせよ
とか書いてあんだよ
>Copy On Writeって関数引数に単純なstruct型を渡した時の値渡しには適用されないって認識であってる?
んなわけねーだろ
673デフォルトの名無しさん (ワッチョイ fbf3-W32U)
2017/05/25(木) 17:36:25.00ID:trjr6FJg0 あ、すまん、Advice:の節を注視して前の節を飛ばしてた
> When we copy values (the effect of assignment, initialization, and argument passing) the program will create a new copy of the value.
値渡しはコピーするってしっかり書いてあったわ
> When we copy values (the effect of assignment, initialization, and argument passing) the program will create a new copy of the value.
値渡しはコピーするってしっかり書いてあったわ
674デフォルトの名無しさん (ワッチョイ 9ff3-UHtP)
2017/05/25(木) 17:42:45.12ID:A2RaX9kE0 structは常にコピー
このstructはcopy on writeです、という場合も便宜上そう言ってるだけで、実際は中の参照型のストレージをcopy on writeしてるんであってstruct自体は常にコピー
ただしin-out引数だけは例外的にstructでも参照渡しになる場合がある
このstructはcopy on writeです、という場合も便宜上そう言ってるだけで、実際は中の参照型のストレージをcopy on writeしてるんであってstruct自体は常にコピー
ただしin-out引数だけは例外的にstructでも参照渡しになる場合がある
675デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 17:46:16.79ID:pDlob0Fd0 copy on writeだから、コビーの必要性が生じた時にコピーが発生するんだろ
structであっても参照するだけならコピーはしない(はず)
structであっても参照するだけならコピーはしない(はず)
676デフォルトの名無しさん (ワッチョイ fbf3-W32U)
2017/05/25(木) 17:59:30.69ID:trjr6FJg0677デフォルトの名無しさん (ワッチョイ fbf3-W32U)
2017/05/25(木) 18:01:40.91ID:trjr6FJg0 structの参照渡しのためのin-out parameter(inout)は使いたくないと思った
それするなら、最初からclassでAPIを設計しろというね
それするなら、最初からclassでAPIを設計しろというね
678デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 18:02:56.87ID:pDlob0Fd0 >>676
常にコピーなら、コピーオンライトとは呼べないな
常にコピーなら、コピーオンライトとは呼べないな
679デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 18:12:33.09ID:pDlob0Fd0 >>677
inoutを指定しなくないから、クラスにするって考え方がそもそもおかしい
inoutを指定しなくないから、クラスにするって考え方がそもそもおかしい
680デフォルトの名無しさん (スプッッ Sdbf-4cAo)
2017/05/25(木) 18:31:58.93ID:ud72tGp9d >>678
メモリ操作としてのコピーと、変数への代入時の複製を混同すると、そういう訳のわからない議論になるね
structはコピーオンライトと言っても、osやハードウェアのレイヤーになるとclassであっても必要に応じてコピー(と消去を組み合わせた移動)を行ってるんだけどね。
swiftのレイヤーでは、常にコピーされるって言って良いんじゃないかな
コピーの為に支払うコストがいつ払うことになるか、そもそも払う必要が生じるのか、っていう部分にコピーオンライトの概念が関係してくるだけなんだから
メモリ操作としてのコピーと、変数への代入時の複製を混同すると、そういう訳のわからない議論になるね
structはコピーオンライトと言っても、osやハードウェアのレイヤーになるとclassであっても必要に応じてコピー(と消去を組み合わせた移動)を行ってるんだけどね。
swiftのレイヤーでは、常にコピーされるって言って良いんじゃないかな
コピーの為に支払うコストがいつ払うことになるか、そもそも払う必要が生じるのか、っていう部分にコピーオンライトの概念が関係してくるだけなんだから
681デフォルトの名無しさん (ワッチョイ df6e-cMFO)
2017/05/25(木) 18:40:08.35ID:pDlob0Fd0 >>680
ごちゃごちゃした理論は言語設計者の領域の話で
プラグラマ視点でのコピーオンライトという文脈では書き換え時にコピー(コスト)が発生するという単純な理解で特に問題ないだろ
じゃないと、Structは常にコピーが発生するからデータの粒度をなるべく小さくして関数への引数渡しも注意しないととか余計な設計負荷を意識しないといけなくなる
ごちゃごちゃした理論は言語設計者の領域の話で
プラグラマ視点でのコピーオンライトという文脈では書き換え時にコピー(コスト)が発生するという単純な理解で特に問題ないだろ
じゃないと、Structは常にコピーが発生するからデータの粒度をなるべく小さくして関数への引数渡しも注意しないととか余計な設計負荷を意識しないといけなくなる
682デフォルトの名無しさん (ササクッテロリ Sp0f-W32U)
2017/05/25(木) 19:05:12.83ID:rwN5JfUNp structは値渡し、classは参照渡し、Array Structの中身はCOWで処理、プログラマはこれを意識して最適化しろ
と>>671のリンク先で言ってるわけだが?
プログラマのレイヤーで考えるべきことが提示されてるのに、なぜそれを見ようとしないのか
と>>671のリンク先で言ってるわけだが?
プログラマのレイヤーで考えるべきことが提示されてるのに、なぜそれを見ようとしないのか
683デフォルトの名無しさん (ワッチョイ 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は
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 ★3 [蚤の市★]
- 青森 緊急地震速報 [ぐれ★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★4 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★3 [冬月記者★]
- 【おこめ券】物価高対策の“おこめ券”全米販は1枚477円で販売へ 鈴木農水大臣「国民の皆様に活用いただきやすいよう工夫いただいた」 [ぐれ★]
- 【速報】衆院議員定数削減法案、自民・維新が今国会成立見送りで調整 [Hitzeschleier★]
- 高市早苗さん子供はすでに成人していると告白。 [271912485]
- 【速報】今年のゲームオブザイヤー、Clair Obscur: Expedition 33 [779938112]
- 地蔵 [268244553]
- 【悲報】ホテル「高市早苗のせいで12月の売り上げがゼロになった😢」 [616817505]
- 日本、高市が辞任しても日中関係を改善させられそうな首相候補がいなくて詰む [329271814]
- VIP版 今年の漢字
