Recientemente, se lanzó la próxima versión de Kaitai Struct 0.9: un lenguaje de descripción y herramientas para analizar varios formatos binarios (por ejemplo, paquetes de red, archivos de imagen/audio/vídeo, bases de datos, archivos, contenedores, etc.). A pesar de la versión frívola número 0.9, esta es una versión importante que incluye desarrollos de los últimos dos años y medio. Durante este tiempo, el idioma se ha convertido en toda una familia de proyectos:
- un compilador que le permite obtener un código fuente de analizador listo para usar en una variedad de lenguajes de programación (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) a partir de un formato archivo de especificaciones (.ksy), así como diagramas en el formato GraphViz y especificaciones en formato legible por humanos en HTML;
- Herramientas para el desarrollo conveniente de especificaciones con control visual simultáneo: IDE web, visualizador de consola, complemento para Visual Studio Code, Hobbits, Veles, complemento para Hiew, complemento para Ninja binario;
- Módulos para integrar Kaitai Struct en el proceso de montaje. para Maven, para Gradle, para pitón, para JavaScript/WebPack
- biblioteca de formatos, que ya tiene 156 descripciones en esta versión (y 78 formatos más están en el proceso de revisión de la solicitud de extracción).
- biblioteca de algoritmos de compresión de complementos Compresa Kaitai
- módulo para FUSIBLE - Kaitai FS, que le permite montar un archivo como un sistema de archivos, utilizando la descripción ksy de su formato
idioma reconocido por GitHub y ahora se utiliza en más de 400 proyectos de código abierto y gratuito para analizar todo tipo de formatos de datos exóticos, desde archivos de datos de juegos propietarios de ingeniería inversacorrerse análisis de protocolos de comunicación satelital.
Entre las principales novedades del lenguaje 0.9 cabe destacar:
- soporte para nuevos lenguajes de destino (Python a través de la biblioteca Construct, Nim, generación de documentación en HTML)
- soporte completo para C++ moderno (punteros inteligentes, no es necesario administrar la memoria manualmente, corrige todas las pérdidas de memoria conocidas)
- soporte para abordar tipos anidados mediante sintaxis como foo::bar::baz
- soporte para validar datos leídos de acuerdo con las condiciones descritas (válido)
- calcular los tamaños de estructuras de datos estáticas en bytes y bits (operadores sizeof y bitsizeof)
- descripción formal de una lengua en la forma esquemas JSON, de donde ahora se genera documentación
Fuente: linux.org.ru