[Fikir] Bytecode Formatı: Yığın-Tabanlı mı (Stack-based), Register-Tabanlı mı VM? #76

Closed
opened 2026-06-14 22:13:56 +03:00 by saqut · 2 comments
Owner

Giriş (Nedir, Neden Önemli?)

ADR-015 çalıştırma modelini kilitledi: IR + bytecode VM (yorumlayıcı döngü), gerçek makine-kodu JIT yok. Ama VM'in iç mimarisi henüz seçilmedi: yığın-tabanlı (stack-based, Python/JVM/Wasm tarzı) mi, register-tabanlı (Lua 5'in VM'i tarzı, sanal register'lar) mı?


Gelişme (Olası Yaklaşımlar)

  • Yığın-tabanlı: Komutlar değer push/pop eder (push a, push b, add). Üretmesi basit, IR'den bytecode'a çeviri kolay. Dezavantaj: gereksiz push/pop'lar (performans, ama saQut için öncelik değil — bkz. ADR-015 "determinizm/incelenebilirlik > hız").
  • Register-tabanlı: Her fonksiyonun sanal register'ları olur (add r1, r2, r3). Daha az komut, ama derleyici tarafı (register allocation - kayıt tahsisi) daha karmaşık.
  • saQut'un önceliği basitlik + incelenebilirlik olduğu için yığın-tabanlı VM ile başlamak "önce dikey dilim" ilkesine daha uygun olabilir; register-tabanlı'ya geçiş ileride bir "VM v2" issue'su olabilir.

Açık Sorular

  • Yığın-tabanlı seçilirse, fonksiyon çağrıları için ayrı bir "call stack" mı, tek bir birleşik yığın mı kullanılır?
  • Debug/inceleme modunda her adımdan sonra yığının tam içeriği dump edilebilir mi (alet çantası vaadiyle doğrudan ilişkili)?

İmza/Yorum: Bu karar IR komut setini (önceki issue) doğrudan etkiler — birlikte tartışılmalı. Önerim: v0 için yığın-tabanlı, basitliği ve incelenebilirliği önceliklendirdiği için.

### Giriş (Nedir, Neden Önemli?) ADR-015 çalıştırma modelini kilitledi: IR + bytecode VM (yorumlayıcı döngü), gerçek makine-kodu JIT yok. Ama VM'in *iç mimarisi* henüz seçilmedi: **yığın-tabanlı (stack-based, Python/JVM/Wasm tarzı)** mi, **register-tabanlı (Lua 5'in VM'i tarzı, sanal register'lar)** mı? --- ### Gelişme (Olası Yaklaşımlar) - **Yığın-tabanlı:** Komutlar değer push/pop eder (`push a`, `push b`, `add`). Üretmesi basit, IR'den bytecode'a çeviri kolay. Dezavantaj: gereksiz push/pop'lar (performans, ama saQut için öncelik değil — bkz. ADR-015 "determinizm/incelenebilirlik > hız"). - **Register-tabanlı:** Her fonksiyonun sanal register'ları olur (`add r1, r2, r3`). Daha az komut, ama derleyici tarafı (register allocation - kayıt tahsisi) daha karmaşık. - saQut'un önceliği **basitlik + incelenebilirlik** olduğu için yığın-tabanlı VM ile başlamak "önce dikey dilim" ilkesine daha uygun olabilir; register-tabanlı'ya geçiş ileride bir "VM v2" issue'su olabilir. --- ### Açık Sorular - Yığın-tabanlı seçilirse, fonksiyon çağrıları için ayrı bir "call stack" mı, tek bir birleşik yığın mı kullanılır? - Debug/inceleme modunda her adımdan sonra yığının tam içeriği dump edilebilir mi (alet çantası vaadiyle doğrudan ilişkili)? *İmza/Yorum:* Bu karar IR komut setini (önceki issue) doğrudan etkiler — birlikte tartışılmalı. Önerim: v0 için yığın-tabanlı, basitliği ve incelenebilirliği önceliklendirdiği için.
saqut added the
fikir
ir-vm
labels 2026-06-14 22:13:56 +03:00
Author
Owner

Stack-tabanlı VM uygulandı. Switch-case dispatch, call frame, özyinelemeli fibonacci çalışıyor. Karar: stack-tabanlı VM (v0 için yeterli, register-tabanlı geçiş ileride ayrı issue).

Stack-tabanlı VM uygulandı. Switch-case dispatch, call frame, özyinelemeli fibonacci çalışıyor. Karar: stack-tabanlı VM (v0 için yeterli, register-tabanlı geçiş ileride ayrı issue).
saqut closed this issue 2026-06-18 22:10:10 +03:00
Author
Owner

Düzeltme: önceki kapama yorumu hatalıydı. Uygulanan model stack-tabanlı değil, slot/register-tabanlıdır. Her instruction hedef ve kaynak slot numaralarını açıkça taşır (slots[dest] = slots[left] + slots[right]). PUSH/POP/operand stack yok. Lua 5 VM'i ile aynı kategori. Karar bu şekilde netleşti.

Düzeltme: önceki kapama yorumu hatalıydı. Uygulanan model **stack-tabanlı değil, slot/register-tabanlıdır**. Her instruction hedef ve kaynak slot numaralarını açıkça taşır (`slots[dest] = slots[left] + slots[right]`). PUSH/POP/operand stack yok. Lua 5 VM'i ile aynı kategori. Karar bu şekilde netleşti.
Sign in to join this conversation.
No description provided.