Cześć!
Pół roku temu (z małym hakiem) zacząłem pisać maszynę wirtualną. Nie potrafi jeszcze tyle co maszyna Javy czy interpreter Pythona, ale coś już można w niej napisać (jest gotowy wrapper na libnotify więc można np. wysłać sobie powiadomienie na pulpit, a na kod źródłowy składa się między innymi ponad 1500 linii kodu testów napisanych w języku assemblera maszyny).
Z okazji wydania wersji 0.5.0 uznałem, że zapostuję na liście i poproszę brać hakerską o peer review. Thank you from the mountain za czas i każdy komentarz!
Krótki przegląd podstawowej funkcjonalności:
* programy są pisane w jeżyku assemblera maszyny i kompilowane do bytecodu przed wykonaniem, * instrukcje w maszynie operują na rejestrach (w przeciwieństwie do Javy czy Pythona, które operują stosem operandów), * maszyna obsługuje mechanizm throw/catch (można rzucać obiekty dowolnego typu, nie tylko wyjątki), * dostępne typy danych to int, boolean, float, string i vector, * dostępne są instrukcje warunkowe "jump" i "branch" oraz funkcje,
Z bardziej zaawansowanych rzeczy, maszyna wspiera programowanie funkcyjne (w źródłach umieściłem moduł, który implementuje trzy główne funkcje: "map", "apply" i "filter", oraz również przydatną "invoke"). Da się też tworzyć funkcje zagnieżdżone. Jeśli ktoś lubi takie rzeczy to wie, że to fajna sprawa; a jak ktoś nie lubi to szkoda ;-) Przy błędach i niezłapanych wyjątkach CPU wyświetli ładny stack trace, z informacjami wystarczającymi do uruchomienia debuggera z breakpointem na odpowiedniej instrukcji. Zaimplementowałem wsparcie dla kompilacji rozłącznej, linkowania statycznego i dynamicznego, oraz linkowania modułów zewnętrzych napisanych w C++.
Nie istnieje jeszcze możliwość tworzenia własnych typów danych, ale można symulować je za pomocą wektorów (z tego co wiem, w podobny sposób działa Lua). Nad utworzeniem systemu typów właśnie pracuję.
Nie chcę pchać na listę zbyt dużego maila. Jeśli jednak ktoś będzie chciał dowiedzieć się więcej, z przyjemnością rozwinę temat. Zainteresowanych mogę pokierować do kodu: https://github.com/marekjm/wudoovm i dokumentu PDF z dokumentacją: http://docs.viuavm.org/viua_virtual_machine.pdf
Marek Marecki