クリプキクローネ日記帳

ある種の音楽と数学とランニングはミニマルなところが似ていると思う。

ハロー "Hello,World" OSと標準ライブラリのシゴトとしくみ [坂井弘亮(著)] (秀和システム)

まさにHello Worldの本でした。
Hello Worldの7行のソースコードを徹底的に解析するというなかなかにぶっ飛んだ本でした。


アセンブラとOSや標準ライブラリのソースコードをじっくり読んで、
ユーザーがC言語で書いたプログラムの裏で実際には何が動いているのかもっと掘り下げましょう、
という本でした。
そのとっかかりとして、Hello Worldのソースコードが使われるわけですが、
とっかかりだけではなく最後まで徹底的にこの7行のソースコードに的を絞って書かれているところがかっこいいです。
本のタイトルに忠実でした。

Hello Worldがプログラミングの第一歩と言いつつprintfなどという得体の知れないライブラリを使わせるのは
ちょっと気持ち悪いなと常々感じていたので、この本のモチベーションは共感する人も多いと思います。

ABI(Application Binary Interface)という言葉を知りました。
レジスタやスタックをどう使ってOSのシステムコールを呼び出すかという、
アーキテクチャとOSに依存する仕様とのこと。
APIが共通ならソースコードをそのまま移植してコンパイルできる、という考え方に対し、
ABIが共通ならコンパイルしなおさなくても機械語のバイナリをそのまま移植して実行できる、ということらしい。
ですが、現在ではABIの共通化よりもJava仮想マシンや.Net Framework上で
中間言語のバイナリを移植する、という発想の方が主流なんだと思います。

main関数は如何にして呼ばれるか、も気になっていたのでそのあたりのモヤモヤ感も少し解消できてよかったです。
ELFフォーマット中のエントリポイントにはmain()を呼んでいる標準ライブラリ関数のアドレスが入っていて、
それをOS側が読み込んで呼び出すそうです。
やっぱりいきなりmain()じゃないよね、という納得感。

コンパイラによる最適化の話は対象ソースコードが短すぎてあっさりだったけど、絶対におもしろい分野ですよね。
レジスタに0を代入するためにXOR演算を使うと機械語コードを削減できる、とか、楽しい。
最適化の章ですらHello Worldのソースコードで乗り切るところにこの本のコンセプトの徹底を感じました。
むしろコンセプトがブレてでも別のソースコードでじっくり解説を読みたい部分ではある。

可変長引数関数のva_list型、va_start文、va_end文の使い方は何も知らなかったので勉強になりました。

というわけで、闇のヴェールに包まれていたいくつかの部分を掘り下げることができて楽しかったです。
ですが、ここまでいくと、printf()の結果が出力されるところをディスプレイのドライバのソースコードや
ドライバICの仕組みまで通して最後まで見たくなってしまいます。
もはやキリがないのでただの気持ちの問題ですが。
組み込みでLEDのON/OFFくらいであれば、
アセンブラのコードとCPUの基本的な構造を読めば実際に光るところまでざっくり追いかけられそうですが、
printf()はディスプレイのところが巨大な壁になっていてとてもたどり着けそうありません。
ですが、そこを追いかけたいという気持ちだけは持っていたいです。

C#あたりになるともはや.Net Frameworkが巨人すぎて中身を気にし出すとキリがない感もありますが、
それでも気持ち的には気にしていたいですね。
  1. 2017/03/15(水) 23:49:01|
  2. | トラックバック:0
  3. | コメント:0
<<自然と社会を貫く数学 [ 岡本和夫(編著)] (放送大学出版協会) | ホーム | VHDL触ってみた。>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://myumbrella.blog42.fc2.com/tb.php/355-386d3e38
この記事にトラックバックする(FC2ブログユーザー)