Выпуск языка описания бинарных форматов Kaitai Struct 0.7
Доступен релиз декларативного языка описания бинарных форматов файлов и протоколов Kaitai Struct 0.7. Язык позволяет описывать произвольные бинарные форматы (сетевые пакеты, архивы, контейнерные форматы, файловые системы, форматы изображений, видео и т. д.) в декларативном виде. Полученное описание с помощью компилятора ksc можно:
- Транслировать в готовый парсер на любом из 8 поддерживаемых целевых языков программирования (C++, C, Java, JavaScript, Perl, PHP, Python, Ruby),
- Визуально исследовать с помощью предлагаемой IDE любой файл в описанном формате:
- Представить в виде наглядной диаграммы
В новой версии языка доступны:
- Импорт.ksy-файлов друг в друга для создания масштабных многофайловых проектов - см. "meta/import" - в том числе с обращением к атрибутам типов из других файлов. Используемый для этого ранее механизм opaque типов отключен по умолчанию (можно включить опцией "--opaque-types").
- Структуры неопределенной длины, терминируемые байтом (ранее такое поддерживалось только для строк) - см. "terminator", "include", "consume".
- "pad-right" для более удобной обработки структур с паддингом справа (например, строк, помещенных в область фиксированного размера и дополненных справа нулями или пробелами)
- Гибкое управление отношением parent-child: с помощью "parent" можно форсировать родителя для дочернего объекта, отличного от текущего объекта по умолчанию
- Вычислимые instances теперь могут использовать "_parent"
- Новый атрибут "doc-ref" в типах и атрибутах может использоваться для представления ссылок на внешнюю документацию (удобно, если описание формата соответствует какому-то формальному документу)
- Процесс компиляции четко разделен на 3 фазы: парсинг YAML, прекомпиляция (единая для всех целевых языков) и компиляция (в конкретный целевой язык); такое решение позволило унифицировать обработку ошибок и значительно упростить сами компиляторы.
- Существенно переработан механизм определения ошибок: теперь все рапортуемые компилятором ошибки должны содержать четкое указание на место проявления ошибки; добавлено более 50 тестов с неверными.ksy-файлами специально для тестирования этого сообщений об ошибках.
- Генерируемый код теперь содержит проверки на соответствие версии компилятора и runtime-библиотеки.
- Переработана система логирования поведения компилятора ("--verbose"): теперь можно гибко включать логирование по отдельным подсистемам.
- Новые возможности языка выражений: полноценная поддержка строк с двойными кавычками (с escape characters), type casting, методы для работы с массивами и различные преобразования типов.
Ввиду большого количества внутренних изменений, существенно изменен API runtime-библиотеки: код, сгенерированный ksc 0.7, будет работать только с runtime соответствующей версии. Благодаря введению механизма импорта, начаты работы по созданию библиотеки часто используемых структур данных и форматов. С версией 0.7 впервые эта библиотека поставляется в комплекте дистрибутива и на момент выпуска составляет 60 описаний.