2010-02-16 16 views

Odpowiedz

18

Po pierwsze, Beam jest maszyną rejestrującą, a nie maszyną stosu. Podobnie jak WAM dla Prologu, używa on "rejestrów X", które są normalnymi rejestrami (zaimplementowanymi jako tablica w C), oraz "rejestrami Y", które są nazwami dla gniazd w rekordzie aktywacji funkcji lokalnych ("ramka wywołania") na stosie. Nie ma instrukcji manipulowania stosem.

Po drugie, istnieją instrukcje dotyczące szybkiego przydzielania kilku dodatkowych słów pamięci sterty, do inicjowania krotek i innych struktur danych na stercie, do wybierania elementów krotek itp. JVM koncentruje się na obiektach i ma "nowe" "operacja, która ukrywa szczegóły przydzielania pamięci i podstawowej inicjalizacji.

BEAM zawiera instrukcję zmniejszania "licznika redukcji" dla procesu i decydowania, czy nadszedł czas na wykonanie, aby pozwolić na uruchomienie innego procesu. JVM z kolei ma instrukcje synchronizacji dla wątków.

Jedną ważną różnicą jest to, że BEAM ma instrukcje ogona, których brakuje JVM.

Wreszcie, zarówno dla BEAM, jak i JVM, zestaw instrukcji używany w plikach obiektowych jest w rzeczywistości tylko formatem transportowym. Emulator BEAM przepisuje instrukcje z pliku na wewnętrzną wersję z wieloma zoptymalizowanymi instrukcjami specjalnymi (które mogą zmieniać się z jednej wersji na drugą). Alternatywnie możesz skompilować do natywnego kodu. Większość maszyn JVM robi to samo.

Powiązane problemy