学生3人とお客さん2人という感じでした
go lang は、昔、一回読んだことがあったんだけど、だいぶ変わっていて
LLVMはC++で、かなり読みづらかったですけど、今回のはだいぶ読みやすい
C++のclassは Template だとかデザインパターンがどうとかうるいさいからなぁ
golang は割と旧式のCっぽく書いた感じで書ける言語なんだよね。実際、
この go lang compiler は、ライブラリと一体になっているわけだけど
全部が、普通の K&R Cで書いてある感じ
もちろん、GCはあるわけなんだが... closure とかもあるんだけどね
compiler は cmd/compile の下にあり、cmd/compiler/internal の下にほとんどのものがある
コンパイル自体は
構文解析、型検査、SSA生成、SSAをCPUに特化して、コード生成
という手順。それぞれ、普通に関数が呼び出される感じ
dlvが currdirectory にファイルを書き込むのが少し困ったが、普通に dlv で break point で読めました
/opt/golang1/go/bin/go -- build -x -a -v -gcflags="all=-N -l" -s ~/src/hello/ex.go
こんな感じでやると、呼び出されているコマンドがわかるので、
dlv exec /opt/golang1/go/pkg/tool/linux_amd64/compile -- ~/src/hello/ex.go
とすればよい。
export GOSSAFUNC=main ; /opt/golang1/go/bin/go build -x ~/src/hello/ex.go
とすると、ssa の出力が HTMLで見れます
https://ie.u-ryukyu.ac.jp/~kono/etc/ssa.html
こいつが優れものだった。
No comments:
Post a Comment