Релиз системы разбора бинарных файлов Kaitai Struct 0.6
Вышел очередной релиз языка разбора произвольных бинарных файлов Kaitai Struct 0.6, приуроченный к конференции FOSDEM 2017. Язык позволяет создавать спецификации произвольных бинарные форматы файлов / пакетов / протоколов, после чего можно:
- Визуализировать данные в этом формате в виде интерактивного дерева объектов, наблюдая каким байтам в дампе соответствуют какие значения:
- Получить наглядную диаграмму формата с помощью GraphViz
- Скомпилировать спецификацию формата в готовую библиотеку парсинга формата на языках 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" у целочисленных типов для преобразования к строке
- Множество других исправлений ошибок и оптимизаций (как по проекту в целом, например, в механизме выведения типов, так и по компиляторам конкретных целевых языков)