SSA
- Go kursu
- Uzman
- Ders 14/34
- 4 dk
Static Single Assignment ara temsilini öğrenirsin.
SSA
SSA (Static Single Assignment), her değişkenin yalnızca bir kez atandığı ara gösterimdir. x = 1; x = x + 2 kodu x1 = 1; x2 = x1 + 2 olur. Bu biçim derleyicinin şu optimizasyonları kolayca yapmasını sağlar:
- Sabit katlama:
2 * 3→6 - Ölü kod silme: hiç kullanılmayan hesaplar atılır
- Sınır denetimi silme (BCE): kanıtlanabilen dilim erişimlerinde kontrol kaldırılır
BCE ipucu
Döngüden önce en büyük dizine bir kez erişmek, derleyiciye sonraki erişimlerin güvenli olduğunu kanıtlatır:
func topla4(b []byte) int {
_ = b[3] // tek kontrol burada
return int(b[0]) + int(b[1]) + int(b[2]) + int(b[3])
}go build -gcflags="-d=ssa/check_bce" kalan sınır denetimlerini satır satır gösterir. GOSSAFUNC=topla4 go build ise her SSA aşamasını HTML olarak çizer.
Uygulama BCE dostu fonksiyon
oku32(b []byte) uint32 yaz: önce _ = b[3], sonra dört baytı küçük uçlu (little-endian) birleştir: uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24. oku32([]byte{1, 0, 0, 0}) sonucunu yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func oku32(b []byte) uint32 {
_ = b[3]
return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
}
func main() {
fmt.Println(oku32([]byte{1, 0, 0, 0}))
}Beklenen çıktı
1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sınır denetimi silme (BCE) neyi kaldırır?
- Kullanılmayan importları
- Yorum satırlarını
- Güvenli olduğu kanıtlanan dizin erişimlerindeki panic kontrolünü Doğru cevap
- Tüm hata kontrollerini
Açıklama: Her s[i] erişimi normalde i < len(s) kontrolü içerir; derleyici bunun her zaman doğru olduğunu kanıtlarsa kontrolü siler.
2 Sınır ipucu
func f(b []byte) byte {
_ = b[____]
return b[0] ^ b[1] ^ b[2] ^ b[7]
}
func f(b []byte) byte {
_ = b[7]
return b[0] ^ b[1] ^ b[2] ^ b[7]
}
Açıklama: En büyük kullanılan dizine (7) erişmek, diğer dizinlerin de güvenli olduğunu kanıtlar.
3 Optimizasyon
| Kavram | Anlamı |
|---|---|
Sabit katlama |
2*3 → 6 |
Ölü kod silme |
Kullanılmayan hesap atılır |
BCE |
Dizin kontrolü silinir |
GOSSAFUNC |
SSA aşamalarını gösterir |