プログラミング言語Swift Part4 [無断転載禁止]©2ch.net

1名称未設定 転載ダメ©2ch.net(8級) (ワッチョイ 33a8-bj6g)2017/01/19(木) 03:18:15.58ID:YIGkvQUZ0

147名称未設定 (ワッチョイW d587-Ht0t)2018/01/24(水) 03:55:36.56ID:93wJNeG50
結局型を意識しなきゃコードは書けないと思う。初めてのプログラミング言語がSwiftだった人達が型を意識しないでいいだとかその他の理由でもいいけど、Swiftを分かりやすいと感じているかどうかが気になる。

148名称未設定 (ワッチョイ 75c5-ur/e)2018/01/24(水) 06:13:02.40ID:i7+Qpdc30
型ってそんなにわかりにくいかねえ。$には文字列が入って%には整数が入るとか、
当時小学生だった自分にもわかりやすかったけどね。%と!と#の違いはともかく、$はぜんぜん違うものが入るからなぁ。

149名称未設定 (ワッチョイ 2587-1pyd)2018/01/24(水) 07:42:30.06ID:wE3p1EOU0
>>145
作れるよ
最終的なバイナリ生成のためXcodeをリモート接続経由で使うからどのみちmacは必要だけど

KotlinでのViewController
https://github.com/multi-os-engine/moe-samples-kotlin/blob/moe-master/KotlinRssReader/ios/src/main/kotlin/org/moe/kotlinrssreader/SimpleTableController.kt

150名称未設定 (ワッチョイ 83d5-iVQh)2018/01/24(水) 09:07:50.03ID:EvvwHl3Y0
昔のBASICも型を意識させないようにしてたろ
方法は違うけど

151名称未設定 (ワッチョイ 83d5-iVQh)2018/01/24(水) 09:20:13.18ID:EvvwHl3Y0
>>149
なんかめんどくさそう

152名称未設定 (ドコグロ MM13-ffdp)2018/01/24(水) 09:58:12.37ID:nmNCI5eWM
Swiftはコーディングにあまり不満はないが、Buildにクソ長くて開発がままならん。
早くコンパイラーを何とかせい

153名称未設定 (ワッチョイ 2587-j+7R)2018/01/24(水) 10:12:47.55ID:wE3p1EOU0
>>151
クロスプラットフォームは多かれ少なかれ面倒なところはあるさ

154名称未設定 (ワッチョイW d587-Ht0t)2018/01/24(水) 11:23:25.39ID:93wJNeG50
>>152
推論させないで明示的に型を書けば早くなるでしょたぶん

155名称未設定 (ワッチョイ 2587-j+7R)2018/01/24(水) 13:19:08.05ID:wE3p1EOU0
Swiftの型推論は初動から風呂敷を広げ過ぎた
双方向推論は含めるべきではなかった
右辺値からの推論のみにしておけば型推論に関するビルド時間はここまで掛からなかったはず

156名称未設定 (ワッチョイ 2587-j+7R)2018/01/24(水) 14:17:14.93ID:wE3p1EOU0
let a = b( c() ) { d in e(d) }.f().g()

単方向(右辺値から)だと
・c()の戻り値型c_typeを導出
・b(c_type, func_type)の候補が一つになることをチェック
・func_typeからdを導出
・e(d)戻り値型を導出してfunc_typeと型チェック
・b(..)の戻り値型からb_type.f()を導出
・同様にfの戻り値型からg, gからaが決定

双方向だと e(*)の候補一覧からb(c_type, e_type*).f()が成立するものまで探し始める
bの引数の型が決まってない段階で
その絞り込みのためにf、さらにはgまで先読みして推論し始める
時間が掛かるだけでなくオーバーロードやエクステンションが絡んで
Ambiguousエラー出したり
LazySequence.map(..) -> LazyMapSequence<..> でなく
Sequence.map(..) -> [T] の方に間違って確定したりする

