Jamie Balfour

Welcome to my personal website.

Find out more about me, my personal projects, reviews, courses and much more here.

ZPE 1.14.8 changes so far and new releases

The changelog for ZPE 1.14.8 is looking quite big, and that's because this version itself is huge in ZPE's story.

At the same time, I'd also like to mention that the Zenith Parsing Engine version 6 has been released today as well - you can download this early, ahead of the release of ZPE 1.14.8, which will come on the 1st of August. Version 6 continues to bundle the legacy version 4 (deprecated last year) and version 5 (recently deprecated) parsers. This will be the last version to bundle version 4 of the parser - any old programs using it will now need to move to version 5, or better, version 6 (although both versions break compatibility with version 4 and with each other).

In addition, I've released the YASS AST whitepapers on my website today. There are several ways to access these: first, go to the documentation section of ZPE under Projects here. Alternatively, you can download the PDF from the Download Center on my website.

01.07.2026
The ZPE Console now has a new look.
Due to the update to BalfLaf, the window resizes naturally.
Fixed an issue in which the macOS Menu Bar would not allow clicking on items.

02.07.2026
Improved the Windows and Unix installers.

04.07.2026
Fixed an issue in BalfLaf that caused the file editor to scroll slowly in Details view.

08.07.2026
Major performance improvements in LAMEX3.
Added a guard for setting properties, if -k is left empty nothing will happen.
Added a guard for setting properties, if the the key does not exist, nothing will happen and an error will be printed.
ZPEOrderedAssociativeArray is now called ZPEOrderedMap.
Added the new [=>...] syntax for representing ordered maps.

13.07.2026
Improved the speed of calls to the built-in functions.

16.07.2026
Assert only now runs in functions with test in front and only run in debug. E.g. test function() { assert(3 > $v); }.

17.07.2026
Added the compare method to the Image object.
Added the compare_files predefined function.

18.07.2026
Added the is_native image module method to the ZPE module.
Added the to_boolean method to the Utilities module.
Updated the file_copy predefined function to copy files with their attributes.
Updated the directory_create predefined function to create directories recursively.
Improved compiler syntax errors to report the unexpected token that was found.
Fixed a compiler issue in which a closing brace followed by a function could be incorrectly treated as a scoped function declaration.
Fixed braced else-if chains consuming the closing braces of their enclosing loops and functions.
Fixed the compiler distinction between an else-if chain and a genuinely nested if statement inside an else block, preserving both braced and end-if syntax.
Redesigned ZPEC to store each compiled source in its own file within the ZPE zpec directory instead of rewriting one monolithic cache file.
Fixed logical negation mutating shared boolean values.
Fixed numeric negation mutating the original number.
Improved performance of the ZenithJSONParser, making it approximately 200% faster.

19.07.2026
Added support for prefix and postfix increment and decrement operations on object properties and indexed values.
Added the get_zpe_time method to the ZPE module, which returns the time elapsed since ZPE started.
Changed plugin loading so that plugins are loaded when imported rather than automatically during startup.
Changed the background update check so that it only starts for commands that require it.
Improved startup performance by avoiding repeated settings and lockdown configuration checks.
Improved block performance by reusing isolated block runtimes instead of creating a new runtime for every block.
Significantly improved structure and module performance by removing unnecessary temporary runtime creation.
Fixed structure and record lookup failing to terminate when a requested definition could not be found.
Improved numeric comparison performance by avoiding temporary BigDecimal allocations.
Reduced unnecessary numeric copying during increment, decrement and compound assignment operations.
Changed by-reference variable assignments to alias the underlying variable container directly.
Added support for bare return statements in both braced functions and end function syntax.
Fixed unterminated functions and other code blocks repeatedly compiling the end-of-file token until the Java heap was exhausted.
Improved compiler errors for unterminated functions, blocks and loops to report the unexpected end of file.

20.07.2026
Significantly improved compiler performance by reducing allocations and repeated work in the Zenith token stream.
Reduced compiler memory usage by retaining byte tokens while reconstructing word data only when required.
Replaced the compiler's continuously rebuilt program-so-far string with a lighter representation.

21.07.2026
Removed the legacy Native suffix from the predefined-function dispatcher.
Removed obsolete reflective constructor caching from predefined functions now that function instances are created during initialisation.
Changed runtime variable resolution so that unqualified variables inside object methods remain local and object properties require an explicit this accessor.
Improved object method performance by avoiding implicit parent-object variable lookups.
Fixed the standard library timer assigning its start time to a local variable instead of its object property.

22.07.2026
Ordered maps now use the braces for their syntax and are much cleaner: {=>} or {4 => "Four"}.

23.07.2026
Significantly improved compiler and runtime performance through constant folding, compiled expressions, integer variable slots, faster function invocation and loop execution.
Replaced legacy compiled-program and ZPEC serialisation with compact, versioned binary formats.
Improved startup performance by reducing repeated filesystem and path work and replacing JSON compiler constants with properties.
Improved object property, method, and nested accessor performance by reducing repeated lookups and returning values directly.
Added predicate arrow expressions to inline ranges, such as from 0 to 1000 : n => n % 2 == 0.
Improved predefined-function performance by resolving non-overwritable functions to cached integer identifiers.
Reduced predefined-function dispatch overhead using identifier-indexed command metadata while preserving plugin overrides.
Replaced Java serialisation for YASS Executable Pages with a compact, versioned byte format.
Added the Storage module with open and save methods for versioned, Java-serialisation-free ZPE value storage (one of my new favourite features!).

24.07.2026
Added nanosecond-precision runtime timing that excludes time spent waiting for user input, with compile and runtime completion messages controlled by SHOW_COMPLETE_MESSAGES.
Significantly improved startup performance by lazily creating predefined functions (once again), built-in modules, byte-code metadata and the background executor only when required.
Improved predefined-function dispatch using generated, reflection-free factories that remain compatible with native-image builds.
Improved launcher performance for run mode and directly supplied programs by using faster JVM startup settings and avoiding unnecessary initial heap allocation.
Greatly expanded YASS Unfold with structured module, structure and function reports, typed signatures, parent context and AST-based recognition of common searching, sorting, graph, sequence and cipher algorithms.
Moved update checks into the background and avoided unnecessary introductory output when running programs.
Reduced native-image reachability by excluding desktop-only built-in objects from ZPEX.
Comments

There are no comments on this page.

New comment

Comments are welcome and encouraged, including disagreement and critique. However, this is not a space for abuse. Disagreement is welcome; personal attacks, harassment, or hate will be removed instantly. This site reflects personal opinions, not universal truths. If you can’t distinguish between the two, this probably isn’t the place for you. The system temporarily stores IP addresses and browser user agents for the purposes of spam prevention, moderation, and safeguarding. This data is automatically removed after fourteen days. Your email address is stored so that replies can be sent to your email address.

Comments powered by BalfComment

Powered by DASH 2.0