diff --git a/_posts/2020-10-16-kaitai-struct-v0.9-released.md b/_posts/2020-10-16-kaitai-struct-v0.9-released.md index 57f5a98..7f7a7bb 100644 --- a/_posts/2020-10-16-kaitai-struct-v0.9-released.md +++ b/_posts/2020-10-16-kaitai-struct-v0.9-released.md @@ -13,14 +13,14 @@ categories: news After a lot of time and effort, Kaitai project is happy to announce release of new major version of Kaitai Struct, declarative markup language to describe various binary data structures — binary file -formats, network stream packets, etc. +formats, network packets, etc. The basic idea of Kaitai Struct is that a particular format can be described using Kaitai Struct language (in a `.ksy` file), which then can be compiled using `kaitai-struct-compiler` into source files in one of the supported programming languages. These modules will include a generated code for a parser that can read described data structure -from a file / stream and provide access to its contents in a nice, +from a file / buffer and provide access to its contents in a nice, easy-to-comprehend API. With the previous 0.8 release, Kaitai project celebrated 1000 stars on GitHub, @@ -28,16 +28,17 @@ and until 0.9 version, it has collected more than [2000 stars](https://github.co Thank you all for your support! This version introduces C++11 target (which uses smart pointers), -several handy features (like `valid`ations and little-endian bit integers), -fixes a lot of bugs and includes quite a few infrastructure improvements. +several handy features (like `valid`ations and little-endian "bit-sized +types"), fixes a lot of bugs and includes quite a few infrastructure +improvements. ## Release highlights * New targets support: - * Python with [Construct](https://construct.readthedocs.io) library - * HTML - intended for documentation, preliminary support - * Nim - entry-level support (51% tests pass score) -* New KSY language features: + * Python with [Construct](https://construct.readthedocs.io) library ([#377](https://github.com/kaitai-io/kaitai_struct/issues/377)) + * HTML - intended for documentation, preliminary support ([ec21b](https://github.com/kaitai-io/kaitai_struct_compiler/commit/ec21bdf62bcc9211e514dd8413ed5f6714a8e6bc)) + * Nim - entry-level support (51% tests pass score) ([#619](https://github.com/kaitai-io/kaitai_struct/issues/619)) +* New KS language features: * `doc-ref` supports list of references ([#269](https://github.com/kaitai-io/kaitai_struct/issues/269)) * `meta/tags` allows specification of multiple tags to allow better navigation in the format gallery ([#572](https://github.com/kaitai-io/kaitai_struct/issues/572)) * Allow accessing nested types using `::` syntax: `foo::bar` ([#275](https://github.com/kaitai-io/kaitai_struct/issues/275)) @@ -45,9 +46,9 @@ fixes a lot of bugs and includes quite a few infrastructure improvements. * Implement compile-time `sizeof` and `bitsizeof` operators ([#84](https://github.com/kaitai-io/kaitai_struct/issues/84)) * Type-based: `sizeof`, `bitsizeof`, `sizeof` * Value-based: `file_header._sizeof`, `flags._bitsizeof` (`file_header`, `flags` are fields defined in the current type) - * Implement little-endian bit-sized integers ([docs](https://doc.kaitai.io/user_guide.html#bit-ints-le)) - * Support choosing endianness using `le` / `be` suffix: `type: b12le`, `type: b1be` - * Add `meta/bit-endian` key for selecting default bit endianness (`le` / `be`) + * Implement little-endian-based bit-sized types ([docs](https://doc.kaitai.io/user_guide.html#bit-ints-le)) + * Support choosing endianness of bit-sized types using `le` / `be` suffix: `type: b12le`, `type: b1be` + * Add `meta/bit-endian` key for selecting default bit endianness (`le` / `be`) ([#155](https://github.com/kaitai-io/kaitai_struct/issues/155)) * Expression language: * Forced byte array and true array literals ([#371](https://github.com/kaitai-io/kaitai_struct/issues/371)) and empty typed array literals ([#372](https://github.com/kaitai-io/kaitai_struct/issues/372)) @@ -63,7 +64,7 @@ fixes a lot of bugs and includes quite a few infrastructure improvements. * C++: add C++11 mode * Add `--cpp-standard` CLI option: pass `--cpp-standard 11` to enable C++11 mode (`98` is default) * C++11 target: - * uses `#pragma once` (instead of `#ifndef FOO_H_` header guards) + * uses `#pragma once` (instead of `#ifndef FOO_H_` header guards) ([25fb1](https://github.com/kaitai-io/kaitai_struct_compiler/commit/25fb1eee61d07bdc8b199445776836ce9a6606ef)) * uses `std::unique_ptr` for owning pointers, raw pointers `foo*` for non-owning * supports array literals * `--no-auto-read` implemented for C++ @@ -72,6 +73,7 @@ fixes a lot of bugs and includes quite a few infrastructure improvements. * Runtime API changes: * Add exceptions `Validation{Not{Equal,AnyOf},{Less,Greater}Than,Expr}Error` inheriting from common ancestor `ValidationFailedError` - thrown on failed validations defined with `valid` or `contents` key ([#435](https://github.com/kaitai-io/kaitai_struct/issues/435)) * Add method `read_bits_int_le` for parsing little-endian bit-sized integers ([docs](https://doc.kaitai.io/user_guide.html#bit-ints-le)) + * Allow third-party `process`ors to be used ([#457](https://github.com/kaitai-io/kaitai_struct/issues/457)). * Deprecated classes and methods: * ~~`ensure_fixed_contents`~~ ⟶ explicit `if` that asserts `readBytes(n)` to be equal to the expected `n`-byte array (throwing `ValidationNotEqualError` if it fails) * ~~`UnexpectedDataError`~~ ⟶ `ValidationNotEqualError` @@ -99,12 +101,19 @@ fixes a lot of bugs and includes quite a few infrastructure improvements. Gradle plugin](https://github.com/valery1707/kaitai-gradle-plugin) * Infrastructure updates: * Unstable binary builds are available for all platforms after every CI build at Bintray ([#63](https://github.com/kaitai-io/kaitai_struct/issues/63)) - * KSY language reference replaced with [documentation](https://doc.kaitai.io/ksy_diagram.html) generated from JSON schema + * KS language reference replaced with [documentation](https://doc.kaitai.io/ksy_diagram.html) generated from [the JSONSchema](https://github.com/kaitai-io/ksy_schema) * [https://formats.kaitai.io/](https://formats.kaitai.io/) is rebuilt automatically with CI/CD * Brand new modular CI/CD system for compiler, underlying CI-agnostic, working on multiple different OSes in parallel (Linux, Windows, macOS) and showing status at [https://ci.kaitai.io/](https://ci.kaitai.io/) * Generate test assertion specs from language-agnostic [KST specs](https://doc.kaitai.io/kst.html) +* Related projects: + * Added an [official library of compression algorithms](https://github.com/kaitai-io/kaitai_compress) to be used in `process`. + * Created [a list of ![awesome](https://camo.githubusercontent.com/1997c7e760b163a61aba3a2c98f21be8c524be29/68747470733a2f2f617765736f6d652e72652f62616467652e737667) projects related to Kaitai Struct](https://github.com/kaitai-io/awesome-kaitai) + * Alternative compiler implementations started: + * [ksc-rs](https://github.com/Mingun/ksc-rs) for Rust + * [kaitaigo](https://github.com/cugu/kaitaigo) for Go + * [nimitai](https://github.com/sealmove/nimitai) for nim