Özet - Compiler
- Go kursu
- Uzman
- Ders 18/34
- 4 dk
SSA, escape ve inline'ı birleştirerek bir derleme analizi yazarsın.
Derleyici özeti
Kaynak → tür denetimi → IR (kaçış analizi + inlining) → SSA (sabit katlama, ölü kod, BCE) → makine kodu → bağlama. İnceleme araçların: -gcflags=-m (kaçış ve inlining), -gcflags=-S (assembly), GOSSAFUNC (SSA aşamaları), -d=ssa/check_bce (sınır denetimleri). Yönergelerle (//go:build, //go:embed, //go:noinline) derleyiciye talimat verirsin.
Okunurluk önce gelir
Derleyici bilgisi, profil gösterdiği sıcak noktalarda kullanılmalıdır. Kodun her yerine BCE ipucu ve noinline eklemek okunurluğu düşürür ve sonraki Go sürümlerinde gereksiz hâle gelebilir; derleyici her sürümde daha akıllı hâle gelir. Kural: ölç, sıcak noktayı bul, değişikliği benchmark ile doğrula.
Uygulama Yığında kalan tampon
Sabit boyutlu dizi kullanarak ayırmasız bir fonksiyon yaz: hex(b byte) string içinde var buf [2]byte doldur ve string(buf[:]) döndür. hex(255) sonucunu yazdır (çıktı ff).
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
const rakam = "0123456789abcdef"
func hex(b byte) string {
var buf [2]byte
buf[0] = rakam[b>>4]
buf[1] = rakam[b&0x0f]
return string(buf[:])
}
func main() {
fmt.Println(hex(255))
}Beklenen çıktı
ff
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sıcak bir fonksiyon her çağrıda heap ayırıyorsa ilk hangi çıktıya bakarsın?
- go mod tidy
- gofmt -d
- go build -gcflags=-m Doğru cevap
- go vet
Açıklama: -m çıktısı hangi değişkenin neden heap'e kaçtığını satır numarasıyla söyler.
2 SSA görselleştirme
____=topla go build .
GOSSAFUNC=topla go build .
Açıklama: GOSSAFUNC verilen fonksiyonun tüm SSA aşamalarını ssa.html dosyasına çizer.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
Kaçış analizi |
Yığın mı heap mi? |
Inlining |
Çağrıyı gövdeyle değiştir |
SSA |
Optimizasyon biçimi |
//go:build |
Koşullu derleme |