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
- 220.127.116.11: Lyon
- 18.104.22.168: Lyon
- 1.4.2E: Tummel
- 1.4.2H: Experimental
- 1.4.3: Rannoch
- 22.214.171.124: Isla de Muerta
- 126.96.36.199: Isla de Muerta
- 1.4.4: Black Pearl
- 1.5.0: Black Pearl
- 188.8.131.52: 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
- 184.108.40.206: 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 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
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.
For the first time in however many years, I have been spending a lot of time on working on making ZPE talk to my website and web server. As a result, I have been working on making a shared community that will allow users to save their work to the cloud.
The cloud will be powered by my own website engine that allows the posting and getting of user contributed content. This will not only be very good for clients who would like to access scripts elsewhere, but it will also allow sharing of code.
This is no where near finished, but it's got some traction already. You can find out more here.
ZPE 1.7.3 which is another major update to ZPE, is available from today. Major changes include the way that arrays work in ZPE, along with ordered associative arrays. Binary, octal and hexadecimal values have changed (see the changelog to find out more), structures are now less like standard objects where values can be set on them (see the previous post) and there's now several new documentation styles (
Also the update changes the parse_json, parse_csv and parse_xml functions to json_decode, csv_decode and xml_decode and there is now a new csv_encode function.
Overall, the tweaks made should make development even simpler than before.
ZPE 1.7.3 now brings a big change to the way in which structures work in ZPE. Originally, objects were extensions to the design of structures but as time went on it actually became structures that were extensions to objects.
Now, the object has become such a major part of YASS that the language itself has become largely object oriented. As direct result, structures have formed a major part of the design with much of the language being developed to take advantage of them. Now, with ZPE 1.7.3, structures differ from objects for the first time.
structure tester $name = "" $dob = "1970-01-01" end structure $person = new tester() print($person->$name) $person->$test = 10
class keyword that can be used instead of structure.
There have also been significant changes to the standard library that is now available on ZULE too. This update to the library makes it no longer backward compatible with ZPE version 1.6.x and before but it makes it better for the newer versions.
Constants have existed in ZPE since 1.2.01 of BlackRabbit Script, and were actually added as one of the first defined features. They've always had one problem since the beginning. They were interpreted, not compiled. With ZPE 1.7.2 some 5 years later, constants are moved to the compiler where they should be. They no longer have a syntax of
#x = 10 but now require the
define keyword in front of them:
define Jamie = "Jamie Balfour" print(Jamie) print(Jamie & Jamie)
Further improvements will make the LAME evaluator faster than version 1.7.1's LAME evaluator that completely redesigned the way evaluation works.
Starting every post about ZPE with using something along the lines of "without a doubt, the best version" is something that's pretty tricky, but since each version of ZPE is incrementally better than the previous, it makes sense. However, as great as the latest fixes and additions are, I'm not going to start the post with this line - you be the judge of that.
Anyway, I'm happy to announce ZPE 1.7.1, Kasba Lake, is now available for download.
Kasba Lake brings a huge improvement to the ZenithParser that was a complete rewrite of the basics of the parser to make it faster and more flexible and functional. The new parser offers the ability to include bound characters, return whitespaces and much more. The ZenithParser also compiles CSV, JSON and XML much faster than before which can be useful to people who want a fast parser in the native language of Java. As well as that, the new ZenithParser allows the programmer to define custom whitespace. Overall, the new parser is 10% faster than before, all while being far more memory efficient too.
Kasba Lake also brings by reference variables! This is a useful feature that has existed for a long time but not been fully implemented until now. By reference allows methods to modify an original variable, not a copy.
1.7.1 is also monumental for development by changing the core of the compiler and interpreter. When ZPE started in 2015 it was developed as the Zenith Engine. Since then things have changed and not only has the parser become publicly available, but the Zenith Engine has some exposed methods. Well since that all changed, the Zenith Engine no longer exists as one thing. Instead there is a completely separate compiler and interpreter (or runtime). This is more efficient and the new version runs much faster as a result of this. In 2015 since ZPE was only some 5,000 lines of code, the single design was easy to manage too, but even since late 2017 ZPE has over 30,000 lines of code, making management of the compiler and runtime tough. I had always planned to separate them but never got round to it.
Another huge change is that of the new LAME or Logic And Math Evaluator that replaces the LAMP or Logic And Math Parser which now carries out both the operation of parser and evaluation in one go. This is up to 3x faster in tests I have run than the original LAMP that it replaces but is 100% accurate compared.
ZPE 1.7.1 also finally includes a web server. The ZPEWebServer is now ready for use and can act in the same way as PHP, performing very quickly. It's currently in the beta stages but all ZPE functions will work in it.
One last thing, ZPE 1.7.1 is about 15KB bigger than ZPE 1.7.0 because it has the original LAMP and the new LAME included. ZPE 1.7.1 can be seen as a hybrid between LAMP and LAME. LAMP will disappear in the near future and is now considered deprecated. You can currently use the LAMP parser if you wish by adding a setting to the properties file called
use_lamp and setting it to
true (ensure you lowercase both options).
The new version of ZPE is available at my Download Center.
It's about time. ZPE has finally has a web server. A few years ago I added a communication server to ZPE (I think it was added in version 1.5.x) that allowed two or more ZPE programs to communicate using XML requests. It was great and it was reasonably fast.
But since then, ZPE has become so fast that I decided to write a server. This server uses ZPE as the main syntax for everything and because it's parser has been improved so much it's fast (maybe not as fast as PHP or C based applications, but it's good overall).
<!doctype html> <html> <head> <title>Test ZPE</title> </head> <body> This is <?zpe print("Jamie") zpe ?> here. <?zpe for($i = 0; $i < 100; $i++) print("<p>Hello " & $i & "</p>") end for zpe ?> </body> </html>
ZPE has always been aiming to get to the point of doing this, since I consider myself more a web developer than software developer nowadays, I wanted to get something like this.
ZPE's main advantage is it's library of features, plus the ability to write extremely fast functions into the language and it's already existing standard library.
To be clear version 1.6.x added the web parser to ZPE (the -w ZAC), but it wasn't fast enough for me until I updated the parser to version 1.3.