Saturday, 6 June 2020

LLVMの続き

去年からの懸案の clang 対応。Paeser 部分では CompoundStatement 、つまり、Cの {} が

  RAII を使うようになった

のが問題を引き起こしていて。RAII とは

  Resouece Allocation is Initialization

というもので、malloc/smart pointer を宣言で片付けようって奴。ARCもその仲間。Rust もそうかな。

関数の中で関数を定義するので環境切り替えが入るのだけど、そことRAIIの境界がずれて死ぬ感じ。余計にpopしてる感じ。

結果的には

  { RAII; ... }

というように {} で scope を追加してやると良いらしい。微妙な感じ。動けば正義か。

もう一つは tail call が出なくて死ぬいつものやつ。Parse時とcall生成時がずれるのでCallIsntのconsructorにcounterは挟んだ。

これで、生成時からParse時を追跡。でも、見つけてみたら、そこは普通の関数と同じ扱いをするべきところだった。はぁ?

で、hg blame してみると、5/30に、ばっちり自分で処理を削ってる。お前な〜 酔っ払いながらやってたろ〜

まぁ、protptypeがあわないとえげつないメッセージを出して死ぬっていうおまけはあるんですが、できたみたいです。

brewはcompileに1時間、bottleにするのに1時間40分。3GBあるみたい。LLVMのdebug binary でかすぎる。

No comments: