[Fikir] VM Yorumlayıcı Döngüsü ve Dispatch Stratejisi #77
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#77
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?)
Bytecode VM'in kalbi, her komutu okuyup ilgili işlemi yapan "yorumlayıcı döngü" (interpreter loop / dispatch loop). Bu döngünün nasıl yazılacağı hem performansı hem de kod okunabilirliğini etkiler.
Gelişme (Olası Yaklaşımlar)
switch(opcode) { case ADD: ...; case JUMP: ...; }. En basit, en okunabilir, derleyici bağımsız (portable). saQut'un "incelenebilir" felsefesiyle en uyumlu başlangıç noktası.&&label), taşınabilirlik düşer. Hız öncelik değilse (ADR-015) v0'da gereksiz karmaşıklık.printzaten bu yola hazırlanıyor).Açık Sorular
run()fonksiyonu mu olacak, yoksa her opcode için ayrıhandle_*fonksiyonu mu (okunabilirlik vs. fonksiyon çağrı maliyeti — ama maliyet öncelik değil)?İmza/Yorum: "Önce dikey dilim" ilkesi burada da geçerli: en basit switch-case ile fibonacci çalışsın, optimize dispatch ileri bir konu.
Switch-case dispatch seçildi ve uygulandı. Her opcode için ayrı dal, trace modu ileride eklenebilir. Fibonacci çalışıyor.
Düzeltme: önceki yorum hatalıydı. Dispatch switch-case doğru, ama VM mimarisi stack-tabanlı değil slot/register-tabanlıdır (bkz. #76 düzeltmesi).