ZPE version 1.8.6 (Younis) is a big update.
One of the biggest changes to it is the deprecation of the built-in web server. This has been deprecated in favour of a much more streamlined way of working.
The reason for this. Well, there are a few reasons. The first is that it contradicts the Velocity Web Server (VWS) that I'm building. The ZPE web server was always slow compared with my new VWS which is designed to be compatible with a variety of languages and environments. VWS works with ZPE through what's called a Velocity Module hook now anyway.
For now the server remains in place but in the next few weeks I plan to remove it altogether and perhaps reimplement it using the basis of VWS.
I was reading through parts of my blog looking for one specific post and came across one of my favourite posts on my website. I'm referring to this one here. This post discussed a form of code optimisation that can be carried out before compilation in some languages including ZPE/YASS.
Specifically, this post discussed performance differences between using variables where a length value (in this case the number of items in a list) is stored in a variable versus inline function calls to check the size of that list each iteration of the loop. It is understandable that the former would have lower latency and indeed lower memory consumption.
After reading the post again, I thought I'd try it with the newest version of ZPE. At first, my thoughts were it was going to be slower because of the compilation time being increased to allow for compiler optimisation that the new ZPE offers. I was wrong.
ZPE 1.8.5 is considerably faster on both for loops provided in the example, performing only slightly better in the user optimised version.
Results for the first for loop in ZPE 1.8.5 were:
Compared with 2016's 1.4.2E, which got:
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.