日曜日の話ですね。
* AST(Abstract Syntax Tree)の生成部分
を追っていったら、Builderに貯めていくのは良いんだけど、
* new 自作
ですか。まぁ、そうだよな。ASTは基本的に回収しないし。ある程度、大規模なソフトだとメモリ管理系自作は普通か。
次は、IR(LLVM中間コード)の生成部分。土曜日は読み飛ばしていたらしく。こっちは、
* template な 自作 double linked list
まあ、そうだよね。これもglibとか使わずに自作するのが普通ですかね。それなりにくせがあるライブラリなようだけど。でも自分でもかなりくせのあるのを作ったことがあるので、誰しもやってしまうところか。
今回は pointer tag で苦しむことはありませんでした。どうも smart pointer で統一されたみたいですね。その代わり、
* まず、dynamic_cast する
という手順らしいです。実際には何もしないはずんだけどねぇ。まぁ、
* ASTという何でもはいる箱を用意して、
* そこに何かがあるかを決め打ちしてから処理
というわけだからなぁ。dynamic_castでチェックするしかない。いや、まぁ、
* 型整合至上主義
な人が見たら、卒倒しそうなコードではあるかな。
Haskellだと、かなり初期にSystem FCに落としてしまうので、構文木の型ははっきり決まるわけですけど、
* C++の場当たり的なセマンティクス
だと仕方がないところか。今見ているものが、構造体なのかクラスなのかtemplateなのか構文からはわからない。template中だと、そもそも決まらない。そういう状況ですからね。
学生からは assert が多いなんていう指摘も。そうならざるを得ないよね。いや、入っているだけましだろという説も。
IRからの最適化、機械語生成は、かなり大量にある pass のどれかだとは思うのですが、見つけられませんでした。前は見たはずなんだけどな。
* pseudo code を一旦吐いて、それを再度変換
とかやっていたり、変換系を用意するだけの pass があったりとかで見つけられませんでした。
* 今日のところは、これくらいで勘弁しておいてやる
というところですかね。omit-frame-pointer あたりを調べたいので、また、後で,その辺はみることになるでしょう。
土曜日に作った tar ball は、あっとんが別に brew package にしてくれたらしい。でも、8GBではまともに trace できない説も。
http://www.cr.ie.u-ryukyu.ac.jp/~game/pukiwiki/index.php?LLVM
ちょっと疲れ果ててたところもあって、帰ったら、いきなり爆睡でした。
さぁ,今週も頑張ろう。
No comments:
Post a Comment