声明性二进制格式解析引擎Kaitai Struct发布v0.9

2020-10-17 05:42:10

经过大量的时间和努力,开泰项目很高兴宣布发布新的主要版本的开泰结构,声明性标记语言来描述各种二进制数据结构-二进制文件格式,网络流包等。

开泰结构的基本思想是使用开泰结构语言(.ksy文件)描述特定的格式,然后使用开泰结构编译器将其编译成支持的编程语言之一的源文件。这些模块将包括为解析器生成的代码,该解析器可以从文件/流中读取所描述的数据结构,并以良好的、易于理解的API提供对其内容的访问。

在之前的0.8版本中,开泰计划在GitHub上庆祝1000颗星,到0.9版本,已经收集了2000多颗星,感谢大家的支持!

这个版本引入了C++11目标(使用智能指针),几个方便的特性(如验证和低端位整数),修复了许多错误,并包括了相当多的基础设施改进。

新的KSY语言功能:META/TAG允许指定多个标签,以便在格式库中更好地导航(#572)。

一般编译改进:通过不再为go+Java的输出添加子目录src来支持类似Maven的目录树(#287)。虽然这最有可能破坏现有的构建,但它使这些语言与所有其他语言保持一致,对于用户来说,添加子目录比自动删除一些由Kaitai添加的子目录更容易。

运行时API更改:添加异常验证{NOT{NOT{EQUAL,ANYOF},{LESS,Greater}Than,Expr}继承自公共祖先ValidationFailedError-在使用有效键或内容键定义的验证失败时引发错误(#435)。

不推荐使用的类和方法:如果断言⟶(N)等于预期的n字节数组,则确保_FIXED_CONTENTS readBytes显式(如果失败则抛出ValidationNotEqualError)。

主要错误修复:枚举列表中包含未定义值的枚举不会使解析器崩溃(Python为#523,Java为#300)。

修复了在条件OP(?:)或数组文字中强制不同的字符串/字节数组/枚举/布尔类型(例如,从流解析并从文字值创建)的问题。

基础设施更新:在Binty的每个CI构建之后,所有平台都可以使用不稳定的二进制构建(#63)。

全新的模块化CI/CD编译器系统,支持CI不可知,可并行运行多个不同的操作系统(LINUX、WINDOWS、MACOS),并在https://ci.kaitai.io/上显示状态