Vrij recentelijk is de volgende versie van Kaitai Struct 0.9 uitgebracht: een beschrijvingstaal en hulpmiddelen voor het parseren van verschillende binaire formaten (bijvoorbeeld netwerkpakketten, afbeeldings-/audio-/videobestanden, databases, archieven, containers, enz.). Ondanks het frivool ogende versienummer 0.9 is dit een grote release waarin de ontwikkelingen van de afgelopen 2.5 jaar zijn verwerkt. Gedurende deze tijd is de taal uitgegroeid tot een hele familie van projecten:
- een compiler waarmee u vanuit een formaat een kant-en-klare parser-broncode in verschillende programmeertalen (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) kunt verkrijgen specificatiebestand (.ksy), evenals diagrammen in het formaat GraphViz en voor mensen leesbare formaatspecificaties in HTML;
- tools voor gemakkelijke ontwikkeling van specificaties met gelijktijdige visuele controle: Web-IDE, console-visualisator, plug-in voor Visual Studio Code, Hobbits, Veles, plug-in voor Hiew, plug-in voor Binaire Ninja;
- modules voor het integreren van Kaitai Struct in het assemblageproces voor Maven, voor Gradle, voor Python, voor JavaScript/WebPack
- formaat bibliotheek, die al 156 beschrijvingen bevat in deze release (en 78 andere formaten zijn bezig met het beoordelen van pull-aanvragen).
- bibliotheek met plug-in-compressie-algoritmen Kaitai-compressie
- module voor FUSE - Kaitai FS, waarmee u een bestand als bestandssysteem kunt mounten, met behulp van de ksy-beschrijving van het formaat ervan
taal herkend door GitHub en wordt nu gebruikt in meer dan 400 gratis/open source-projecten voor het parseren van allerlei exotische dataformaten, variërend van reverse-engineering van eigen gamegegevensbestandenklaarkomen analyse van satellietcommunicatieprotocollen.
Onder de belangrijkste innovaties van taal 0.9 is het de moeite waard om te benadrukken:
- ondersteuning voor nieuwe doeltalen (Python via de Construct-bibliotheek, Nim, genereren van documentatie in HTML)
- volledige ondersteuning voor moderne C++ (slimme pointers, geen noodzaak om het geheugen handmatig te beheren, repareert alle bekende geheugenlekken)
- ondersteuning voor het adresseren van geneste typen via syntaxis zoals foo::bar::baz
- ondersteuning voor het valideren van leesgegevens volgens de beschreven voorwaarden (geldig)
- het berekenen van de grootte van statische datastructuren in bytes en bits (operatoren sizeof en bitsizeof)
- formele beschrijving van een taal in de vorm JSON-schema's, waarvan nu documentatie wordt gegenereerd
Bron: linux.org.ru