Jamie Balfour

Welcome to my personal website.

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

Jamie Balfour'sPersonal blog

Jamie Balfour'sPersonal 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 ZPE 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.

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 a 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 websites 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.

Version 1.5.5! Wow! 

I cannot believe we are now in June and ZPE version 1.5.5 is now under development. So in this post, I'm going to discuss some of the new core functionalities that will be coming (hopefully) to ZPE 1.5.5 at the end of June 2017.

Serial communication

Yes! Finally! After all these versions I have finally decided that it was time to add this feature that has existed in the .NET BlackRabbit Script since the very beginning. It has been very difficult to get to a point where I can say that I know how to do it because for some reason it has been very difficult to get here. Anyway, despite the issues, I may have found a solution that would allow me to implement this effectively in ZPE, providing a wrapper to a set of functions that would allow this communication to take place.

This has been a big priority for me since I have wanted to be able to send hex commands to my projector to switch it on and off (amongst many other things) with my Raspberry Pi and whilst the BlackRabbit Script Interpreter could do this, it was a Windows only program (ZPE is of course, thanks to the underlying Java, cross platform). 

Function aliases

Yep! Another feature requested from the beginning. So now I intend to add the compiler functionality of function aliases. It is planned to look like below:

ZenLang
function test()
    print("Hello world")
end function 

function hello aliases test

Continuing on the concept of function aliases, I intend to improve the way that compiled functions can aliases other functions very soon too. This feature has been requested from the very start.

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 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:

$v[3]

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.

ZPE
1.5.3
index
of
indexer
update
Powered by DASH 2.0