Goコンパイラをゼロから作って147日でセルフホストを達成するまで

進捗を毎日つぶやいてたのでまとめました
24
前へ 1 ・・ 11 12
DQNEO @DQNEO

型推論、メソッドテーブル構築後の内部データをダンプしたものが第1世代、第二世代で一致するとこまでできた

2019-05-13 19:46:10
DQNEO @DQNEO

第二世代コンパイラがアセンブリコードを出力しはじめた...! 夢にまで見た風景が...!! pic.twitter.com/elcUcbnNWs

2019-05-13 23:52:22
拡大
DQNEO @DQNEO

構造体フィールドのoffset計算が難しい〜 modとかが絡む数値計算苦手だ...

2019-05-15 00:57:51
DQNEO @DQNEO

あと、グローバル変数がポインタだったときのその値を他のグローバル変数のメンバに設定するのが難しい〜

2019-05-15 02:01:38
DQNEO @DQNEO

グローバルポインタ変数を使い回すのやめて、&strct みたいなのをcomposite literalに埋め込むようにしたらやっと動いた... アセンブラの知識が足りないのでつらい...

2019-05-15 02:12:16
DQNEO @DQNEO

一週間前から苦戦してた、関数呼び出し時にDyamic typeからinterface typeに変換する機能、ついに実装できたー 。複雑なロジックを分割して、一個ずつ丁寧に動作確認しながら進めたらうまく行った。

2019-05-15 22:38:28
DQNEO @DQNEO

第二世代コードジェネレータが最後まで完走した...! 信じられなくて目を疑ってしまった pic.twitter.com/OZovqrMkhb

2019-05-16 12:07:58
拡大
DQNEO @DQNEO

あと1-2週間くらいで完成しそうな予感..!!

2019-05-16 12:26:57
DQNEO @DQNEO

第1世代コンパイラが吐いた20万行のアセンブリコードと、第2世代コンパイラが吐いた20万行のアセンブリコードの差分を見ながらちまちまバグ修正してる。 差分が2万行くらいある...w

2019-05-16 23:32:09
DQNEO @DQNEO

予想どおりmapのiterationが順序不定なのが原因だったので、ちまちまソート処理を入れて回避。

2019-05-17 00:08:18
DQNEO @DQNEO

アセンブリの差分が1万行までに減った。

2019-05-17 00:12:51
DQNEO @DQNEO

ほぼ完成した気がするんだけど、CircleCIで動かすとセグフォする... gccのバージョンが古いからかも ?

2019-05-17 02:00:51
DQNEO @DQNEO

やはりそうだった。CircleCIで自作Docker Imageを使うようにしたら解決した。

2019-05-17 02:54:22
DQNEO @DQNEO

完全に真っ白に燃え尽きた

2019-05-17 17:56:02
DQNEO @DQNEO

Goコンパイラをゼロから作って147日でセルフホストを達成しました🎉 qiita.com/DQNEO/items/2e…

2019-05-20 16:44:54
DQNEO @DQNEO

レポジトリはこれです。 I wrote a Go compile from scratch. It can compile itself. github.com/DQNEO/minigo

2019-05-20 17:58:23
DQNEO @DQNEO

検索してみたけど類似事例は見つからなかったので、手書きGoコンパイラでセルフホストはもしかしたら世界初かもしれない。 (もちろんオリジナルGoコンパイラをのぞく)

2019-05-20 19:01:57
前へ 1 ・・ 11 12