Faz 4 — Optimizasyon Altyapısı ve Kaynak Optimizasyonları (Optimization) #73
Labels
No Label
cli-ux
faz-plani
felsefe-gozden-gecir
ffi-builtin
fikir
gelecek-vizyon
ir-vm
kalite-mimari
moduller-import
test-senaryosu
tip-sistemi
tooling-lsp
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: saqut/saqut-compiler#73
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Giriş (Nedir, Neden Yapıyoruz?)
Bu iş paketinde derleyicinin ürettiği kodu daha verimli hale getiren Optimizasyon (Eniyileme) altyapısını ve ilk optimizasyon adımlarını (pass'leri) yazacağız.
Optimizasyon, yazılan kodun anlamını değiştirmeden daha hızlı çalışacak veya daha az yer kaplayacak şekilde dönüştürülmesidir.
saQut'un "alet çantası" felsefesi gereği, optimizasyon orijinal kaynak kod görüntüsünü bozmamalıdır. Bu nedenle optimizasyonlar AST'nin bir kopyası (klon) üzerinde gerçekleştirilir.
Gelişme (Neyi, Nerede ve Nasıl Yapacaksın?)
Aşağıdaki adımları sırasıyla gerçekleştir:
src/opt/dizinini oluştur. SoyutOptimizationPasssınıfını tanımla.OptimizationManagersınıfını yaz; bu sınıfCompilerConfigüzerinden aktif edilen pass'leri sırayla çalıştırsın.maxFixpointRounds) ekle.ASTNode::clone()metodunu tüm AST düğümleri için yaz. Kopyalanan düğümlerinparentpointer'larını yeni ağaca göre bağla. Klonlanan ağaçtaki Identifier (isim referansı) düğümlerinin sembol tablosu bağlarını, klonlanmış yeni bir sembol tablosuna yönlendir (Remapping).src/opt/constant_folding.hppdosyasını oluştur. İki sabit terimin işlemini derleme zamanında hesapla (Örn:1 + 2→3). Sıfıra bölme varsa katlama yapma,W002uyarısı ver.src/opt/dead_code_elim.hppdosyasını oluştur. Erişilemez deyimleri (örn.returnsonrası kodlar,if(false)gövdeleri) ve hiç kullanılmayan lokal değişkenleri (W001) sil.Geliştirme Dalı (Branch):
feature/faz4-optimizationSonuç ve Başarı Kriterleri
Bu işin bittiğini ve başarılı olduğunu şu kriterlerle doğrulayacağız:
saqut ast examples/fibonacci.sqt --optimizedkomutu çalıştırıldığında sabit ifadelerin katlandığı ve varsa ölü kodların silindiği doğrulanmalıdır.--optimizedbayrağı verilmeden çağrıldığında orijinal (optimize edilmemiş) AST çıktısı elde edilmelidir (Öncesi/Sonrası karşılaştırması).Mühendis Olmayanlar İçin Analiz: Yazdığınız programın gereksiz kısımlarını temizleyen akıllı temizlikçi aşamasıdır. Kodun boyutunu küçültür. Karmaşıklığı Yüksek, yapım süresi yaklaşık 4-5 gündür.
İmza/Yorum:
ASTNode::clone()implementasyonu bu fazın en kritik ve hata yapmaya açık kısmıdır, parent pointer bağlarına azami dikkat gösterilmelidir.🧭 Felsefe gözden geçirme — sıralama (içerik değil).
Bu issue'nun içeriği felsefeyle uyumlu: optimizasyon bir klon üzerinde çalışıp orijinali korur ve öncesi/sonrası karşılaştırması "cam" ilkesine birebir oturur. Sorun sıralama.
Bu, dolu bir çerçeve (OptimizationManager, fixpoint, config, clone+remap). Mevcut yol haritasında çalıştırma (IR güçlendirme + bytecode VM) Faz 4'ten sonra geliyor — yani bu çerçeve, hiçbir şey daha çalışmadan inşa edilmiş oluyor.
Kristalleşen felsefe (
readme.md→ "Tasarım felsefesi"):print), ağır çerçeveler sonra.Öneri: Faz 4'ü, minimal bir çalıştırma dilimi (VM ile fibonacci'yi gerçekten koşturmak) çalıştıktan sonraya ertele. O zaman optimizasyon hem daha anlamlı olur hem de öncesi/sonrası farkı çalıştırılarak doğrulanabilir.
Karar tamamen senin — bu yalnızca felsefeye göre bir işaret, "yanlış issue" demek değil.