157名称未設定 (ワッチョイ 2587-j+7R)2018/01/24(水) 14:18:00.81ID:wE3p1EOU0
Swift3で推論に問題あったケースが、知っている範囲ではSwift4で正常になったので
かなり改善されているようだけどビルド時間はさらに犠牲になってそう

コーディングの利便性のために双方向の推論に対応した結果
ビルド時間が掛かり過ぎて型を明示するようになる本末転倒

158名称未設定 (ワッチョイ 83d5-iVQh)2018/01/24(水) 16:08:47.94ID:EvvwHl3Y0
コンパイル時間が長くなっても、それを補えるぐらいコーディング時間が短縮されるなら、結果オーライだろ

159名称未設定 (ドコグロ MM13-ffdp)2018/01/24(水) 17:16:22.21ID:7/sgEGqMM
>>154
基本昔からほぼ全てにきちんと型定義しているが
ビルドに20〜30分も掛かる。。。
ちょっとコーディングしてビルドすると、
またそのぐらい。。。
ビルド中に編集するとカラーボールがクルクルし出すし。
コーディングする暇がなくてめちゃ困る。

筐体が死にかけていてそうなら、喜んで買い換えるが。
これもAppleの罠ではないかとかと疑心暗鬼

ちなみにMBA2013 4GBね

160名称未設定 (ワッチョイ 2587-j+7R)2018/01/24(水) 17:52:02.29ID:wE3p1EOU0
全ての変数定義に型を明示しても
メソッドチェーンや引数に直接ラムダを記述しているなら型推論は発生している

1ステートメント内に暗黙の型有り
let a:Int = b( c() ) { d:Int in e(d) }.f().g()

極端だけどここまでしないと型推論は多少なりとも発生する
let lm:(Int)->Int = { (d:Int) in e(d) }
let retC:Int = c()
let retB:B = b(retC, lm)
let retF:F = retB.f()
let a:Int = retF.g()

実際にはそのビルドの20分とやらの大半は
一部のボトルネックになってるコードのせいという可能性も高いし
闇雲にステートメントを細分化する必要は無いけど

161名称未設定 (ワッチョイ 2587-j+7R)2018/01/24(水) 18:05:03.27ID:wE3p1EOU0
>>159
Pro買えば早くなるだろうけど
その前にビルド時間のボトルネックがあるか探すためにこの辺読んでみるのを勧める
https://medium.com/@johnsundell/improving-swift-compile-times-ee1d52fb9bd

-warn-long-expression-type-checking オプションとかもある

162名称未設定 (ワッチョイ 83d5-iVQh)2018/01/24(水) 19:25:22.66ID:EvvwHl3Y0
今時メモリ4GBて
開発には厳しいだろ

163名称未設定 (ワッチョイ db00-TSwL)2018/01/24(水) 19:35:45.83ID:BJVKiilC0
今年2018年だというのに5年前の4GのMBA使って遅いって言われてもなぁ

164名称未設定 (ワッチョイW 3aef-aM+/)2018/01/25(木) 00:00:04.29ID:TElUKl9b0
>>148
ダートマスBASIC自体が学生にFORTRANでプログラム教えてたら
INT,DOUBLE,LONGとかの変数の種類の定義と概念で引っかかって
プログラミングの中心概念にサクッと進めないので
わざわざ数値型と文字型の二種類に変数型を固定した言語を作ったんやで。
「FOR-NEXT-STEPでSTEP0.5でも正しい回数回るようにとか苦労しましたw」と
作者がインタビューで答えててびっくりした。本当に高級言語だったんだと。
小学校のリコーダーが超高級木管楽器のプラスチックコピーだと知った時ぐらいの衝撃だったw

165名称未設定 (ワッチョイ 173e-qxTs)2018/01/25(木) 02:50:48.88ID:YC2I+R1V0
ビルド時間はSwift 2/Xcode 8に比べりゃだいぶ早くなったと思うけどね
まあそれでもObjCだけのプロジェクトに比べりゃはるかに長いけど

