ホーム > 読んだ >

C++言語のカラクリ
誕生の秘密と舞台裏

書誌

tagC++
authorえぴすてーめー
publisherソフトバンククリエイティブ
year2008
price2000+tax
isbn978-4-7973-4436-3

目次

1感想
2抄録

履歴

editor唯野
2011.6.12読了
2011.6.27公開
2012.1.17タグ追加

書名の通りであるが初期の C++ コンパイラの実装についてを説明するのが前半で、後は識者による座談会になっている。仮想関数テーブルの辺りなどは私も知っていたことだったので特別の目新しさはなかったが、初期のテンプレートを実装するマクロの話は初めて知っておもしろかった。

私は現在プログラミング言語として C++ と Perl を専ら使っているが、なぜ C++ なのかといえば、それは本書の中でも触れられている通り「C++ は網羅的にいろんなことができちゃう力強さがありますよね。C++ をベースにさえしておけば、という安心感かな。」(ひろえむ、p161)というところに結局は落ち着くのだと思う。C++ さえ分かっていれば Java でも C# でも困らない。なぜなら、これらの言語自体が C++ を使いやすくするということを経緯として生まれてきた部分があるからである。

いずれにせよ C++ 使いであれば読んで損はない一冊だと思う。

抄録

7

そこで、BjarneがC++コンパイラを作る際の前提に考えたのが、新しい言語を作って、それをC言語に変換するということでした。それさえできてしまえば、あとはそのマシン用のC言語のコンパイラとリンカに任せられます。

14-19

そのために Bjarne はまず以下のものを作った。

C による C++ のインタプリタ

C++ から C に変換するトランスレータ (cfront)

C++ のトランスレータに自分自身を入力として与える(自分自身を食わせる)

22

ではなぜ、はじめから C++ を C に変換する C プログラムを作らなかったのかというと、

-/-種を明かせば、「cfront が本当に正しいコードを生成するのかを検証したい」「これが本当にコンパイラとして動くかどうかを確認したい」という欲求、必要性を満たすためなのです。

24/25

要はここでのインプットとアウトプットが同じになればトランスレータの動作の正しいことが証明されるから。

等しければ大丈夫で、もし違うものが出てくれば、どこかにバグがあるはずなのです。それを確認するために、自分自身すなわち C++ で書くのです。-/-

自己記述することのもう1つのメリットは「自己拡張」です。つまり自分自身で言語拡張が行えます。-/-

33

「main」という名の関数を見つけたらトランスレータが user_main などと名前を変え、トランスレータがこっそり作成した main 関数のなかで user_main 関数を呼び出すようにすれば、cout のコンストラクト/デストラクトができるでしょう。

アプリケーションのエントリポイントの書き換えということ。

全文を読まれる場合はログインしてください


Up