Enkele dagen geleden werd bekendgemaakt dat het Jitter-project officieel onderdeel is geworden van het GNU-project en nu onder de naam GNU Jitter wordt ontwikkeld, gebruikmakend van de GNU-infrastructuur en conform de projectvereisten.
Voor degenen die niet bekend zijn met Jitter: het is een implementatie waarmee je draagbare en zeer snelle virtuele machines kunt genereren voor willekeurige programmeertalen. De prestaties van de code-uitvoering zijn aanzienlijk beter dan die van interpreters en benaderen die van native gecompileerde code.
Jitter is zeer draagbaar en een correcte VM zal precies hetzelfde gedrag vertonen op elk platform dat alleen een standaard C-compiler en -bibliotheek heeft; de prestaties zullen echter beter zijn als een van de ondersteunde architecturen (momenteel: M68k, MIPS, PowerPC, RISC-V, SPARC, x86_64; tweede niveau: Aarch64, Alpha, ARM, S390x) wordt gebruikt op ELF-systemen met GCC . Jitter maakt natuurlijk deel uit van het GNU-project en is in de eerste plaats ontworpen voor gebruik op het GNU-systeem.
Jitter ontvangt als invoer een specificatie op hoog niveau van instructies die door een virtuele machine worden ondersteund, en genereert als uitvoer een gebruiksklare implementatie van een virtuele machine om de gegeven instructies uit te voeren.
De logica van elke instructie in de specificatie wordt beschreven met behulp van C-code. Extra functies omvatten ondersteuning voor voorwaardelijke vertakkingsoperaties die moeilijk te implementeren zijn in C en inherent zijn aan dynamische programmeertalen, zoals labelwaardecontrole en overloopcontrole.
De Jitter-runtime biedt ook efficiënte ondersteuning voor voorwaardelijke vertakkingsbewerkingen die moeilijk te implementeren zijn met alleen C, zoals het controleren van waardelabels zoals vereist door dynamisch getypte talen en rekenen met overloopcontrole. VM-code heeft toegang tot callback- en procedure-aanroepbewerkingen, waarbij in de meeste gevallen gebruik wordt gemaakt van efficiënte hardwaremechanismen.
De resulterende virtuele machine is geformatteerd in C met een klein aantal assembler-invoegingen. Er zijn configuraties beschikbaar om diverse optimalisaties in te schakelen en verzendmechanismen te selecteren, waardoor het eenvoudig is om een ​​virtuele machine naar verschillende platforms te migreren.
Het ondersteunt het gebruik van register-, stapel- en merge-uitvoeringsarchitecturen, evenals de mogelijkheid om datastructuren van virtuele machines te spiegelen naar CPU-hardwareregisters en om afvalverzamelaars aan te sluiten.
De gegenereerde code bevat een eenvoudige C API om dynamisch code te vervangen en uit te voeren in een virtuele machine, evenals een stuurprogramma om code afzonderlijk uit te voeren vanuit tekstbestanden in een virtuele machine.
De gegenereerde C-code is sterk geconditioneerd en kan worden geconfigureerd om te worden uitgevoerd met behulp van verschillende distributietechnieken van verschillende verfijning; de meest efficiënte verzendtechnieken zijn afhankelijk van architectuurspecifieke, maar niet VM-specifieke, assemblageondersteuning die door Jitter wordt geboden; alle verzendmodellen, maar één is ook gebaseerd op GNU C-extensies.
Tot slot, voor degenen die meer willen weten: de originele Jitter-code is geschreven in C en is beschikbaar onder de GPLv3-licentie. Meer informatie is te vinden via de volgende link.
Hoe krijg je jitter?
Voor degenen die geïnteresseerd zijn in het uitproberen van Jitter, je kunt de broncode krijgen door een terminal te openen en de volgende opdracht erin te typen:
git clone http://git.ageinghacker.net/jitter
Zodra dit is gebeurd, gaan we nu verder met het invoeren van de map met de code, we gaan het opstartscript uitvoeren dat wordt gebruikt om de benodigde bestanden te genereren om Jitter te configureren en te bouwen, inclusief een configuratiescript. Dit doen we met:
cd jitter && ./bootstrap
Het is vermeldenswaard dat Jitter de GNU-conventies volgt voor configuratie en build en ondersteunt bouwen vanuit de brondirectory; in feite ondersteunt het cross-compiling en zelfs het uitvoeren van de testsuite in een cross-compilatie via een emulator.
./configure && make
Typ ten slotte om uit te voeren:
make check