CプログラマとJavaプログラマとの間に隔たりを感じる。
こんばんは、上位レイヤよりも下位レイヤの開発が好きなケイタソです。これも元ベーシストの性(Sa・Ga)か……
さて、ここ2ヶ月間ほどでiPhoneアプリの開発をやっており、そのプログラミング言語はObjective-Cなのですが、一緒にやっているJavaプログラマとは相容れないものをここ最近感じています。
理由はひとつ。
資源の無駄遣いをするからです。
PCも近年は往年のサーバ機以上の性能を持っており、リソースは潤沢になっています。マシンパワーを無駄遣いしても十分ついてこれます。
しかし、iPhoneではそういうわけにはいかない。
iPhone 3G(S)のCPUはARM系の412MHz(600MHz)、RAMは128MB(256MB)。
そして電源はバッテリー、ネットワークは携帯電話網。
それでいて特にユーザビリティが求められる。
こんなキツイ制限だらけの非力なデバイスに、GC(Garbage Collection)や、外部ライブラリを利用しての正規表現をやらせようというのだから驚きです。
メモリ管理の自動化はリファレンスカウンタ、ちょっとした文字列置換はCの関数strcspn等を工夫して利用することで、負荷やプログラムのサイズを必要最小限に抑えることが可能であるにもかかわらず。
彼らは往々にしてJavaとXMLで何でもやろうとするわけですが、プログラムを組む際「Java VM上で動きさえすればいい」とでも思っているのでしょうか。
最終的にそのJava VMを動かしているのは、紛れも無くハードウェアなのですが。
確かに、Objective-CはJavaやRubyのプログラマには比較的わかりやすい言語だと思います。
しかし、こいつの本当の武器はCが使えること。もしもオブジェクト指向であることに真価を見いだすなら、敢えてこんなSmalltalkとCのキマイラのような変態言語を使う必要はありません。
そして、Cが高速である理由は、他の言語に比べて、マシンが余計な処理をする必要がないから。
プログラムの高速性は、デバイスが非力であるほど顕著に現れてきます。
繰り返しになりますが、iPhoneはハードウェアのリソースに制約があり、かつ快適さ・軽快さが求められるわけです。
そのようなデバイスである以上、僕はリソースの無駄遣いはせず、必要最小限の負荷で目的が達成できるようなプログラムの実装を心がけるべきだと思っています。