func main() { a, b := 10, 20 res := add(a, b) println(res) } func add(a, b int) int { return a + b } package main func main() { // a, b := 10, 20 // res := a + b res := 30 //インライン展開 +定数畳み込み println(res) } func add(a, b int) int { return a + b }
0x451e31 cc INT $0x3 :0 0x451e32 cc INT $0x3 :0 0x451e33 cc INT $0x3 :0 0x451e34 cc INT $0x3 :0 0x451e35 cc INT $0x3 :0 0x451e36 cc INT $0x3 :0 0x451e37 cc INT $0x3 :0 0x451e38 cc INT $0x3 :0 0x451e39 cc INT $0x3 :0 0x451e3a cc INT $0x3 :0 0x451e3b cc INT $0x3 :0 0x451e3c cc INT $0x3 :0 0x451e3d cc INT $0x3 :0 0x451e3e cc INT $0x3 :0 0x451e3f cc INT $0x3 main.goからHelloの呼び出しがなくなっている
関数に含まれる expressions (式?)が40個未満 ✓ 関数呼び出し・ループ・クロージャー・panic・recover・select・switch といった複雑なものを含ま ない Only short and simple functions are inlined. To be inlined a function must contain less than ~40 expressions and does not contain complex things like function calls, loops, labels, closures, panic's, recover's, select's, switch'es, etc expressionsの解釈がわからず…