[Fikir] Bytecode Formatı: Yığın-Tabanlı mı (Stack-based), Register-Tabanlı mı VM? #76
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#76
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 Ö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)
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").add r1, r2, r3). Daha az komut, ama derleyici tarafı (register allocation - kayıt tahsisi) daha karmaşık.Açık Sorular
İ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.
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).
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.