Całkiem niedawno ukazała się kolejna wersja Kaitai Struct 0.9 - język opisu i narzędzia do analizowania różnych formatów binarnych (na przykład pakietów sieciowych, plików obrazów/audio/wideo, baz danych, archiwów, kontenerów itp.). Pomimo niepoważnie wyglądającej wersji 0.9, jest to główne wydanie, które zawiera zmiany, które miały miejsce w ciągu ostatnich 2.5 roku. W tym czasie język rozrósł się do całej rodziny projektów:
- kompilator umożliwiający uzyskanie gotowego kodu źródłowego parsera w różnych językach programowania (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) z formatu plik specyfikacji (.ksy), a także diagramy w formacie GraphViz i specyfikacje w formacie czytelnym dla człowieka w formacie HTML;
- narzędzia do wygodnego opracowywania specyfikacji z jednoczesną kontrolą wizualną: Internetowe IDE, wizualizator konsoli, wtyczka do Visual Studio Code, Hobbity, Veles, wtyczka do Hiew, wtyczka do Binary Ninja;
- moduły umożliwiające integrację Kaitai Struct z procesem montażu dla Mavena, dla Gradle'a, dla Pythona, dla JavaScript/WebPack
- biblioteka formatów, który ma już 156 opisów w tym wydaniu (i 78 więcej formatów są w trakcie sprawdzania żądania ściągnięcia).
- biblioteka algorytmów kompresji wtyczek Kompres Kaitai
- moduł do FUSE - Kaitai FS, który umożliwia zamontowanie pliku jako systemu plików przy użyciu opisu jego formatu ksy
język rozpoznawane przez GitHuba i jest obecnie używany w ponad 400 projektach bezpłatnych/open source do analizowania wszelkiego rodzaju egzotycznych formatów danych, począwszy od Inżynieria wsteczna zastrzeżonych plików danych giercumming analiza protokołów komunikacji satelitarnej.
Wśród głównych innowacji języka 0.9 warto wyróżnić:
- obsługa nowych języków docelowych (Python poprzez bibliotekę Construct, Nim, generowanie dokumentacji w formacie HTML)
- pełne wsparcie dla nowoczesnego C++ (inteligentne wskaźniki, brak konieczności ręcznego zarządzania pamięcią, naprawia wszystkie znane wycieki pamięci)
- obsługa adresowania typów zagnieżdżonych za pomocą składni takiej jak foo::bar::baz
- obsługa walidacji odczytanych danych zgodnie z opisanymi warunkami (obowiązuje)
- obliczanie rozmiarów statycznych struktur danych w bajtach i bitach (operatory sizeof i bitsizeof)
- formalny opis języka w formie Schematy JSON, z którego teraz generowana jest dokumentacja
Źródło: linux.org.ru