Выпуск языка описания бинарных форматов 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 описаний.
© OpenNet