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?