2021/01/11
プログラミング言語その5【Swift】

仕事でちょろちょろっと読み書きする機会が無くはなかったけど、ちゃんと勉強したのは4系に入ってから。Appleが用意してる『The Swift Programming Language』を読んだ。(正確にはそのうちの「WELCOME TO SWIFT」と「LANGUAGE GUIDE」で、「LANGUAGE REFERENCE」は形式的な話がほとんどで難しそうだったからスルーした。)夜、寝る前に、というか入眠までこれを読む生活を数か月、たぶんそれを2回ぐらいやっていて、すごく幸せな日々だった記憶がある。Webにもあるけど、iBooks(今は名前違うんだっけ?)で読んでた。https://swift.org/documentation/#the-swift-programming-languageによると、Swift5.3用のepubが https://docs.swift.org/swift-book/TheSwiftProgrammingLanguageSwift53.epub にあるらしいから、他のバージョンも同じように取得できそう。と思ったけど、適当な数字入れても404になるね……。古い版への一覧を見つけたことあった気がするけど、まあいいや。

Appleの他のドキュメントと(はちょっと位置づけは違うんだろうけど)同様に質が良くて、ちょっと気になったのは、

  • CあるいはObjective-Cの知識を前提しないと厳しそうな部分があった
  • 文字列のところでUnicodeの難しさとメモリ管理の難しさがダイレクトアタックしてくる
  • 初期化のところがやけに詳細に踏み込んでいて難しい

今思うと、これってSwiftという言語の本質的に難しい部分だから仕方ないかもね。GUIプログラミングだけならKotlinとかとだいたい同じ感覚で書けるんだけど、システムプログラミングとかそういうところまでカバーしなきゃいけないはずだから、そういう問題領域の難しさが言語仕様にも現れてくる、みたいな。

そういう低レイヤーと、逆方向(?)の型理論の難しいところが、良くも悪くもSwiftでは地続きになっている。それが楽しい。自分の場合、Opaque Result Typeのおかげで「コンパイル時のことよく分かってないな」と思うようになって、https://www.rightpoint.com/rplabs/switch-method-dispatch-tableみたいなMethod Dispatchの話を経由して、Objective-C Runtimeのことが気になってソース見てアセンブリに衝突して、なんやかんやあってCコンパイラを作った、という流れがあった。

地続きというか、まるっと言語処理系ってことか。処理系を意識させてしまう言語が良いか悪いかはともかく、Swiftはそういう言語で、だから言語処理系に入門したんだね、俺。なるほどー。

日付
タイトル

2026/03/14
読んだ本〜2026冬
2026/03/05
聴いてるポッドキャスト
2026/01/30
レンダリング?
2026/01/27
Live
2026/01/26
レンダリング!
2026/01/13
2025年まとめ
2025/09/23
読んだ本〜2025夏
2024/07/24
健康er
2024/02/10
健康
2023/05/19
喪/2
2023/04/24
コンサル
2023/02/01
それはそう
2022/12/17
2022/06/11
動かないもの
2022/06/05
スタイル
2022/04/23
JSX as data
2022/04/08
数学
2021/12/18
Activeな話
2021/09/05
Goのmultiple ABI
2021/07/31
『Goならわかるシステムプログラミング』
2021/07/28
ここにはタイトルが入ります
2021/01/25
これは日記ではない
2021/01/24
修行
2021/01/23
Considered Harmful
2021/01/22
雑感オブSwing
2021/01/21
雑感オブAndroid
2021/01/20
雑感オブiOS
2021/01/19
プログラミング言語その9【Groovy】
2021/01/18
1回休み
2021/01/17
会社を作る
2021/01/16
外国語
2021/01/15
プログラミング言語その8【C】
2021/01/14
プログラミング言語その7【OCaml】
2021/01/13
to be continued
2021/01/12
プログラミング言語その6【Kotlin】
2021/01/11
プログラミング言語その5【Swift】
2021/01/10
プログラミング言語その4【TypeScript】
2021/01/09
プログラミング言語その3【JavaScript】
2021/01/08
Comme d'habitude
2021/01/07
プログラミング言語その2【Java】
2021/01/06
プログラミング以前【Lisp】
2021/01/05
プログラミング言語その1【Objective-C】
2021/01/04
言語処理系入門
2021/01/03
ブログのようなもの
2021/01/02
Next.jsとPHPと私
2021/01/01
新年