Ganske nylig ble den neste versjonen av Kaitai Struct 0.9 utgitt - et beskrivelsesspråk og verktøy for å analysere forskjellige binære formater (for eksempel nettverkspakker, bilde-/lyd-/videofiler, databaser, arkiver, beholdere, etc.). Til tross for det useriøse versjonsnummeret 0.9, er dette en stor utgivelse som inkluderer utviklingen de siste 2.5 årene. I løpet av denne tiden har språket vokst til en hel familie av prosjekter:
- en kompilator som lar deg skaffe en ferdig parserkildekode i en rekke programmeringsspråk (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) fra et format spesifikasjonsfil (.ksy), samt diagrammer i formatet GraphViz og menneskelesbare formatspesifikasjoner i HTML;
- verktøy for enkel utvikling av spesifikasjoner med samtidig visuell kontroll: Web IDE, konsollvisualisering, plugin for Visual Studio Code, Hobbitter, Veles, plugin for Hiew, plugin for binær ninja;
- moduler for å integrere Kaitai Struct i monteringsprosessen for Maven, for Gradle, for Python, for JavaScript/WebPack
- format bibliotek, som allerede har 156 beskrivelser i denne utgivelsen (og 78 flere formater er i ferd med å gjennomgå pull request).
- bibliotek med plug-in komprimeringsalgoritmer Kaitai komprimere
- modul for FUSE - Kaitai FS, som lar deg montere en fil som et filsystem ved å bruke ksy-beskrivelsen av formatet
Språk gjenkjent av GitHub og brukes nå i mer enn 400 gratis/åpen kildekode-prosjekter for å analysere alle slags eksotiske dataformater, alt fra omvendt utvikling av proprietære spilldatafilercumming analyse av satellittkommunikasjonsprotokoller.
Blant de viktigste nyvinningene av språk 0.9 er det verdt å fremheve:
- støtte for nye målspråk (Python via Construct-biblioteket, Nim, generering av dokumentasjon i HTML)
- full støtte for moderne C++ (smarte pekere, ikke nødvendig å manuelt administrere minne, fikser alle kjente minnelekkasjer)
- støtte for adressering av nestede typer via syntaks som foo::bar::baz
- støtte for å validere lesedata i henhold til de beskrevne betingelsene (gyldig)
- beregne størrelsen på statiske datastrukturer i byte og biter (størrelse på og bitstørrelse på operatører)
- formell beskrivelse av et språk i skjemaet JSON-skjemaer, hvorfra nå dokumentasjon genereres
Kilde: linux.org.ru