166名称未設定 (ワッチョイW cac8-YK+C)2018/01/25(木) 07:46:57.08ID:twpUMFOG0
>>161
ありがとう。
ボトルネックになってる箇所を探してみようと思う。
素直にMBPに買い換えるべきかな。

167名称未設定 (ワッチョイ ead5-4xH4)2018/01/25(木) 09:33:15.86ID:qgJud4om0
iMac Proにしろよ
サクサクだぞ
知らんけど

168名称未設定 (PH 0Hbf-Qclr)2018/01/25(木) 15:42:31.84ID:1BO/OOZKH
「型」って言うほど重要なのか?
そもそもその出発点がおかしいんだろうな

169名称未設定 (ワッチョイ ead5-4xH4)2018/01/25(木) 15:54:46.78ID:qgJud4om0
重要だろ
整数は大きさで処理速度に影響するし、浮動小数点数はまた専用のプロセッサがある
型のちょっとした違いでアラインメントの影響とかでメモリを占める領域も違ってくるし、ひいては実行ファィルの大きさにも影響してくる
型を意識しないプログラマは半人前ですらない

170名称未設定 (ワッチョイ 964e-hlIM)2018/01/25(木) 20:11:04.15ID:td4l/5UZ0
型を重要と思わないプログラマって、適当にネタ選びやってる寿司職人みたいなもん

171名称未設定 (ワッチョイW cac8-YK+C)2018/01/26(金) 01:06:18.96ID:Qb9z6dfC0
>>167
個人開発だから購入する勇気が出ない。。。

>>169
同意!
swiftは型推論が売りだろうけど、後々のメンテナンス性だとか、デバッグを考えると型付しておかないと後々の収拾付かなくなるね。

早くこの問題はAppleさんに解決してもらいたい。

172名称未設定 (ワッチョイ 7e2c-Qclr)2018/01/26(金) 01:22:31.74ID:VCAcFJbo0
>>169
多分それ30年前の知識のまま固執してなぁい?
mem. 1MB とか 1MHz 動作とかw

Int型に文字列突っ込んだら例外飛ばしてくるとか旧石器時代の話でしょ?

173名称未設定 (ワッチョイ ead5-4xH4)2018/01/26(金) 02:16:55.90ID:+0bXYr4i0
int型に文字列突っ込んでも問題ない言語とかあるのか?

174名称未設定 (スッップ Sdda-UEho)2018/01/26(金) 18:41:54.53ID:BO2m7KnDd
>>171
型を明示することでかえって可読性や保守性が悪くなる場合に省略できるようにするのが、型推論のメリットなんじゃないの?
一番読みやすく保守しやすいコードが、型推論のビルド時間の短縮の為に、読みにくく保守しにくいコードに変えなければならないなら、失敗しているということだろう

175名称未設定 (スッップ Sdda-UEho)2018/01/26(金) 18:42:48.69ID:BO2m7KnDd
>>173
c言語?

176名称未設定 (ワッチョイ ead5-4xH4)2018/01/26(金) 19:18:44.42ID:+0bXYr4i0
>>175
C言語でも無理

177名称未設定 (ワッチョイ 4fe5-r6Nt)2018/01/26(金) 22:33:33.37ID:oeZJ5E9h0
>>176
int hoge = 'abcd';

まぁ文字列とは違うけど

178名称未設定 (ワッチョイ ead5-4xH4)2018/01/26(金) 23:27:45.91ID:+0bXYr4i0
文字列ではないな
ASCIIで表現した4バイトの数値

179名称未設定 (ワッチョイW 1384-p3ow)2018/01/26(金) 23:45:36.96ID:zWdYehWS0
>>174
型推論によってBuildが遅くなるのは確かに思想と逆行していることは理解できる。
ただ型を明示することで可読性や保守性を損なっているという感覚が理解できない。
プログラミング入門者だったらまあ納得できるが

180名称未設定 (ワッチョイ ba67-1QpA)2018/01/27(土) 07:37:02.97ID:wFui7sYU0
PH 0Hbf-Qclr がアホなだけ

181名称未設定 (ワッチョイW b3e0-UEho)2018/01/28(日) 10:13:22.57ID:KHlmF17Y0
>>176
int a = (int)"abcdefg";
printf((char *)a);

ってのはどう?
似たようなことして「問題なく」動いている古いプログラムもありそうだけど。

182名称未設定 (ワッチョイW b3e0-UEho)2018/01/28(日) 10:28:48.38ID:KHlmF17Y0
>>179
>>160の極端な例って可読性や保守性が悪くなってない?
型推論が、人間であれば文脈から自明である型を省略可能にすることで可読性や保守性を上げようとすることならば、
理想的ならば省略可能な型の記載をコンパイラの制限で記載しなければならないなら可読性や保守性を下げてることにならないか?

183名称未設定 (ワッチョイ ead5-4xH4)2018/01/28(日) 11:04:06.36ID:JZSRSRqa0
>>181
あるわけねーだろ

184名称未設定 (ワッチョイ 7ea7-Qclr)2018/01/28(日) 11:21:35.61ID:f+MMvkKZ0
$test = 'abc';
$test++;
print $test; -> abd

perlくそワロタ

185名称未設定 (ワッチョイ ead5-4xH4)2018/01/28(日) 11:50:16.24ID:JZSRSRqa0
>>184
それと似たようなことは大概の言語でできるだろ

186名称未設定 (ラクッペ MM3b-V+yQ)2018/01/28(日) 12:32:40.71ID:Ybff/SkvM
文字もインクリできるんですかw

187名称未設定 (ワッチョイ ead5-4xH4)2018/01/28(日) 12:50:25.70ID:JZSRSRqa0
文字がコードとして表現され大小関係もあるから、当然インクリもデクリもできる

188名称未設定 (ワッチョイ 964e-hlIM)2018/01/28(日) 13:27:37.36ID:3Z44HFBQ0
そろそろスレチな話題やめろや

189名称未設定 (ワッチョイWW 967f-9ggK)2018/01/28(日) 18:17:00.06ID:wgrAfPT20
バージョンコードだけ書き直してアーカイブし直したら全ファイル再コンパイルの憂き目に遭うの何とかならないの
Swift/Objective-C問わず、というかxibとかも再コンパイルされるんでスレチかもしれんが…

190名称未設定 (アタマイタイー 773e-tQKf)2018/02/02(金) 20:24:10.75ID:O6tjxpUV00202
RxSwift嫌い!

191名称未設定 (ワッチョイ e59e-jA6l)2018/02/09(金) 01:04:25.01ID:DJQSVNnB0
☆ 私たち日本人の、日本国憲法を改正しましょう。現在、
衆議員と参議院の両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

192名称未設定 (ワッチョイW 62cf-7Au1)2018/02/09(金) 02:01:27.03ID:ajBJpNxT0
改悪

193名称未設定 (ワッチョイWW 19d1-Ys2M)2018/03/31(土) 14:50:11.53ID:SttHU6qh0
プログラミングはじめたばかりの初心者ですけど質問してもいいですか?

194名称未設定 (JP 0Hf5-W6PE)2018/03/31(土) 15:39:18.55ID:ayaYH3fwH
ダメです。

195名称未設定 (ワッチョイW 8387-BoQL)2018/04/21(土) 23:08:46.86ID:hmy7d/9T0
やっぱC言語だろ!

196名称未設定 (ワッチョイ 76ec-oVyF)2018/05/19(土) 18:45:58.85ID:QsBE/P180
Objective-Cでいいよなぶっちゃけ

197名称未設定 (ワッチョイ f73e-xDuP)2018/07/24(火) 17:11:03.07ID:UTfu/0Uk0
fileprivate lazy var data: MyData = {
  return $0
}(MyData())

( ゚д゚ )

新着レスの表示
レスを投稿する