Go Conference Sprint 2022 にて発表したLTです。
https://gocon.jp/2022spring/ja/sessions/lt7/
Go の runtime は plan9 ベースのアセンブリでの実装があったり、他ではあまり見かけない compiler directive を使用していたり、 初見だと builtin 関数の名称がわからなかったり、前知識なしにコードが追いづらいです。
そこでこれらの解説や go tool objdump で builtin 関数を追う手法を紹介し、 runtime パッケージを読むための前提知識をまとめます。
以下資料内URL
p4
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/builtin/builtin.go;l=135-156
p8
- https://go.dev/play/p/gTlrfNa1v0l
p9
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/runtime/alg.go;l=46-47
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/runtime/asm_amd64.s;l=1077-1087
p11
- https://pkg.go.dev/cmd/compile#hdr-Compiler_Directives
p13
-
https://go.dev/play/p/0PpO7GicM2X
p14
- https://go.dev/play/p/tdVVRLwt3O6
p15
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/runtime/atomic_pointer.go;l=42-43
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/sync/atomic/doc.go;l=140-141
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/sync/atomic/asm.s;l=84-85
p17
- https://convto.hatenablog.com/entry/2022/04/02/222353
p19
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/cmd/compile/internal/typecheck/const.go;l=538-540
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/cmd/compile/internal/typecheck/const.go;l=864-939
p20
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/cmd/compile/internal/walk/expr.go;l=265-267
- https://cs.opensource.google/go/go/+/refs/tags/go1.18:src/cmd/compile/internal/walk/builtin.go;l=118-124