Зовсім недавно вийшла чергова версія Kaitai Struct 0.9 - мови опису та інструментарію парсингу усіляких бінарних форматів (наприклад, мережевих пакетів, файлів із зображеннями/аудіо/відео, баз даних, архівів, контейнерів тощо). Незважаючи на несерйозно вигляд версії 0.9 — це великий реліз, що включає напрацювання за останні 2.5 року. За цей час мова виросла до цілого сімейства проектів:
- компілятор, що дозволяє з файлу специфікації формату (.ksy) отримати готовий вихідник парсера на багатьох мовах програмування (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby), а також діаграми у форматі GraphViz та людино-читані специфікації форматів у HTML;
- інструменти для зручної розробки специфікацій з одночасним візуальним контролем: Web IDE, консольний візуалізатор, плагін для Visual Studio Code, Хоббіти, Veles, плагін для Hiew, плагін для Binary Ninja;
- модулі для інтеграції Kaitai Struct у процес складання для Maven, для Gradle, для Python, для JavaScript/WebPack
- бібліотека форматів, що налічує в цьому релізі вже 156 описів (і ще 78 форматів перебувають у процесі pull request review).
- бібліотека алгоритмів компресії, що підключаються. Kaitai Compress
- модуль для FUSE - Kaitai FS, що дозволяє замонтувати файл як файлову систему, використовуючи ksy-опис його формату.
Мова визнаний GitHub і використовується зараз у більш ніж 400 free/open source проектах для парсингу всіляких екзотичних форматів даних, починаючи від реверс-інжинірингу файлів даних пропрієтарних ігор, закінчуючи розбором протоколів зв'язку супутників.
З основних новацій мови 0.9 варто виділити:
- підтримка нових цільових мов (Python через бібліотеку Construct, Nim, генерацію документації у HTML)
- повноцінну підтримку сучасних C++ (smart pointers, відсутність необхідності вручну керувати пам'яттю, виправлення всіх відомих варіантів витоку пам'яті)
- підтримку адресації вкладених типів через синтаксис виду foo::bar::baz
- підтримку валідації прочитаних даних за описаними умовами (valid)
- обчислення розмірів статичних структур даних у байтах та бітах (оператори sizeof та bitsizeof)
- формальний опис мови у вигляді JSON-схеми, з якої тепер генерується документація
Джерело: linux.org.ru