Jamie Balfour

Welcome to my personal website.

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

ZPE Programming Environment

ZPE Programming Environment

On this page I've decided to write about the different versions of ZPE and it's history.

Click one of the above version logos to be able to read about that version and the main things it did for ZPE and YASS.

Version 1.7

Version 1.7 was a significant update to the way that certain functions worked as it introduced by reference. 1.7 also introduced LAME - the much faster and efficient logical and mathematical evaluator that improved on LAMP. It also added short circuit evaluation which led to huge performance increases.

1.7 was also the first version to include a new JavaFX powered editor, known then as the GFX editor. It also introduced the web server into ZPE (now removed) that eventually spawned Velocity Web Server.

1.7.4 was the first version to include ZPE Online. This was a big update that has become a very useful way of storing code from the editor.

ZPE 1.7.5 also changed the whole way in which data types were stored, with things like images no longer being native but being built using objects. The object syntax was a huge shift from the old paradigm.

Version 1.8

Version 1.8 was very signficant in improving many features, initially focusing on adding networking capabilities to ZPE and YASS.

It also brought across indexed ranges as they are referred to as in YASS, .e.g $x[1:5], negative indexes, brought Velocity Web Server support, introduced ZPEKit, encryption on password protected programs, negative exponents, added deeper ZPE Online support, brought Linux-like commands to the ZENServer and ZENClient, moves to the new paradigm of everything is a function and completed the reference data types update.

As well as that, ZPE 1.8 brought major performance upgrades over 1.7.

Version 1.9

Version 1.9 was slow to begin with, mainly with just bug fixes, but it did start off by adding one of my favourite features - the match statement.

It also brought the important *=, /= and ^= operators, and the unique IDs that ZPE can set to help with both encryption and identification.

But it is without any doubt that the biggest update that ZPE 1.9.x brought was to variables. This started off with the use of variable names without a bound $ sign in front of them! Using the let keyword, variables can be defined without a $ sign. Amazing.

Later on ZPE introduced TYPO v2, a much faster and efficient means of type checking which no longer relies on the compiler but on the runtime.

ZPE 1.9 also brought the string reference type, meaning that strings can be passed by reference and can have their values changed using reference functions (e.g. $s.append("a")).

ZPE 1.9 also brought many performance improvements and changes to the GUI mode.

Version 1.10

Version 1.10 debuted in early 2022 bringing in several features that have been on the list of things needing done such as the ability to change the update path, including code from ZPE Online and a fix to the beep predefined function.

As JavaFX became a secondary requirement needed to run ZPE however, I needed to move away from a JavaFX interface. The new Swing interface is much better and features some really powerful new features, including a much better console and finally, syntax highlighting and line numbers.

Version 1.10 did however, also remove the UIBuilder object, which currently has not become a separate plugin (this is due, in part, to the fact that the underlying plugin system of ZPE is broken).

Finally, ZPE 1.10's golden egg is the introduction of by reference parameter passing and assignment.

Version 1.11

The first version of ZPE 1.11 was released 22nd of January 2023 and brought type casting to ZPE.

ZPE 1.11 cannot be forgotten for it's introduction of static reference methods in objects that make ZPE considerably faster than before.

But 1.11's biggest feature was the introduction of $-unbound variables (known simply as unbound variables in ZPE) meaning you can declare a variable using just x = 10.

One of the most useful additions by ZPE 1.11 is the introduction of the empty keyword, allowing the program to check if collections such as strings, lists and maps are empty. Another useful feature, specifically related to lists was the introduction of the map, filter and reduce reference functions for lists, similar to the JavaScript versions of said functions.

Another huge feature that came to ZPE in version 1.11.10 was YASS Unfold which can explain what a program is doing using it's syntax. I use this feature a lot when I'm explaining code on my website as it can export HTML as well.

Version 1.12

The first version of ZPE 1.12 made changes that laid out the plan for the rest of ZPE 1.12.

ZPE 1.12.3 has been one of the biggest updates to ZPE since it came about. ZPE 1.12.3 introduced LAME X2 which offers up to 4 times the performance compared with the original LAME.

ZPE 1.12.4 also introduced the is_set and unset keywords, making both actions faster. And ZPE 1.12.5 added the const keyword which allows easier declaration of constants, the iteration of object properties and made huge improvements to the transpiler system. I also started to develop the ZenPy transpiler for the Python programming language.

ZPE 1.12.6 changed the plugin interface and made it much better than what was already in place. It also added support for some new variable identifiers such as $count, $length, $record and $default, moved function traversal to a static job and added a new application icon on macOS.

July of 2024 saw the release of 1.12.7 which changed the way imported libraries were handled and brought about bubbling interrupts. These bubbles paved the way to better error handling and the addition of breakpoints.

ZPE 1.12.8 also introduced namespaces that make organising code much easier.