Jako tło dla projektu pobocznego czytałem o różnych projektach maszyn wirtualnych, przy czym JVM oczywiście uzyskała największą prasę. Spojrzałem również na BEAM (Erlang), GTS RTS (rodzaj ale nie całkiem VM) i niektóre implementacje JavaScript. Python ma również interpreter kodu bajtowego, o którym wiem, że istnieje, ale nie czytał o nim zbyt wiele.Dopasowanie projektu maszyny wirtualnej do jej podstawowego języka programowania
To, czego nie znalazłem, jest dobrym wytłumaczeniem dla , dla której dokonano wyboru konkretnej maszyny wirtualnej dla określonego języka. Szczególnie interesują mnie wybory projektowe pasujące do współbieżnych i/lub bardzo dynamicznych języków (Ruby, JavaScript, Lisp).
Edit: W odpowiedzi na komentarz z prośbą o swoistości tutaj jest przykładem. JVM używa maszyny stosu, a nie maszyny rejestrującej, co było bardzo kontrowersyjne po pierwszym wprowadzeniu Javy. Okazało się, że inżynierowie, którzy zaprojektowali maszynę JVM, dokonali tak zamierzonej przenośności platformy, a przekształcenie maszyny stosowej z powrotem w maszynę rejestrującą było łatwiejsze i bardziej wydajne niż pokonanie niedopasowania impedancji, w którym było zbyt wiele lub zbyt mało rejestrów wirtualnych.
Oto kolejny przykład: dla Haskella papier, który warto obejrzeć, to: Implementing lazy functional languages on stock hardware: the Spineless Tagless G-machine. To bardzo różni się od każdego innego VM, o którym wiem. I faktycznie GHC (premierowa implementacja Haskella) nie działa na żywo, ale służy jako pośredni krok w kompilacji. Peyton-Jones wymienia nie mniej niż 8 innych maszyn wirtualnych, które nie działały. Chciałbym zrozumieć, dlaczego niektóre maszyny wirtualne odnoszą sukces tam, gdzie inne zawodzą.
To nieco zbyt szeroki temat. Czy możesz podać niektóre szczególne aspekty projektu, który najbardziej Cię interesuje? Lub dowolne inne przykłady. +1 ode mnie w każdym razie, ponieważ mogłoby to prowadzić do ciekawych odpowiedzi. – Jivings
Dalvik JVM wykorzystuje architekturę opartą na rejestrach - http://pl.wikipedia.org/wiki/Dalvik_(software) – SpacedMonkey
Powinieneś zajrzeć do dokumentacji Parrot http://www.parrot.org/, która została pierwotnie zaprojektowana dla Perl, ale od tego czasu był używany w kilku innych językach. Dokumentacja mówi o funkcjach VM dla dynamicznie pisanych języków a bardziej statycznych języków takich jak Java. – Gene