To use this website fully, you first need to accept the use of cookies. By agreeing to the use of cookies you consent to the use of functional cookies. For more information read this page.

Jamie Balfour'sPersonal blog

I really wanted to simply outline what I thought of the latest Nintendo Direct, which blew my mind.

There were three staple elements that made this Nintendo Direct so amazing. Those three announcements were:

  • The Nintendo 64 games - I was over the moon to see a good old classic, Pokemon Stadium, is coming to the Nintendo Switch, and I was just as over the moon with the announcement of Pokemon Stadium 2, but I was even more over the moon with the announcement that Goldeneye was coming to the Switch also.
  • Pikmin 4 - I've enjoyed Pikmin since 2002 when the first version came out - heck that feels a long time ago as I was still in primary school! Pikmin 3 was one of my favourite games of all time - it was just an awesome culmination of a strategy game that works so well with a controller.
  • Legend of Zelda - I've always loved Zelda since OoT was one of the first games I owned. I cannot wait for another Zelda game. Enough said.

Let's be clear from the start, it was obvious that the native build of ZPE was going to have better performance, but I wasn't entirely sure of how much better the performance was going to be until I compiled the latest version and tested it.

The native version is considerable faster when it processed loops. Here is an example of a 100,000 iteration loop running on the Java version first, then the native version. Both are running on an M1 Mac with the native version compiled for aarch64.

And with the ZPE Standard Library the comparison is made even clearer:

Whilst ZPE native is faster than the JRE ZPE, it's important to know that its feature set is not complete. I am working on improving this and the native binaries may become the future of ZPE, but at present, they have bugs (for example the sound features do not work).

Performance is now gaining on that of PHP with loops in particular.

After 5 years of development, the Zenith Parsing Engine is now being separated from the main ZPE application. This will make it easier to write compilers using it. As a result, I also intend to make separate JSON, XML and CSV compilers based on this. 

The reason for this is that I feel the Zenith Parsing Engine could be better utilised in other applications than including the whole package.

The very first version not to include the parser natively will be version 1.10.9, aka Lusty Lion.

ZPE is now available in native format!

Unlike previous operating-specific versions, these are not bundles but are actual binaries. They are compiled from the original JAR using GraalVM and native-image to improve performance. As a result, they are considerably larger files but also faster than the previous versions. A Linux version will also be available very soon. The JAR version will continue to be available and will remain as the primary version for those wanting the easiest of the installations.

As for Windows, I'm not sure when it will be available, since I only have one machine running Windows and I don't intend to turn it on to solely compile ZPE.

ZPE 1.10.8 is even faster than before! With new performance improvements and new features including TYPO v2.1 and typing within function declarations, ZPE 1.10.8 is set to be a big release. Data types have been added now to the stdLib to the functions that support it, but it became very apparent that multiple return types should be a bigger update than 1.10.7 was! 

How can we keep the performance high and yet add typing? Admittedly, every time a new feature is added, or a new check is required, performance takes a little dip. That is definitely true with anything. But performance can be made up elsewhere, and one of the areas where I have identified a performance gain is with the LAME evaluator and so I will continue to look into improving the LAME evaluator to make up for this.

Even without these improvements, or compiler optimisations, ZPE's standard library compiles and executes exceptionally fast, taking just 80ms to compile and run - that's very fast! 

Future plans for 1.10.8 also include auto prepending compiled files to make execution even faster. I will publish the next version of ZPE, which although will not be the finished version of ZPE 1.10.8, will allow you to test it out and I'll publish that today.

The ZPE/YASS compiler has featured support for typing of parameters for a long time, except it doesn't do anything. One could write something like the example below:

YASS
function test(number $s) {
  print($s)
}

test("Hello world")

And yet nothing will happen when it is given a string value instead of a number value. This is because, although it compiles correctly and is a well-formed ZPE expression, ZPE's runtime doesn't actually know what to do with it. 

Looking back, the way in which ZPE's function calls are made by placing parameters in an ordered set has barely changed and has stayed about the same since ZPE 1.3 when functions were properly introduced. 

ZPE also doesn't support return types. But it will very soon and the syntax has been decided (and included) already:

YASS
function test(number $s) : number {
  return $s + 5
}

Since the original method of generating parameters has been in ZPE and barely changed since 2015, it will be a rather big job to update this but it'll be worth it in the continuing move to making ZPE and YASS strongly typed. However, from ZPE 1.10.8 onwards, it will be possible to write programs that use strongly typed parameters and provide return types, they just will not do anything.

Simply put, I've got a new job at a place I have wanted to work since first working there in 2016! 

Continuing as a teacher or going back to the industry has been something I have thought about in the past but I have always come back to it because teaching is too darn enjoyable! Put it this way, I get real job satisfaction from what I do.

This is actually the second Tuesday in a row that I've had some good news! Last Tuesday I was celebrating passing my driving test and now it's a new job!

Anyway, since starting teaching back in 2015 and qualifying as a teacher in 2019, I have wanted to work at the school I now have a position at! Where I am at present has been great and I know I've left an impact on the school so I'm hoping to bring some of that enthusiasm and my skills to my new school! 

Recently I have found that some of the DIG tools out there are just too raw in their results and they've not been sanitised correctly, or provide too much information. So I've developed a new DIG tool on my website in the Dev Toolkit to help with this. You can find it below.

DIG Tool

Two years to the week after opening my jamiebalfour.scot domain for the first time I have decided it's time for a completely new domain.

My brother and I have been speaking about having one domain which we share but each have subdomains on, so without further ado, let me introduce the balfour.scot domain and the jamie.balfour.scot subdomain. jamiebalfour.scot will now redirect to my new domain automatically. This process will take a while to complete so you'll have to bear with me whilst this happens.

Further, my new email is just jamie@balfour.scot which is much cleaner.

As of today, you can download ZPE 1.10.4 from my website. This version includes passing by reference and by value and not just one or the other. Although there are not a ton of features in this version, the by reference and by value update is one of the most significant updates yet!

Powered by DASH 2.0 (beta)
Code previewClose