ELSEIF
Your brief EB
268 stories from 108 feeds 366 clusters Refreshed 10 minutes ago next pull 15:51

LANGUAGES Signal 526

GNU poke 5.0 adds floating-point arithmetic and reactive IO spaces for binary editing

Illustration only Photo by Marcus dePaula on Unsplash

GNU poke 5.0, a binary-data editor with an embedded language, introduces floating-point operations on uint types and reactive IO spaces for performance gains in read-heavy workflows.

WHY IT MATTERS

Binary-data manipulation tools are critical for low-level debugging, reverse engineering, and firmware analysis. The addition of floating-point arithmetic and reactive IO spaces reduces manual effort and improves performance for engineers working with structured binary formats. These changes may lower the barrier to writing precise, maintainable scripts for binary inspection and modification.

Written by elseif from the cluster below · every claim links back to a source

The three things worth knowing

01

Floating-point arithmetic now supported on uint<32> and uint<64> types via IEEE 754 interpretation and new operators.

02

Reactive IO spaces track value extents and remap only on writes, improving performance for read-intensive programs.

03

Libpoke API changes aim for future ABI stability and thread-safety, though global state remains for now.

THE READ

What the cluster adds up to.

ORIGINAL ANALYSIS

GNU poke 5.0 extends its domain-specific language with floating-point operations on 32-bit and 64-bit unsigned integers. The new operators (.+.-.*./, etc.) interpret these types as single- and double-precision IEEE 754 values, enabling arithmetic directly on binary data without manual bit manipulation. This reduces boilerplate for engineers working with floating-point fields in file formats, firmware, or network protocols. The feature is limited to uint types; other numeric types remain unsupported for floating-point operations.

The reactive IO spaces feature addresses a performance bottleneck in read-heavy workflows. Previously, poke would remap values from IO spaces on every access, even if the underlying data had not changed. The new system tracks the extent of mapped values and only remaps when a write occurs within that range. This optimization is most beneficial for scripts that repeatedly read the same binary regions, such as those parsing headers or metadata. Write-heavy or random-access patterns see less improvement.

Libpoke’s API changes signal a shift toward long-term stability. The dynamic shared object version is bumped to 2.0.0, with a commitment to avoid breaking ABI changes. Public APIs now accept `pk_compiler` or `pk_val` parameters, a first step toward removing global state and enabling multiple libpoke instances per process. Thread-safety is not yet achieved, but the changes lay groundwork for concurrent use. Engineers integrating libpoke into larger tools should expect a more stable interface but may need to refactor code to pass compiler or value objects explicitly.

The release also includes quality-of-life improvements for binary assembly and debugging. The reintroduction of `IOS_F_TRUNCATE` allows starting with an empty file when constructing binaries from scratch, simplifying build scripts. Pickles (domain-specific libraries) for `ustar` and `time` formats gain new methods and fixes, improving accuracy for archive and timestamp handling. MinGW support remains incomplete, limiting cross-platform use for Windows-native workflows. Documentation corrections reflect community feedback, improving usability for new users.

Written by elseif from the cluster below · checked for specifics the sources never contained

THE CLUSTER

Same story, 1 feed.

ORDERED BY FIRST SEEN
LWN.net GNU poke 5.0 released Open ↗