Sunday, 8 December 2024

Go lang 読み会

学生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: