Muito recentemente, a próxima versão do Kaitai Struct 0.9 foi lançada - uma linguagem de descrição e ferramentas para analisar vários formatos binários (por exemplo, pacotes de rede, arquivos de imagem/áudio/vídeo, bancos de dados, arquivos, contêineres, etc.). Apesar da versão 0.9 de aparência frívola, esta é uma versão importante que inclui desenvolvimentos nos últimos 2.5 anos. Durante esse tempo, a linguagem cresceu em toda uma família de projetos:
- um compilador que permite obter um código-fonte de analisador pronto em uma variedade de linguagens de programação (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) a partir de um formato arquivo de especificação (.ksy), bem como diagramas no formato GraphViz e especificações de formato legível por humanos em HTML;
- ferramentas para desenvolvimento conveniente de especificações com controle visual simultâneo: IDE da Web, visualizador de console, plug-in para Visual Studio Code, hobbits, Veles, plugin para Hiew, plugin para Ninja Binário;
- módulos para integração do Kaitai Struct no processo de montagem para Maven, para Gradle, para Python, para JavaScript/WebPack
- biblioteca de formatos, que já possui 156 descrições nesta versão (e Mais 78 formatos estão em processo de revisão de pull request).
- biblioteca de algoritmos de compressão de plug-ins Compressa Kaitai
- módulo para FUSE - Kaitai FS, que permite montar um arquivo como um sistema de arquivos, usando a descrição ksy de seu formato
Linguagem reconhecido pelo GitHub e agora é usado em mais de 400 projetos de código aberto/gratuito para analisar todos os tipos de formatos de dados exóticos, desde arquivos de dados de jogos proprietários de engenharia reversagozando análise de protocolos de comunicação via satélite.
Dentre as principais inovações da linguagem 0.9 vale destacar:
- suporte a novas linguagens alvo (Python via biblioteca Construct, Nim, geração de documentação em HTML)
- suporte completo para C++ moderno (ponteiros inteligentes, sem necessidade de gerenciar memória manualmente, corrige todos os vazamentos de memória conhecidos)
- suporte para endereçar tipos aninhados via sintaxe como foo::bar::baz
- suporte para validação de dados lidos de acordo com as condições descritas (válido)
- calculando os tamanhos de estruturas de dados estáticos em bytes e bits (operadores sizeof e bitsizeof)
- descrição formal de uma linguagem na forma Esquemas JSON, do qual agora documentação é gerada
Fonte: linux.org.ru