# RETRO 2020.01 The 2020.1 release of RETRO brings many improvements. # Signed Releases Starting with 2020.1, each release will include a signing key to allow verification of the release. Additionally, each release will include the signing key to be used for the following release so that there is both reliable key rotation and a verifiable chain of trust across releases. # Tooling Updates The HTML export for the examples has been updated. It now averages a 7.4% decrease in conversion and a 26% decrease in exported file size. retro-locate(1) was added to search the `tags` file created by retro-tags(1). # Assembler The assembler is now provided by Rx. This was a technical challenge, but well worth the effort. By making it part of the kernel it has become possible to use assembly, rather than raw bytecode, in all parts of retro.forth. This is allowing for a significant amount of hand tuning to the standard library, reducing the memory footprint and improving performance overall. Some highlights of this: - Reduced the assembler size from 661 cells to 109 cells - No increase to the size of the reserved space for Rx - Renamed the `en`d instruction to `ha`lt - Added new prefixes for working with the assembler instead of requiring use `as{` and `}as`. - Deprecated `as{` and `}as` (these will be removed in the 2020.04 release) Example of the changes: (old) as{ 'liliad.. i #2 d #3 d 'lica.... i 'n:put r }as (new) \liliad.. `2 `3 \lica.... ^n:put # Standard Library I fixed all reported bugs. As noted previously, the assembler is now in the kernel. This allowed replacement of raw bytecode in the standard library with actual assembly, aiding in readability and maintainability. The use of assembly to fine tune select words has allowed both size reduction and performance improvements. A few words have been deprecated due to lack of use and will be removed in the 2020.4 release: - prefix:" - " # Nga I reorganized the source tree. This separates the implementations by language and tries to keep things better structured. The Forth code for the I/O devices is now in a separate directory, allowing it to be more easily shared across implementations. Bugs related to the numeric range queries were fixed. The JavaScript implementation has seen a number of changes. Dead code was removed, the formatting was redone to ensure consistency, a framebuffer device was added, and performance was improved. The code now consists of multiple files, making editing easier, and the interface layout has been updated. Testing with the optional 64-bit cells has been completed and no issues were found. # Retro on Unix I added an `s:get-word`, removed some deprecated words, and updated the memory limits to reduce overall memory usage under the default configuration. # Documentation The documentation has been updated, adding in new examples, removing material that is no longer relevant, and several new sections were added. # Examples New examples: - HTTP GET via sockets - HTTP POST via sockets - enum - minimize (from Kiyoshi) - fifo queue Updated: - Gott example (from Kiyoshi)