It's taken a while for me to finally get here, but ZPE is finally adding further optimisations for mathematical and logical operations.
For logic, one optimisation that has been highlighted as a potential area for improvement is the use of nested if statements and optimising them with else ifs instead.
For mathematics, it will include an optimisation that compiles static operations such as 1 + 5, but it will also look to improve the performance through the use of variables within mathematics.
Since ZPE has begun to include optimisations since ZPE 1.7.8, it has been a major focus and major shift to improve the performance of compiled scripts. I am also looking to improve the performance of web-based scripts and adding in the ability to compile them too.
LAME2 is also under development, designed to improve performance of LAME which itself improved performance over LAMP this time last year. LAME2 will also embed its own optimisations.
Also, I thought I'd take this opportunity to inform you of my recent use cases for ZPE since it now responds to webhooks much more efficiently. My most recent ZPE project has been on the home Raspberry Pi, which is set up to respond to web requests and manage them accordingly. We are now using ZPE within our smart home setup and I'm very happy to show people how it works. If you are interested, please contact me via email.
A major part of my childhood and the early years of the last decade was developing my own software applications. These include programs like Painter Pro, Wonderword, Data Project, Cobweb and more. I still have all the code for them on my system but haven't touched them for years. You see the problem is they were only designed for Windows machines, not Macs and Linux machines. This is because they were written in a combination of C# and VB.NET.
As a result, they've remained untouched for a long time. One of my last innovations in them was that of BlackRabbit Script - a language that could directly communicate with the applications it was running in. It was quickly replaced by the cross-platform, Java written ZPE.
ZPE has obviously been a much bigger hit and also a much bigger project, but it's also hundreds of times faster than BlackRabbit.
So I thought I would try something. What if I were to get ZPE in place of BlackRabbit in those older applications? Would it work? This is definitely something I'd like to try and will be trying tomorrow and will be reporting back on here.
In recent weeks I have been integrating ZPE into my smart home equipment, helping me set commands to perform certain things that would otherwise be very difficult.
One such feature of ZPE that I find both useful and efficient is that of shutting down and starting up my PC. This is all done from our smart home's Raspberry PI which sends out wake on LAN requests and ZPE shutdown requests. ZPE acts as the webserver to our house, too. The web server responds to webhooks from IFTTT and deals with them as appropriate, making the PI respond based on the hook.
ZPE 1.8.1 also includes proper encryption between the server and client instances. Both the ZPEClient and ZPEServer have been rewritten as well and are now the ZENClient and ZENServer. The improvements to these not only make them faster but more stable.
ZPE 1.8.1 will include a few more features and will hopefully release on Sunday.
ZPE is now coming up for it's five year mark, but it's actually stemmed from something I started 8 years ago.
In this article, I am looking back at ZPE through the years, asking myself questions.
Why did I start ZPE?
BlackRabbit Script, the predecessor to ZPE, was written only for use on Windows computers which were originally my own development base. It was written in C#.NET. When I learned a bit more about parsers and making them efficient I decided to rewrite the BlackRabbit Script parser in C#.NET using the new knowledge I had obtained. It received a decent performance gain. In 2015 I decided to give it a go building it from scratch as part of a university project. I gained huge performance improvements.
What was the biggest hurdle for ZPE?
There were two very big hurdles when developing ZPE. The first of those was the mathematical parser. I knew that writing this in an efficient manner would be difficult, however, not so difficult that I would need to rewrite the mathematical and logic parsers three times to get them right.
The second hurdle was that I wrote BlackRabbit Script using my own class library that I began writing when I was 13 (in my second year of high school). It contained a bunch of different tools that formed the basis for BlackRabbit Script and made it really easy to develop functions for it. Unfortunately, that class library is not available in Java and since ZPE was rewritten in Java I had to redevelop a bunch of those features for the basis of ZPE. When I moved from BRS to ZPE, BRS had around 100 built-in methods. ZPE only got this as of about version 1.5.x.
What is my favourite feature of ZPE?
The web parser and ZEN. ZEN is a bunch of networking features for ZPE that make it well worthwhile. It also allows ZPE to act as a web server and it's a rather efficient web parser. ZPE powers my webserver at home as it allows me to easily create plugins for it to automate things around the house.
What is coming up for ZPE?
There's a bunch of new performance improvements planned for ZPE that have been in the works since about version 1.5 that are finally going to get the time needed. Version 1.8 will start with version 1.8.1 (Quinn) which will develop the foundation for these improvements to go through.
There will also be improvements to the MySQL library over the next few months.
Primrose Lake, also known as version 1.7.12 will be the last version of version 1.7 to be released. Despite this, it's a huge update.
1.7.12 not only brings single line if statements using the if...then statements but it also brings performance improvements in two areas.
The first area for a performance improvement is the When-Is statement (aka the case statement). The improvement in performance comes from statements that are long in size but unfortunately smaller statements get a performance penalty. For performance gains statements need to be around about 6 or more options.
There have been a few parser improvements too.
But the most significant change is the way in which libraries are now imported. Any ZPE compiled library is no longer imported at startup and is now deferred. They are now imported only through the import command.
ZPE 1.7.12 is now available from my Download Center.
ZPE 1.8.x might still be over six months before it's initial release following the 1 minor version per year system, but I always like to have my codenames for the versions lined up. So here's the list:
- 1.8.1 - Quinn
- 1.8.2 - Hunter
- 1.8.3 - Reynolds
- 1.8.4 - Evershed
- 1.8.5 - Carter
- 1.8.6 - Younis
- 1.8.7 - Portman
- 1.8.8 - Myres
- 1.8.9 - James
- 1.8.10 - Kaplan
- 1.8.11 - North
- 1.8.12 - Levendis
- 1.8.13 - Bailey
- 1.8.14 - Reed
- 1.8.15 - Watts
- 1.8.16 - Pearce
Now try and tell me where these names come from.
ZPE 1.7.8 focuses on a bunch of things but it's main focus is on the compiler.
ZPE 1.7.8 has new compiler optimisations that take a bit of strain from the interpreter and put more on the much faster compiler. These changes do not affect interpreted programs but affect ones compiled to a file such as the standard library. One of the first things that was changed is that compiler now removed assertions from a compiled program (these are only needed when the program is tested). Secondly, mathematical operations are now optimised so that operations that would come first are moved to the first place in the operation. Finally, inherited structures now are created at compile time rather than runtime.
I'm hoping to have 1.7.8 out by the end of the month, but it will all depend on how much other work I end up having to do as I'm quite a busy web dev at the moment.
ZPE 1.7.6 is just around the corner. As part of this, the ZPE engine gets a new logo for each version as shown above.
ZPE 1.7.6 brings minor performance improvements, a few fixes, 64-bit number representation, negative exponents in numbers (I am surprised this isn't in it already) new object features and I am also introducing an updated GUI which now uses an output console window. I'm hoping it will be available within this month.
From the beginning of version 1.4.0 ZPE has taken codenames pretty seriously. Now it's a major thing as you'll see from version 1.7.x since each version goes by a different name. Originally, codenames were given when the parser changed underneath, whereas now it is actually if there are changes to any part of the whole package. Major releases are denoted by a change in codename. The following is a list of all codenames used to date as well as future planned versions.
The official ZPE codename roadmap to date is as follows.
- 1.4.0: Tummel
- 1.4.20: Tummel
- 1.4.0.23: Lyon
- 1.4.1.0: Lyon
- 1.4.2E: Tummel
- 1.4.2H: Experimental
- 1.4.3: Rannoch
- 1.4.3.10: Isla de Muerta
- 1.4.3.40: Isla de Muerta
- 1.4.4: Black Pearl
- 1.5.0: Black Pearl
- 1.5.0.1: Black Pearl
- 1.5.1: Black Pearl
- 1.5.2: Pelegosto
- 1.5.3: Isla Cruces
- 1.5.4: Port Royal
- 1.6.0: Severus
- 1.6.1: McGonagall
- 1.6.2: McGonagall
- 1.6.3: Dumbledore
- 1.6.4: Potter
- 1.6.5: Potter
- 1.6.6: Weasley
- 1.6.7: Waverley
- 1.6.8: Haymarket
- 1.6.8.1: Haymarket
- 1.7.0: Reindeer Lake
- 1.7.1: Kasba Lake
- 1.7.2: Nueltin Lake
- 1.7.3: Yathkyed Lake
- 1.7.4: Dubawnt Lake
- 1.7.5: MacKay Lake
- 1.7.6: Wollaston Lake
- 1.7.7: Nettilling Lake (planned)
- 1.7.8: Cedar Lake (planned)
- 1.7.9: Cree Lake (planned)
- 1.7.10: Dubawnt Lake (planned)
- 1.7.11: Baker Lake (planned)
- 1.7.12: Primrose Lake (planned)
- 1.7.13: Aberdeen Lake (planned)
Ever since objects were introduced in version 1.3.x they have been gaining more and more attention. They became a huge part of ZPE as the move towards making ZPE/YASS an object-oriented language became more and more clear with the need to be able to develop and teach simple object-oriented methodologies became more important.
ZPE 1.6.4 (August 2018) made a huge change that aligned structures and objects in a better way than before.
Now, with version 1.7.4, objects gain even more power. Previous versions of ZPE from 1.6.4 focused on using new object creation functions such as the generate_image
, generate_ui
and file_open_sequentially
functions, but now ZPE in-lines the creation of objects such that it becomes possible to use internally created ZPE structures in the same way that user-defined structures are used. By this I mean using the new keyword:
function main() $v = new ZPEImage() $v->display() end function
This is positively one of the most important syntax changes that have been made for a while. As a result of it, certain functions such as the above-mentioned ones have now been removed.
ZPE 1.7.4 will be out in the next few days, bringing this new feature amongst many other fantastic features that will make this another one of those amazing releases. Other features coming include a much better GUI and ZPE Online features, lazy/short-circuit evaluation, the removal of an old version 1.3.x hack that affected performance, better-designed structure and object generation, and a few new functions.