Кілька днів тому було оголошено, що проект Jitter офіційно став проектом під егідою GNU Project і тепер розробляється під назвою GNU Jitter з використанням інфраструктури GNU та відповідно до вимог проекту.
Для тих, хто не знайомий з Jitter, це реалізація, яка дозволяє створювати портативні та дуже швидкі віртуальні машини для довільних мов програмування, продуктивність виконання коду яких значно випереджає інтерпретатори та наближається до рідного компільованого коду.
Jitter дуже переносимий, і правильна віртуальна машина буде демонструвати точно таку ж поведінку на будь-якій платформі, яка має лише компілятор і стандартну бібліотеку C; однак продуктивність буде кращою, якщо використовувати одну з підтримуваних архітектур (наразі: M68k, MIPS, PowerPC, RISC-V, SPARC, x86_64; 64-й рівень: Aarch390, Alpha, ARM, SXNUMXx) на системах ELF з GCC. Звичайно, Jitter є частиною проекту GNU і призначений в основному для використання в системі GNU.
Джиттер приймає на вхід високорівневу специфікацію інструкцій, що підтримуються віртуальною машиною, а на виході формує готову до використання реалізацію віртуальної машини для виконання заданих інструкцій.
Логіка кожної інструкції в специфікації задається за допомогою коду C. Додаткові функції включають підтримку умовних операцій розгалуження, які важко реалізувати на C та властиві динамічним мовам програмування, такі як перевірка значень міток та перевірка переповнення.
Середовище виконання Jitter також має ефективну підтримку складних для реалізації операцій умовного розгалуження з використанням лише C, наприклад перевірку тегів значень, як це вимагається динамічно типізованими мовами, та арифметики з перевіркою переповнення. Код ВМ отримує доступ до операцій виклику процедури та повернення, у більшості випадків покладаючись на ефективні апаратні механізми.
Отримана віртуальна машина відформатована на C з невеликою кількістю вставок асемблера. Надаються конфігурації для забезпечення різних оптимізацій та вибору механізмів доставки, що спрощує міграцію віртуальної машини на різні платформи.
Він підтримує використання архітектур виконання регістрів, стеків і з’єднань, а також можливість дзеркального відображення структур даних віртуальної машини в апаратних регістрах ЦП і підключення збирачів сміття.
Згенерований код включає простий C API для динамічної заміни та виконання коду у віртуальній машині, а також програму-контролер для окремого виконання коду з текстових файлів у віртуальній машині.
Згенерований код C сильно обумовлений і може бути налаштований для виконання з використанням різних методів розповсюдження різної складності; найефективніші методи диспетчеризації покладаються на певну специфічну для архітектури, але не специфічну для віртуальної машини підтримку складання, надану Jitter; всі моделі диспетчеризації, але одна також заснована на розширеннях GNU C.
Нарешті, для тих, хто хоче дізнатися більше, оригінальний код Jitter написаний на C та доступний за ліцензією GPLv3. Ви можете дізнатися більше за наступним посиланням.
Як отримати джиттер?
Для тих, хто зацікавлений у можливості протестувати Jitter, вони можуть отримати вихідний код, відкривши термінал і ввівши в ньому таку команду:
git clone http://git.ageinghacker.net/jitter
Коли це буде зроблено, ми переходимо до входу в папку з кодом, ми збираємося виконати сценарій запуску, який використовується для створення необхідних файлів для налаштування та складання Jitter, включаючи сценарій конфігурації. Ми робимо це за допомогою:
cd jitter && ./bootstrap
Варто зазначити, що Jitter дотримується конвенцій GNU щодо конфігурації та конструювання та підтримує конструювання з вихідного каталогу; насправді він підтримує перехресну компіляцію і навіть запускає тестовий набір у крос-компіляції через емулятор.
./configure && make
Нарешті, щоб виконати, просто введіть:
make check