Maszyna wirtualna Viua
Transkrypt
Maszyna wirtualna Viua
Maszyna wirtualna Viua P.I.W.O. IX Poznań, 2015-10-10 Marek Marecki, Posbit.pl Dlaczego? Architektura Rejestry Obiekty RAII Architektura Rejestry: globalne statyczne lokalne Architektura Funkcje Domknięcia (closures) Architektura Wyjątki Mechanizm “rzuć-złap” Bloki Architektura System (proto)typów Dziedziczenie Linearyzacja hierarchii Asembler .function: main print (strstore 1 “Hello World!”) izero 0 end .end Asembler .function: foo print (arg 1 0) end .end .function: main strstore 1 “Hello World!” frame ^[(param 0 1)] izero 0 end .end Asembler Instrukcje i ich budowa Asembler Zagnieżdżanie instrukcji print (move 1 (istore 2 42)) Asembler Zliczanie instrukcji istore 1 [(strstore 2 “Hello World!”)] Asembler Odwrócenie kierunku rozszerzania frame ^[(param 0 1) (param 1 2)] Asembler funkcje bloki jednostki translacji Rozszerzenia maszyny (C++) Funkcje Klasy Biblioteki Funkcje C++ // sygnatura funkcji obcej (w C++) typedef void (FFunction)(Frame*, RegisterSet*, RegisterSet*); // struktura opisująca funkcję obcą struct ExternalFunctionSpec { const char* name; FFunction* fpointer; }; // informacje o eksportowanych funkcjach obcych const ExternalFunctionSpec* exports(); Klasy C++ // sygnatura metody obcej (w C++) typedef void (Type::*FMethod) (Frame*, RegisterSet*, RegisterSet*); // klasa mogąca być bezpośrednio używana class Foo: public Type { public: virtual void foo(...); }; Przyszłość Wątki Biblioteka standardowa “VM hot-swapping” Viua, a inne języki interpretowane Rozłączna kompilacja Rozsyłanie statyczne lub dynamiczne Viua, a inne języki interpretowane Rozszerzenia w C++ Viua, a inne języki interpretowane Debugger Deasemblacja Pytania?