Nemrég jelent meg a Kaitai Struct 0.9 következő verziója - egy leíró nyelv és eszközök különböző bináris formátumok (például hálózati csomagok, kép/audio/video fájlok, adatbázisok, archívumok, tárolók stb.) elemzéséhez. A komolytalannak tűnő 0.9-es verzió ellenére ez egy jelentős kiadás, amely magában foglalja az elmúlt 2.5 év fejlesztéseit. Ez idő alatt a nyelv projektek egész családjává nőtte ki magát:
- egy fordító, amely lehetővé teszi, hogy kész elemző forráskódot szerezzen be különféle programozási nyelveken (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) egy formátumból specifikációs fájl (.ksy), valamint diagramok GraphViz formátumban és ember által olvasható formátumspecifikációk HTML-ben;
- eszközök a specifikációk kényelmes kidolgozásához egyidejű vizuális vezérléssel: Web IDE, konzolvizualizáló, bővítmény a Visual Studio Code számára, Hobbitok, Veles, plugin a Hiew-hez, bővítmény a Binary Ninja számára;
- modulok a Kaitai Struct integrálásához az összeszerelési folyamatba Maven számára, Gradle számára, Python számára, JavaScript/WebPack esetén
- formátumú könyvtár, amely már 156 leírást tartalmaz ebben a kiadásban (és 78 további formátum lekérési kérelem felülvizsgálata folyamatban van).
- plug-in tömörítési algoritmusok könyvtára Kaitai Compress
- modul FUSE-hoz - Kaitai FS, amely lehetővé teszi, hogy egy fájlt fájlrendszerként csatoljon, a formátumának ksy leírását használva
Nyelv a GitHub felismerte és ma már több mint 400 ingyenes/nyílt forráskódú projektben használják mindenféle egzotikus adatformátum elemzésére, kezdve visszafejtés saját fejlesztésű játék adatfájlokcumming műholdas kommunikációs protokollok elemzése.
A 0.9 nyelv főbb újításai közül érdemes kiemelni:
- új célnyelvek támogatása (Python a Construct könyvtáron keresztül, Nim, dokumentáció generálása HTML-ben)
- a modern C++ teljes támogatása (intelligens mutatók, nem kell manuálisan kezelni a memóriát, kijavítja az összes ismert memóriaszivárgást)
- támogatja a beágyazott típusok megcímzését szintaxison keresztül, mint például a foo::bar::baz
- az olvasott adatok érvényesítésének támogatása a leírt feltételek szerint (érvényes)
- statikus adatszerkezetek méretének kiszámítása bájtokban és bitekben (operátorok mérete és bitmérete)
- egy nyelv formális leírása a formában JSON-sémák, ahonnan most dokumentáció készül
Forrás: linux.org.ru