Lập trình Go 22/09/2026 10 phút

Closure trong Go biểu diễn thật thế nào: khi nào miễn phí, khi nào tốn 2 cấp phát

Một func value là con trỏ tới {con trỏ mã, các biến bắt}. Đo thật: closure dùng tại chỗ 0 cấp phát dù bắt biến, nhưng bắt biến rồi trả ra tốn 24 B và 2 cấp phát; gọi qua con trỏ hàm ~2x gọi trực tiếp. Đọc assembly thanh ghi ngữ cảnh. Go 1.23.

Lập trình Go 22/09/2026 9 phút

Bounds check elimination trong Go: đo thật và vì sao chiêu reslice có thể phản tác dụng

Mỗi truy cập slice phải kiểm biên để an toàn bộ nhớ; compiler xoá check khi chứng minh được chỉ số hợp lệ. Đo thật: vòng range và i<len(xs) đã 0 check sẵn, nhưng check biên hiện đại rất rẻ (~0,05 ns) — và chiêu reslice để gợi ý BCE ở đây còn chậm hơn. Go 1.23.

Lập trình Go 22/09/2026 10 phút

Devirtualization trong Go: khi lời gọi interface biến thành một phép cộng

Nếu compiler chứng minh được kiểu động sau interface lúc biên dịch, nó thay dispatch động bằng lời gọi trực tiếp rồi inline luôn. Đo thật: một lời gọi interface co xuống còn một lệnh ADD (không itab, không CALL), nhanh hơn dispatch động ~3,8 lần. Điều kiện để nó xảy ra. Go 1.23.

Lập trình Go 22/09/2026 10 phút

SSA trong compiler Go: xem tận mắt 50 pha biến hàm của bạn thành 3 lệnh

SSA là biểu diễn trung gian nơi mọi tối ưu compiler diễn ra. Đo thật với GOSSAFUNC: một hàm 2 phép cộng, 1 phép nhân và nhánh chết đi qua 50 pha (regalloc và lower đắt nhất) rồi co xuống còn 3 lệnh — CSE gộp biểu thức trùng, DCE xoá nhánh chết, strength reduction đổi nhân thành dịch bit. Go 1.23.