2021/01/05
プログラミング言語その1【Objective-C】

書いたことある順に、プログラミング言語のことを。

実質的に初めてのプログラミングはObjective-Cでの仕事。「暇だったら勉強しといて」って言われたから本を読んで、翌月ぐらいから新規iOSアプリの開発に参加した。macは持ってなかったから書くのは仕事だけ。本は仕事始めてからはずっと読んでたと思う。「今日初めてswitchを書いたよ」みたいにキャッキャしてた。仕事としてはプログラミングよりXcodeのInterface BuilderとAuto Layoutのほうが難しそうだけど、そこはあんまり苦労した記憶が無い。最初の一歩か三歩をプロに教わってるのと、これはゼロから作るほうが簡単なジャンルなのと、UIパーツ組み合わせパターンが複数ある(IBだけで実現したくない)世界だったからかな。複雑なデータとUIをどう抽象化するか、みたいなところが難しかった。まあその抽象化に成功はしてないけど、課題自体が難しかったから仕方ない。言語およびランタイムとしては、Objective-C 2.0だし、ARCだし、そういう意味では変な苦労はしていない。古めかしいプロジェクトのメンテをしたことはあるけど、そういうものはだいたい別の種類の苦労が待っていた。新規でMRCプロジェクトを書くことになったら厳しかっただろうね。

Objective-Cは当時も今も割と好きな言語で、特に最初は『詳解 Objective-C 2.0』の影響が大きい。ここ最近だと2019年にSwiftの違いとかを調べてて改めてObjective-Cランタイムに興味をもって、古い本(『Dynamic Objective-C』)を読んでたらCレベルの話が出てきたり、ソースを読もうとしてたらアセンブリに遭遇したり、そうやって低レイヤーのほうへ進んでいってCコンパイラを書いた、というのが昨年まで。道草を食わなければ『エキスパートObjective-Cプログラミング -iOS/OS Xのメモリ管理とマルチスレッド-』を読んでたはずなんだけど、積んだまま。今年は読もうね。

プライベートはそんな感じでも、仕事ではしばらくObjective-Cを書いてなかった。やっぱりここ数年はSwiftがほとんど。ところがReact Nativeをやることになって久しぶりに再会。Native Module部分もSwiftで書けなくはないはずだけど、JSとのブリッジに使われてるのは結局はObjective-Cランタイムの機能っぽいし、使いたいライブラリがObjective-Cだったのもあって、素直にObjective-Cで書いた。言語は相変わらず好きだとして、標準ライブラリでつらくなった。なんでArrayにmapが生えてないの?とか、そういうやつ。特に最近のJSと往復してると、進化を止めた言語という雰囲気がある。そんなん自分でいくらでもメソッド生やせばいいやんけ、という言語なのかもしれない。3rd Partyのライブラリが自分で宣言してる型を無視した値を返してくるというワイルドな状況にも遭遇したのだけど、なんかそういうのは「まあ直せばいいんじゃない?」ぐらいの気持ちになっていて、これは大人になるということなんでしょうか。ちなみにReact Native自体のソースを覗いてみるのも楽しくて、でもすぐにC++が出てきて逃げ出した。C++を読めると世界は広がりそうだけどねぇ。

「書いたことある順」って日本語として成立してるのかな……。

日付
タイトル