Voodoo Compiler is een implementatie van de Voodoo programmeertaal & nbsp;. De Voodoo programmeertaal is een low-level programmeertaal, abstraheren op instructie van het platform ingesteld en conventies te bellen, maar anders is het verlaten van de programmeur vrij om te doen helemaal niets.
Voodoo Compiler is geschreven in Ruby en genereert code voor i386-compatibel, AMD64, en MIPS CPU's. Ondersteuning voor extra doelgroep CPU's is gepland voor de toekomst.
Gebruik
Er zijn twee manieren om de Voodoo compiler te gebruiken: door het uitvoeren van de voodooc programma, of met behulp van de Ruby-API.
Het voodooc programma stelt een Voodoo bronbestanden. Het gebruik ervan wordt beschreven in de voodooc.1 manpage, opgenomen in de distributie. Het volgende is een voorbeeld van hoe voodooc kan worden gebruikt om een uitvoerbaar hallo uit een bronbestand hello.voo maken:
$ Voodooc hello.voo
$ Cc hello.o -o hello
$ ./hello
Hallo Wereld!
Een implementatie van hello.voo kan worden gevonden in de directory test van de distributie.
De tweede manier om de Voodoo compiler is met het van een Ruby programma. Dit kan worden gebruikt, bijvoorbeeld om code voor de doelplatform genereren zonder een .voo bestand. Het volgende is een voorbeeld waarin een object bestand genaamd fact.o creëert, met daarin een definitie van een functie feit waarop faculteiten berekent:
vereisen 'voodoo'
generator = Voodoo :: CodeGenerator.get_generator: architectuur =>: i386,
& Nbsp;: format =>: elf
generator.export: feit
generator.add_function_label: feit
generator.add_function [n],
& Nbsp; [: ifle, [: n, 1],
& Nbsp; # dan
& Nbsp; [[: terugkeer, 1]],
& Nbsp; # anders
& Nbsp; [[: laat,: x,: sub,: n, 1],
& Nbsp; [: set,: x,: noemen,: feite: x],
& Nbsp; [: terugkeer,: mul,: n,: x]]]
File.open ('fact.o', 'w') {| outfile | generator.write outfile}
De Voodoo compiler API die is een beschikbaar is voor Ruby's wordt beschreven in de API-documentatie
Wat is nieuw in deze release:.
- < li> Compatibiliteit met Ruby 1.9, naast Ruby 1.8; maken testrapporten nu het aantal doorgegeven en mislukte testen.
- De vele-vars test is opgesplitst in vele-args, veel-args-staart, en vele lokale bevolking.
Wat is nieuw in versie 1.0.1:
- Deze versie voegt een aantal verbeteringen aan de parser die nu rapporteert broncode locaties voor alle fouten en kan meerdere fouten in blokken, functies en conditionals melden. Verschillende tests voor de parser toegevoegd.
- Deze versie lost een parse error op verklaringen gevolgd door opmerkingen en een probleem dat veroorzaakt de parser te mislukken op lege ingang.
Wat is nieuw in versie 1.0.0:
- ARM code generator: De compiler kan genereren assemblage en ELF object code voor de ARM-architectuur.
- Verbeterde fout rapportage:. Meer fouten worden ontdekt, en fouten worden gerapporteerd in makkelijker om foutmeldingen te begrijpen
- Validator module: deze nieuwe module kan worden gebruikt om gegenereerd Voodoo code te valideren. Het wordt gebruikt door de parser te Parsed code te valideren.
- Feature-interface: kenmerken van de implementatie kan worden programmatisch en vanaf de opdrachtregel bevraagd zowel .
Wat is nieuw in versie 0.7.0:
- Blokken: hier scopes waarin lokale variabelen kunnen worden gedefinieerd met verhuurd. Dergelijke variabelen bestaan uit het einde van de laat opgenomen tot het einde van het blok. Blokken kunnen voorkomen in elke plaats waar een actie kan optreden. Ze zijn begonnen met blok en eindigde met het einde blok.
- Geketend voorwaardelijken: het is nu mogelijk om te schrijven & quot; anders als & quot ;, in plaats van dat een geneste als in de andere clausule .
- Shift en roteren: shift-acties (asr, bsr, SHL, SHR) en draai acties (rol, ROR) zijn toegevoegd .
- Terug zonder waarde: rendement kan nu zonder het opgeven van een uitdrukking te evalueren worden gebruikt. Dit veroorzaakt een niet-gedefinieerde waarde die moet worden geretourneerd door de functie.
Wat is nieuw in versie 0.6.3:
- Deze release introduceert op-uitingen: door voor een etiket, lokale variabele, of integer met een @, wordt de waarde behandeld als een adres, en het woord opgeslagen op dat adres wordt geretourneerd.
- Daarnaast werden een aantal bugs ontdekt in de manier waarop strings werden gecodeerd in gegenereerde assembly code.
- Deze bugs zijn opgelost, en versie 0.6.3 behandelt nu strings met daarin alle 256 mogelijke byte waarden correct.
Wat is nieuw in versie 0.6.2:
- Deze versie lost bugs in de implementaties van instel- woord voor i386 en AMD64 en voegt tests voor de gevallen die eerder niet goed werken.
Reacties niet gevonden