これによって、第二世代パーサのパース時の動きを終えるようになった!これはかなりうれしい。 pic.twitter.com/kIPUz8UKBt
2019-04-22 21:22:48heap周りの挙動がかなり怪しかったので、heap領域を用途ごとに別々に用意したら、干渉が減ったためかうまく動くようになった。しばらくはこの設計でやってみよう。
2019-04-27 12:34:24GW前半の成果:第二世代パーサが徐々に動くようになってきて、ついに謎のアセンブリコードらしきものを吐くようになった。これが第三世代コンパイラの卵となるはず 🐣 pic.twitter.com/vwd78XzmPk
2019-05-02 21:00:39グローバル変数定義の値の中にポインタが登場するケース、自分では解決策が思い浮かばず、結局8ccのコードからロジックを拝借した。github.com/rui314/8cc/blo… これを移植したら動いたけど、ぼんやりとしか理解してない。アセンブラ/バイナリの深い理解が必要っぽい。
2019-05-03 23:40:58自分のオリジナル実装も発想としては近かった気がするんだけど、ネスト構造に対応できないのとか、ポインタが途中に登場するとバグるとか、挙動がダメダメだった...w github.com/DQNEO/minigo/c…
2019-05-03 23:46:18しかし、あの .data 0, data 1を駆使してグローバル変数の定義内に別の変数を埋め込むテクニック、自分では絶対思いつかないんだけど、ruiさんはどうやって考案したんだろう?? アセンブラの世界ではよく知られたテクニックだったりするのかな? github.com/rui314/8cc/blo…
2019-05-06 21:57:42ptr.field = slice がバグってたので直した。コードが汚いのであとできれいにする。github.com/DQNEO/minigo/c…
2019-05-07 13:59:25第二世代コンパイラが、最小のGoプログラムをコンパイルして実行するところまでできたーgithub.com/DQNEO/minigo/c…
2019-05-07 21:17:59とこで、ABIの引数 rdi, rsi, rdxの順番を3つだけちゃんと覚えたらアセンブリを書くスピードがあがった。こういう基礎力は意外と重要。
2019-05-07 23:47:54ついに第二世代コンパイラで hello worldを完全にコンパイルできるようになった 🎉 これはうれしい pic.twitter.com/KiRX9Xaqn3
2019-05-08 12:40:39map get/set まわりのややこしいバグを直した。これで、 v, ok := m[k] のような左辺第二変数が動くようになった 😂 github.com/DQNEO/minigo/c…
2019-05-08 22:28:31今日一日(振休で仕事休み)でめちゃくちゃ進捗して、第二世代コンパイラがいろいろなテストファイルをコンパイルできるようになった。github.com/DQNEO/minigo/c…
2019-05-08 23:38:23もう累計 9,000行も書いた。 参考にしてる 8ccが 7,865行なので、そろそろかな〜 pic.twitter.com/q3nrWTJKIF
2019-05-10 22:44:34パース後のフェーズめ、メソッドテーブルの構築に失敗していて、レシーバ型とメソッド一覧を管理しているmapのデータがゴミ値になってしまう…なんでや… 今日は行き詰まったので寝る
2019-05-12 01:25:44やっと原因わかった... mapのmapをget/setするところが根本的に未実装だった。(未実装と気づくまでが大変) そもそも、map/slice/interface変数をスタック24バイト割り当てる設計にしたのが根本的な間違いだった気がする。。。痛い経験だった
2019-05-12 22:39:18この最初の設計をミスってなければ、全体の工数1-2ヶ月くらい短縮できてたかもしれない.... まあGoコンパイラ作ったの初めてだからしょうがないか...
2019-05-12 23:04:13mapのmapが動くようになったー。これでパース後にメソッドテーブルが構築できるようになったー github.com/DQNEO/minigo/c…
2019-05-13 00:14:02