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.
Structures were always blueprints or templates of objects that were yet to be defined, much like in an E-R diagram and entity is a description of a record that has yet to be implemented. But structure instances always allowed you to add properties like in JavaScript which in my opinion was plain silly.
So:
structure tester $name = "" $dob = "1970-01-01" end structure $person = new tester() print($person->$name) $person->$test = 10
This was valid in ZPE as it is in JavaScript where a previously undefined property (in this case $test) can be defined at runtime. Not any longer. ZPE 1.7.3 changes this an enforces the structure on the user. Another major update that comes with this is the new 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.
I remember all the hype when Intel announced it's Itanium processor. I was about 10 years old when I heard that the world was now moving from what seemed like the pretty new 32-bit architecture to a new 64-bit future. I remember reading about it in some magazine I used to read when I was young and finding all the details. It seemed like Itanium was it! Intel's Itanium which had been announced to be coming from the work of both HP and Intel for use in the server market seemed to be that future the computing industry needed. Except it wasn't.
But latterly, and even when I really got into computing science when I was about 13 years old, Itanium has struggled. Intel's main competition, AMD, released the AMD-64 instruction set that we all use today all the way back in 2000. It took Intel a few years to agree to follow the same instruction set since it was backward compatible. There was no doubt this was the heyday for AMD - a time when Intel was trying to copy everything AMD did.
Intel has focused on the Xeon range for their enterprise market and Itanium has suffered as a result.
But now Intel has announced the end of the line for Itanium, and rightly so. It was something that should have gone a long time ago. On the 30th January of this year, Intel officially decided to pull the plug (or at least begin to pull the plug). There is more here.
This blog post was inspired by a blog post by another teacher I know.
I'm getting to the end of my training now and nearly about to get out into the real world again (boy have I missed it). In less than 2 and a half months I will be finished with my teacher training and hopefully having passed, getting ready for my NQT year.
I'm enjoying it all again, maybe because I'm better at it where I am now, or maybe it's just the incredible amount of support I've been getting the last few days (my previous mentor is the one to thank for hardening me up and helping me get here). I'm more confident that I can teach as well and my last crit shows that since I had it last Tuesday and I think it was a really great lesson. Since then my lessons have been going well and I'm being reflective where I can to ensure that I improve where I need to.
Energy-wise I'm okay during the day but not finding the time at home to get the work I want to get done actually done. Though I am feeling it better here since most nights I don't feel I need to do any more work as I've done it all during the day.
I will report back to my followers in a few week's time!
You can now download the latest version of my HAGGIS parser as a Java JAR from my personal Dropbox. This will also be a 'nightly' update in that all changes will come to this version since this is not the finished version. This JAR file also contains the latest version of ZPE, which is also nightly.
I hope some of you enjoy using it and that it is of some use to you.
A few nights ago I tweeted that I had begun work on a new HAGGIS parser. This parser is actually a YASS transpiler that transpiles from SQA HAGGIS to my own YASS before interpreting and running the YASS code.
The parser will not only check if the code is valid, but it will also explain what is wrong with it. It will also be able to run it.
Whilst this is still experimental or incomplete, I have uploaded ZPE 1.7.2 with the new HAGGIS parser on to my server.
I hope people find this useful!
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.
As a vegetarian and someone who cares for animals, I'm always concerned about the alarming amount of animals that are consumed by humans every day. I'm not a crazy in-your-face vegetarian and I ask everyone in the world to stop now and become vegetarian, but I do have morals that relate to the treatment of animals.
A recent protest carried out in Australia, which although I do not condone, I believe agrees partially with what I think. The protest involved them barbecuing a dog on the street and asking "If you wouldn't eat a dog, why eat a lamb?" which in my personal opinion is the reason to switch to vegetarianism. I asked myself this question when I ate meat, why do some rabbits deserve to be eaten whilst others do not and get kept as pets? (I had at the time and still have pet rabbits).
Anyway, there was one thing that was said that stuck out from all the rest:
As humans, we instinctively feel compassion and empathy for animals, but we're taught that it's OK to enslave and eat some of them, without a second thought as to who they are as individuals.
It's about time. ZPE 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> This is here.
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.
I'm extremely happy to announce after a lot of thinking and redesigning, ZenithParser 1.3 is now included in version 1.7.1 of ZPE and later. The new version of the parsing engine offers much faster and more efficient parser than ever before.
The results are in:
ZPE 1.7.1 with the old parser (version 1.2.1):
real 0m0.668s
user 0m1.390s
sys 0m0.152s
Compared with ZPE 1.7.1 with the new parser (version 1.3.0):
real 0m0.595s
user 0m1.270s
sys 0m0.136s
This may only be a 10% increase overall, but in reality this is big news. Minor improvements for the standard library run and compile but for interpreting JSON, CSV and XML files amongst other file types, this is an incredible amount of speed.
As mentioned over and over, the parser is by far the fastest part of the compilation process since the ZenithParser has been the main focus for years within ZPE.
Another major improvement in the ZenithParser 1.3 is it's ability to handle whitespace better and allow the compiler to re-add whitespace later. This has had incredible use within the ZPE web parser.