Kilka dni temu pojawiła się wiadomość, że projekt Jitter oficjalnie stał się projektem pod skrzydłem Projektu GNU i jest obecnie rozwijany pod nazwą GNU Jitter przy użyciu infrastruktury GNU i zgodnie z wymaganiami projektu.
Dla tych, którzy nie znają Jittera, powinniście wiedzieć, że jesta to implementacja pozwalająca na generowanie przenośnych i bardzo szybkich maszyn wirtualnych dla dowolnych projektów języków programowania, których wydajność wykonywania kodu znacznie wyprzedza interpretery i jest zbliżona do natywnego kodu skompilowanego.
Jitter jest wysoce przenośny, a poprawna maszyna wirtualna będzie wykazywać dokładnie to samo zachowanie na każdej platformie, która ma tylko kompilator i standardową bibliotekę C; jednak wydajność będzie lepsza przy użyciu jednej z obsługiwanych architektur (obecnie: M68k, MIPS, PowerPC, RISC-V, SPARC, x86_64; 64. poziom: Aarch390, Alpha, ARM, SXNUMXx) na systemach ELF z GCC. Oczywiście Jitter jest częścią projektu GNU i jest przeznaczony głównie do użytku w systemie GNU.
jitter przyjmuje jako dane wejściowe wysokopoziomową specyfikację obsługiwanych instrukcji przez maszynę wirtualną, a w wyniku powstaje gotowa do użycia implementacja maszyny wirtualnej wykonać podane instrukcje.
Logika każdej instrukcji w specyfikacji jest określony za pomocą kodu C. Dodatkowe funkcje obejmują obsługę operacji warunkowego rozgałęzienia, które są trudne do zaimplementowania w języku C i nieodłącznie związane z dynamicznymi językami programowania, takie jak sprawdzanie wartości znaczników i sprawdzanie przepełnienia.
Środowisko wykonawcze Jitter oferuje również wydajną obsługę trudnych do zaimplementowania operacji warunkowego rozgałęzienia przy użyciu tylko języka C, takich jak sprawdzanie tagów wartości wymagane przez języki z typami dynamicznymi oraz operacje arytmetyczne ze sprawdzaniem przepełnienia. Kod VM uzyskuje dostęp do operacji wywołania procedur i operacji powrotu, w większości przypadków opierając się na wydajnych mechanizmach sprzętowych.
Powstała maszyna wirtualna jest sformatowana w C z niewielką liczbą wstawek monter. Dostępne są konfiguracje umożliwiające różne optymalizacje i wybrane mechanizmy dostarczania, co ułatwia migrację maszyny wirtualnej na różne platformy.
Obsługuje użycie architektur rejestrowania, stosu i łączenia, a także umożliwia tworzenie kopii lustrzanych struktur danych maszyn wirtualnych w rejestrach sprzętowych procesora i podłączanie garbage collectorów.
Wygenerowany kod zawiera proste C API do dynamicznego zastępowania i wykonywania kodu na maszynie wirtualnej, a także program kontrolera do oddzielnego wykonywania kodu z plików tekstowych na maszynie wirtualnej.
Wygenerowany kod C jest silnie uwarunkowany i może być skonfigurowany do uruchamiania przy użyciu różnych technik dystrybucji o różnym stopniu zaawansowania; najbardziej wydajne techniki wysyłania opierają się na niektórych specyficznych dla architektury, ale nie specyficznych dla maszyn wirtualnych, wsparcia assemblera zapewnianego przez Jitter; wszystkie modele dyspozytorskie, ale jeden jest również oparty na rozszerzeniach GNU C.
Wreszcie, ci, którzy chcą dowiedzieć się więcej na ten temat, powinni wiedzieć, że oryginalny kod Jitter jest napisany w C i jest dostępny na licencji GPLv3. Możesz dowiedzieć się więcej w następujący link.
Jak zdobyć Jittera?
Dla tych, którzy są zainteresowani testowaniem Jittera, mogą uzyskać kod źródłowy, otwierając terminal i wpisując w nim następujące polecenie:
git clone http://git.ageinghacker.net/jitter
Gdy to zrobisz, teraz przechodzimy do folderu, w którym znajduje się kod, wykonamy skrypt startowy, który jest używany do generowania plików niezbędnych do skonfigurowania i zbudowania Jittera, w tym skryptu konfiguracyjnego. Robimy to za pomocą:
cd jitter && ./bootstrap
Warto wspomnieć, że Jitter przestrzega konwencji GNU dotyczących konfiguracji i konstrukcji oraz obsługuje konstrukcję z katalogu źródłowego; w rzeczywistości obsługuje kompilację krzyżową, a nawet uruchamianie zestawu testów w kompilacji krzyżowej za pośrednictwem emulatora.
./configure && make
Na koniec, aby wykonać, po prostu wpisz:
make check