[Fikir] Performans için C Tarzı Tasarım Kararları (Hız Önceliksiz Ama Bilinçli) #108

Open
opened 2026-06-14 22:26:30 +03:00 by saqut · 0 comments
Owner

Giriş (Nedir, Neden Önemli?)

ADR-015 "öncelik determinizm + incelenebilirlik, ham hız değil" diyor — bu doğru bir karar. Ama "hız öncelik değil" ile "gereksiz yere yavaş" aynı şey değildir. Bu issue, mimariyi karmaşıklaştırmadan (yeni soyutlama eklemeden) elde edilebilecek "bedava" performans kazanımlarını listeler — C'nin "ne kadar az iş, o kadar hızlı" felsefesinden ilham alarak.


Gelişme (Tavsiyeler)

  • Gereksiz kopyalama'dan kaçın: AST düğümleri ve Type/Symbol nesneleri std::string gibi alanlar taşıyor — bunlar fonksiyonlara referans/const& ile geçilmeli, değer ile değil. Bu, "header-only" (ADR-003) ile çatışmaz, sadece dikkatli imza yazımı gerektirir.
  • std::unique_ptr ile sahiplik (ownership) net olsun (#44'te bahsedilen issue tipi) — bellek sahipliği belirsizse hem bug hem performans kaybı (gereksiz shared_ptr/kopya) olur.
  • Tokenizer/Lexer tek geçişte (single-pass) çalışıyor mu — kaynak dosya birden fazla kez taranıyorsa (örn. önce tokenize, sonra tekrar karakter-karakter konum hesaplama), bu birleştirilebilir.
  • IR/VM tasarımında (ileride): yığın-tabanlı VM'de (#76) gereksiz push/pop zincirleri, basit "peephole" (göz ucu) optimizasyonlarla (örn. push X; pop → hiçbir şey) IR seviyesinde temizlenebilir — bu, Faz 4'ün constant folding'ine benzer ama IR'e özel, küçük bir ek pass olabilir.
  • Derleme zamanı (saqut binary'sinin kendi derlenme hızı): header-only + agresif template kullanımı derleme süresini şişirebilir — -Wall -Wextra yanında zaman zaman derleme süresi de (örn. time cmake --build) izlenmeli.

Açık Sorular

  • "Bedava" optimizasyonlar (kopya azaltma, peephole) ile "erken optimizasyon yapma" ilkesi (roadmap'teki "önce dikey dilim") arasındaki çizgi nerede? Önerim: mimariyi değiştirmeyen, sadece imza/kopya düzeltmeleri her zaman yapılabilir; yeni pass/altyapı gerektirenler (peephole gibi) Faz 4 sonrasına bırakılır.

İmza/Yorum: "C gibi hızlı olmak", saQut için "C kadar hızlı VM" anlamına gelmek zorunda değil — "gereksiz iş yapmayan, dikkatli yazılmış C++ kodu" anlamına gelebilir; bu, ADR-015 ile çatışmaz.

### Giriş (Nedir, Neden Önemli?) ADR-015 "öncelik determinizm + incelenebilirlik, ham hız değil" diyor — bu **doğru** bir karar. Ama "hız öncelik değil" ile "gereksiz yere yavaş" aynı şey değildir. Bu issue, **mimariyi karmaşıklaştırmadan** (yeni soyutlama eklemeden) elde edilebilecek "bedava" performans kazanımlarını listeler — C'nin "ne kadar az iş, o kadar hızlı" felsefesinden ilham alarak. --- ### Gelişme (Tavsiyeler) - **Gereksiz kopyalama'dan kaçın:** AST düğümleri ve `Type`/`Symbol` nesneleri `std::string` gibi alanlar taşıyor — bunlar fonksiyonlara **referans/`const&`** ile geçilmeli, değer ile değil. Bu, "header-only" (ADR-003) ile çatışmaz, sadece dikkatli imza yazımı gerektirir. - **`std::unique_ptr` ile sahiplik (ownership) net olsun** (#44'te bahsedilen issue tipi) — bellek sahipliği belirsizse hem bug hem performans kaybı (gereksiz `shared_ptr`/kopya) olur. - **Tokenizer/Lexer tek geçişte (single-pass) çalışıyor mu** — kaynak dosya birden fazla kez taranıyorsa (örn. önce tokenize, sonra tekrar karakter-karakter konum hesaplama), bu birleştirilebilir. - **IR/VM tasarımında (ileride):** yığın-tabanlı VM'de (#76) gereksiz push/pop zincirleri, basit "peephole" (göz ucu) optimizasyonlarla (örn. `push X; pop` → hiçbir şey) IR seviyesinde temizlenebilir — bu, Faz 4'ün constant folding'ine **benzer** ama IR'e özel, küçük bir ek pass olabilir. - **Derleme zamanı (`saqut` binary'sinin kendi derlenme hızı):** header-only + agresif template kullanımı derleme süresini şişirebilir — `-Wall -Wextra` yanında zaman zaman derleme süresi de (örn. `time cmake --build`) izlenmeli. --- ### Açık Sorular - "Bedava" optimizasyonlar (kopya azaltma, peephole) ile "erken optimizasyon yapma" ilkesi (roadmap'teki "önce dikey dilim") arasındaki çizgi nerede? Önerim: **mimariyi değiştirmeyen, sadece imza/kopya düzeltmeleri** her zaman yapılabilir; **yeni pass/altyapı gerektirenler** (peephole gibi) Faz 4 sonrasına bırakılır. *İmza/Yorum:* "C gibi hızlı olmak", saQut için "C kadar hızlı VM" anlamına gelmek zorunda değil — "gereksiz iş yapmayan, dikkatli yazılmış C++ kodu" anlamına gelebilir; bu, ADR-015 ile çatışmaz.
saqut added the
fikir
kalite-mimari
labels 2026-06-14 22:26:30 +03:00
Sign in to join this conversation.
No description provided.