Релиз системы разбора бинарных файлов Kaitai Struct 0.6

Вышел очередной релиз языка разбора произвольных бинарных файлов Kaitai Struct 0.6, приуроченный к конференции FOSDEM 2017. Язык позволяет создавать спецификации произвольных бинарные форматы файлов / пакетов / протоколов, после чего можно:

  • Визуализировать данные в этом формате в виде интерактивного дерева объектов, наблюдая каким байтам в дампе соответствуют какие значения: 0_1486236197.png
  • Получить наглядную диаграмму формата с помощью GraphViz 0_1486236206.png
  • Скомпилировать спецификацию формата в готовую библиотеку парсинга формата на языках C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby

Среди основных нововведений версии 0.6 можно выделить:

  • Поддержка невыравненного (unaligned) побитового чтения (удобно поддерживать битовые поля, можно читать потоки битов и т.д.)
  • Мощная поддержка метаинформации в .ksy (добавлены поля «title», «license», «ks-version», «ks-debug»), поддержка «doc» на уровне типов
  • Enum’ы выведены на уровень типов — т.е. теперь они корректно раскрываются, их можно использовать между разными уровнями вложенности типов (даже если поддержки такой области видимости нет в целевом языке — например, в Python, PHP или JavaScript)
  • Идентификатор (id) в атрибутах в seq теперь опционален; если его не указывать, будет автоматически сгенерирован численный идентификатор — это удобно для быстрой разметки неизвестных форматов
  • Вычислимые instances теперь могут использовать «if» и «enum»
  • Поддержка ссылок на внешние типы данных — можно использовать «type: xxx», где xxx не объявлен в текущем .ksy-файле — это создаст правильные инструкции import / include в предположении, что тип xxx описан в каком-то другом .ksy файле, который будет также собран вместе с этим проектом
  • В языке выражений теперь можно использовать числовые литералы с визуальными разделителями (например,»123_456_789» или »0b0101_0011»), а также метод «to_s» у целочисленных типов для преобразования к строке
  • Множество других исправлений ошибок и оптимизаций (как по проекту в целом, например, в механизме выведения типов, так и по компиляторам конкретных целевых языков)

© OpenNet