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はそういう言語で、だから言語処理系に入門したんだね、俺。なるほどー。

日付
タイトル