To use this website fully, you first need to accept the use of cookies. By agreeing to the use of cookies you consent to the use of functional cookies. For more information read this page.

Personal Blog

It's been a long time coming but I'm happy to announce that from today you will be able to download ZPE 1.6.0 from my website.

Main new features include:

  1. Fast compiler
  2. Better way of using constants
  3. Fixes to the argument system and simplification of arguments on command line
  4. --gfx mode


ZPE 1.6 will be out by the end of March and it will include a big update. 

The biggest change or addition rather is that of the new FX look and feel for the GUI. Currently, in alpha stages, I am currently looking to bring a better built-in editor that will use the JavaFX package. ZPE has been neglected for some time, and I aim to stop neglecting it over the next few months. 

Version 1.6 will also bring some performance improvements and bug fixes.

You'll be able to get it soon, and now that ZPE has been downloaded over 5,000 times I am happy to continue developing it.


Java Applets were once cool and they still kind of are, but they're just no longer relevant in today's world of fantastic web applications.

JavaScript has much replaced these old NPAPI based plugins and it's time that ZPE did the same.

So, as of version 1.6.0, the Java applet will no longer be included at all. This reduces the file size a tiny bit and it's not about that. It's about making the ZPE package much more modern.

zpe 1.6

Now that ZPE 2.0 is really progressing, I thought I'd let you know about how it is doing in this post. Note by the way, that ZPE 2.0 is my C++ implementation of ZPE.

To be honest, I haven't worked as hard as I could have on ZPE 2.0 as other things still take precedence such as websites I have been working on. However, ZPE 2.0 got a bit of work last night that adds several features:

  1. If statements (no conditions yet, but if, else and end if)
  2. Tree generator view (one of the first modes added to ZPE 1.2 because it makes it easy to debug the code)
  3. Memory management tools

What will need to come next is a bit of interpreter stuff. To be honest this is where things get more complicated and I will likely need to take a bit longer than before to build it.


After a ton of hard work and lots of relearning, ZPE 2.0.0 is now finally getting there! I'm proud to say that I have been able to rewrite the ZPE Parser and the YASS byte code system now also works with it. 

Pointers have been the difficult thing for me to master at first since I'm used to really high level scripting languages, but by the end of next week I aim to have all sorts of features added.

ZPE may now be used to power some of my website if I can make it efficient enough. More than 30 hours have gone in since two days ago.

Now I need to decide if I want to pull the original ZPE and replace it. 🤔

Today I'm very happy to announce immediate availability of ZPE 1.5.4. This long awaited update brings a ton of performance improvements and new features including:

  • Switch statements - a new feature to ZPE is the alternate way of writing a when-is statement is the standard switch statement (or case statement). This has been developed to be something of an aliase for the when-is statement, so it will compile to the same op code and will operate the same way etc.
  • Server based ZPE improvements - the server based ZPE will now create thread children that will handle requests. This is a very powerful and useful feature that will allow ZPE to operate much more efficiently on multiple requests at once.
  • Constant tracking - the compiler will now no longer permit constant duplication or reassignment and will halt when it finds this, saving on interpreter time.
  • New object declaration (finally) - in a move towards a more JavaScript syntax for object definition, objects are now declarable within braces as { name : "Jamie Balfour", color : "Orange" }. This new move makes it faster to declare objects, as well as making it tidier.

As part of the next version of ZPE, to be released at the end of May, 1.5.4 will include a new XML parser which will be similar to the JSON parser and CSV parser.

This new parser will be available to both Java and ZPE users. The new version also improves the efficiency of the ZPE parser and brings it up to version 1.1 after a big change was brought to it.

The new XML parser will generate a list of elements which themselves are associative arrays. ZPE 1.5.4 also aims to improve the way that associative arrays and lists work, making them more similar in syntax and provides a new object syntax.

ZPE 1.5.4 seems to be the fastest version to date, compilation is done faster than ever, parsing is done quicker than ever and the interpreter also received a little boost recently. 

Also, 1.5.4, like 1.5.3, is part of the Port Royal collection of versions, so nothing will change there (what this means is that the syntax is identical for all ZPE installations).


Version 1.5.3 will now change the way that the break function works. In fact, it will no longer be a function at all, since a function implies it has a return value (and functions that return nothing will return void). Break has always been a special function, mainly because of it's purpose, but also because of the fact that it cannot ever return anything, just like the return function did before it became a staple part of the compiler.

Break has followed suit in the step to promote it from being an interpreted function to a compiled keyword, just as return did back some time ago. Not only did this improve the speed at which return was processed, but it also made it even more difficult to overwrite it. 

My question to myself is now, when will version 1.5.3 stop getting updates and when will I actually release it? Well, the answer to that is that I aim to make this a perfect distribution, fixing all bugs that exist currently and adding as many of the promised features as I can. I anticipate the start of April 2017 for this update to be launched on my website, but until then you can always try out the unstable beta versions from the link on the page.

Also, as part of the update and refactoring of the Zenith Engine, I have made version 1.5.3 a lot smaller and a lot faster. I may explain where the performance gains come from in a blog post, but probably not. Overall, 1.5.3 is one of the biggest updates to ZPE since version 1.5. It also ditches GSON in favour of JBSON.
I have released version 1.5.3 on to my website for download. I have also begun work on version 1.5.4 which aims to change quite a lot of the underlying data structures.

After a long thought process, I am very happy to finally be bringing the index accessor to ZPE A lot of languages that ZPE aspires to transpile to also have this, so it's fairly important.

It looks like this:


Currently assignment to this is not possible, but it will be soon. I am going to deprecate the list_get_at_index and the equivalent for associative arrays. 

Also in the latest vesion of ZPE is the early stages of Typo - ZPEs runtime type checker (it will also be in compile time too) and the new feature which will allow you to produce web pages utilising ZPE. 

The latter feature is more of a side project than a major one.

Also, I'm glad to say in the next few hours I will continue the ZPE refactor that takes a lot of ZPE 1.3 out of the code. The big refactor has minimised code from 15,000 lines to just under 9,000 overall, but the structure is miles better.

I also hate to say it, but ZPE is running low on byte codes, with only 160 left at the present point in time (meaning that 96 have been used). 20 more of these are reserved for special purposes.


So you already know about some of the new features of ZPE 1.5.3, including the new free to use parser that can be part of any project. But there's also another change coming.

ZPE 1.5.3 is a bit of a minor update in terms of features, but it brings in a sweeping change. 

I'm talking about a change that brings a change to something from version 1.3.2. One of the first features added to ZPE way back when it kicked off again in 2015 was associative arrays - almost identical to PHP's associative arrays. They were different to lists in the sense that they mapped values. Well, whilst version 1.5.3 is not a huge update, the update brings a huge change to associative arrays.

You declare an associative array as below:

$assoc = {50 => 10, 10 => 50}

But now, the same associative array is written very similarly to a mix between that and defining a list:

$assoc = [50 => 10, 10 => 50]

The update's purpose is to inline both associative arrays and lists and to free up the curly brace.

Also, I am changing the accessor symbol from => to -> for objects.