[Fikir] IR Komut Seti Tasarımı (Üç-Adresli Kod / Three-Address Code) #74

Closed
opened 2026-06-14 22:13:55 +03:00 by saqut · 1 comment
Owner

Giriş (Nedir, Neden Önemli?)

Faz 0-4 bitince AST (Abstract Syntax Tree, Soyut Sözdizimi Ağacı) tip ve sembol bilgisiyle dolu olacak. Ama AST hâlâ "ağaç" — VM'in (Bytecode VM, Bayt Kodu Sanal Makinesi) çalıştırabileceği düz bir komut listesi değil. Bu issue, AST'den üretilecek IR'in (Immediate Representation, Ara Temsil) komut setini tartışır.


Gelişme (Olası Yaklaşımlar)

  • Üç-adresli kod (three-address code): t1 = a + b, t2 = t1 * c gibi her komut en fazla bir işlem yapar. Okunabilirlik (alet çantası felsefesiyle uyumlu — saqut ir ile basılabilir) ile uygulama kolaylığı arasında iyi bir denge.
  • Minimal opcode ailesi: aritmetik (add/sub/mul/div), karşılaştırma, atama (store/load), kontrol akışı (jump/jump_if_false/label), fonksiyon (call/return), dizi/struct erişimi (get_field/set_field/get_index/set_index).
  • Her IR komutu kaynak SourceLocation'ı taşımalı — hata mesajları ve "öncesi/sonrası" karşılaştırması için (alet çantası amacı).
  • examples/fibonacci.sqt için elle IR çıktısı yazılıp hedef format netleştirilebilir (taslak doküman olarak).

Açık Sorular

  • Üç-adresli kod mu, yoksa stack-tabanlı (yığın tabanlı) bir ara form mu daha basit olur? (VM tasarımıyla bağlantılı, bkz. ilgili issue)
  • Struct/array gibi değer-semantikli (value semantics) tipler IR seviyesinde nasıl temsil edilir — kopyalama ne zaman gerçek bir IR komutu olur?
  • Optimizasyon (Faz 4) pass'leri AST üzerinde mi kalır, yoksa IR seviyesine de mi taşınır?

İmza/Yorum: Bu issue, "IR güçlendirme" yol haritasının (roadmap-frontend.md sonu) ilk taslağıdır. Faz 0-4 bitmeden kilitli karar alınmamalı — sadece beyin fırtınası.

### Giriş (Nedir, Neden Önemli?) Faz 0-4 bitince AST (Abstract Syntax Tree, Soyut Sözdizimi Ağacı) tip ve sembol bilgisiyle dolu olacak. Ama AST hâlâ "ağaç" — VM'in (Bytecode VM, Bayt Kodu Sanal Makinesi) çalıştırabileceği düz bir komut listesi değil. Bu issue, AST'den üretilecek **IR'in (Immediate Representation, Ara Temsil)** komut setini tartışır. --- ### Gelişme (Olası Yaklaşımlar) - **Üç-adresli kod (three-address code):** `t1 = a + b`, `t2 = t1 * c` gibi her komut en fazla bir işlem yapar. Okunabilirlik (alet çantası felsefesiyle uyumlu — `saqut ir` ile basılabilir) ile uygulama kolaylığı arasında iyi bir denge. - Minimal opcode ailesi: aritmetik (`add/sub/mul/div`), karşılaştırma, atama (`store/load`), kontrol akışı (`jump/jump_if_false/label`), fonksiyon (`call/return`), dizi/struct erişimi (`get_field/set_field/get_index/set_index`). - Her IR komutu kaynak `SourceLocation`'ı taşımalı — hata mesajları ve "öncesi/sonrası" karşılaştırması için (alet çantası amacı). - `examples/fibonacci.sqt` için elle IR çıktısı yazılıp hedef format netleştirilebilir (taslak doküman olarak). --- ### Açık Sorular - Üç-adresli kod mu, yoksa stack-tabanlı (yığın tabanlı) bir ara form mu daha basit olur? (VM tasarımıyla bağlantılı, bkz. ilgili issue) - Struct/array gibi değer-semantikli (value semantics) tipler IR seviyesinde nasıl temsil edilir — kopyalama ne zaman gerçek bir IR komutu olur? - Optimizasyon (Faz 4) pass'leri AST üzerinde mi kalır, yoksa IR seviyesine de mi taşınır? *İmza/Yorum:* Bu issue, "IR güçlendirme" yol haritasının (roadmap-frontend.md sonu) ilk taslağıdır. Faz 0-4 bitmeden kilitli karar alınmamalı — sadece beyin fırtınası.
saqut added the
fikir
ir-vm
labels 2026-06-14 22:13:55 +03:00
Author
Owner

Kararlar uygulamada netleşti: üç-adresli IR + stack-tabanlı VM seçildi. saqut ir ile IR dump çalışıyor, saqut run fibonacci'yi çalıştırıyor. Açık sorular yanıtlandı.

Kararlar uygulamada netleşti: üç-adresli IR + stack-tabanlı VM seçildi. `saqut ir` ile IR dump çalışıyor, `saqut run` fibonacci'yi çalıştırıyor. Açık sorular yanıtlandı.
saqut closed this issue 2026-06-18 22:10:08 +03:00
Sign in to join this conversation.
No description provided.