Entry

本当は簡単な C 言語の話

2009年01月24日

今日知り合いと話していて,やっぱり一番簡単な言語は C なんでねいか,みたいな話になっていたのでメモ。あたしも大体そうなんでねいかなあ,とは思います。

「分かりやすい」というのは,初心者向きとかいった意味ではなくて,制御構造がシンプルで分かりやすい,ということです。どんな言語でもそうなんすけど,特定のプログラミング言語を使い込んでいると,ある命令がどうやってハードウェアに伝えられれて,当該結果を得ることができるのか,といったことに少なからず首を突っ込むことになります。

例えば C で言うと,ちょっと上の知り合いなんかは,「昔は C コンパイラが吐く機械語を読んで,コンパイラのバグを直したもんじゃて」(←演出です。そんなに歳食ってない。)みたいなことを言っている。これは C だけの話ではなくて,少し首を突っ込むと,Java であれ Ruby であれ,大抵同じようなことをやると思うんですね。Java VM はちゃんとメモリ管理してるんだろうか,とか,Ruby のプロセス管理は信頼できるのか,とか調べるために。

で,C の場合,他の言語と比べると,この解析がやりやすいんじゃないかと思ったりします。CPU や OS に届くパスがすこぶる短い,と。この点,Java なんかだと,CPU や OS に命令が届く前に,VM を通さなくちゃいけない。つまるところ,間に挟まっているレイヤーについての理解がないと,いくら CPU や OS のことを知っていても,なかなかプログラミング言語との結びつきをつかむことができないっつことです。もちろん,C であっても,生成される中間ファイルのフォーマットやロードの仕組みを知らないといけないんですけどね。それでも,VM を理解するよりはよっぽど楽。シンプルだと思うわけです。

この話が出たのは,「プログラミングするときに何を意識してるか」みたいな話があったからだったのでした。その知り合いは「メモリにデータが積まれる様子」とか言っていた。関数の呼び出しにしても,なんだか得体の知れない機能を呼び出す,といったイメージではなくて,あくまでもスタックに呼び先のアドレスを積むこと,とか,割り込みかけて OS にお願い,とかいったイメージなんだそうな。あたしもそういうところはある。

彼の VS の画面を見ていると,デバッグモードの画面右端には,メモリウィンドウ(アドレスを入力すると周辺のデータが見える)があって,左上にコールスタックのウィンドウ,右下にレジスタウィンドウがある(下図参照)。あたしも真似してそうしているんですけれど,C/C++ では,実際に CPU 挙動が分かるところまで,簡単に降りていくことができます。

VC 動作中の図

Java だと,ここまで詳しく調べるにはものすごく手間がかかるし,物理的なハードウェアの挙動を知る前に,VM の挙動を知るのが先決だったりします。何か問題が起きた時,珍しい人には Java の命令でも物理的な「機械」の部分まで探る人もいるんですけれど,なかなかそこまでやる人はいなかったりします。「相性が云々」とか云々。

これは個人の嗜好の側面が大きいとは思うんですけれど,個人的には,自分の命令が具体的な機械の挙動までちゃんと伝わっているか見られる方が安心できるもんで,それができない言語はむしろ「使い勝手が悪い」とかいった評価になっちゃったりしています。

ま,だからなんなんだっつったら,別にただそれだけの話なんですけどね。C は一番簡単。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN