2013-07-29 11 views
7

Czytałem kod źródłowy Lua i zaskakująco odkryłem, że zostało zaimplementowane do generowania nieparzystych instrukcji (np. GETUPVAL, FORLOOP, itd.). Następnie te kody operacyjne są wykonywane przez maszynę wirtualną. Czy są na to jakieś korzyści (w porównaniu z czystym interpreterem opartym na protokole AST?)Dlaczego Lua jest zaprojektowany do generowania kodów pośrednich?

Dzięki.

Odpowiedz

9

Używanie maszyn wirtualnych jest starą techniką implementacji języków, sięgającą co najmniej USCD Pascal, BCPL i Smalltalk. Większość języków skryptowych używa teraz maszyny wirtualnej. Niektórzy używają maszyny wirtualnej ogólnego przeznaczenia. Lua używa specjalnej maszyny wirtualnej, która odzwierciedla semantykę języka. Stąd wyspecjalizowane kody opcyjne. Lua wprowadziła nowość w tej dziedzinie, przenosząc wersję 5.0 do wirtualnej maszyny opartej na rejestrze, zamiast tradycyjnej opartej na stosie.

+0

Bardzo pomocna. Dzięki :) – babel92

10

Ogólne porównanie interpreterów kodu bajtowego i interpretatorów drzewa abstrakcyjnej składni można znaleźć na stronie Wikipedia:Interpreter.

Lua używa maszyny wirtualnej od urodzenia i wprowadziła wirtualną maszynę opartą na rejestrze w Lua 5.0 (która jest pierwszą wirtualną maszyną opartą na rejestrze, która ma szerokie zastosowanie). The Evolution of Lua, napisana przez autorów Lua, zapewnia mnóstwo zasobów na ten temat.

Innym papieru napisany przez autorów Lua, The Implementation of Lua 5.0 zapewnia wiele szczegółów dotyczących wykonania, rozdział 7 Maszyna wirtualna byłoby szczególnie pomocne dla Ciebie, dokument ten jest również doskonałym odniesienie do czytania kodu źródłowego Lua.

+0

Wielkie dzięki! Te dokumenty są całkiem przydatne. – babel92

Powiązane problemy