Niedawno ukazała się kolejna wersja Kaitai Struct 0.9 — języka opisu i narzędzi do parsowania różnych binarnych formatów (np. pakietów sieciowych, plików z obrazami/audiem/wideo, baz danych, archiwów, kontenerów itp.). Pomimo niepoważnie brzmiącego numeru wersji 0.9 — to duża aktualizacja, obejmująca osiągnięcia z ostatnich 2,5 roku. W tym czasie język rozwinął się w całej rodzinie projektów:
- kompilator, który pozwala z pliku specyfikacji formatu (.ksy) uzyskać gotowy kod źródłowy parsera w wielu językach programowania (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby), a także diagramy w formacie GraphViz i czytelne dla człowieka specyfikacje formatów w HTML;
- narzędzia do wygodnego opracowywania specyfikacji z jednoczesną kontrolą wizualną: Web IDE, interaktywny wizualizator, wtyczka dla Visual Studio Code, Hobbits, Veles, wtyczka dla Hiew, wtyczka dla Binary Ninja;
- moduły do integracji Kaitai Struct w procesie budowy dla Maven, dla Gradle, dla Pythona, dla JavaScript/WebPack
- biblioteka formatów, która w tej wersji zawiera już 156 opisów (a kolejne 78 formatów jest w trakcie przeglądu pull request).
- biblioteka wtyczkowych algorytmów kompresji Kaitai Compress
- moduł dla FUSE — Kaitai FS, umożliwiający zamontowanie pliku jako systemu plików, korzystając z opisu jego formatu ksy
Język uznany przez GitHub i obecnie używany w ponad 400 projektach typu free/open source do parsowania różnorodnych egzotycznych formatów danych, od odwrotnego inżynieryjstwa danych w plikach gier proprietary, aż do analizy protokołów komunikacyjnych satelitów.
Wśród głównych nowości języka 0.9 warto wyróżnić:
- wsparcie dla nowych docelowych języków (Python przez bibliotekę Construct, Nim, generowanie dokumentacji w HTML)
- pełne wsparcie dla nowoczesnego C++ (wskaźniki smart, brak potrzeby ręcznego zarządzania pamięcią, eliminacja wszystkich znanych przypadków wycieków pamięci)
- wsparcie dla adresowania zagnieżdżonych typów za pomocą składni typu foo::bar::baz
- wsparcie dla walidacji odczytanych danych według określonych warunków (valid)
- obliczanie rozmiarów statycznych struktur danych w bajtach i bitach (operatory sizeof oraz bitsizeof)
- formalny opis języka w postaci schemy JSON, z której teraz generowana jest dokumentacja
Źródło: linux.org.ru

