Jamie Balfour

Welcome to my personal website.

Find out more about me, my personal projects, reviews, courses and much more here.

Official ZPE/YASS documentationZPE milestones

ZPE has grown through a series of changes that altered what the language could express, how the engine worked, or how people could build with it. This page records those turning points rather than every individual addition and fix. The What's new page provides release-by-release highlights, while the complete changelog preserves the detailed history.

Origins

Foghorn and BlackRabbit Script

2011–2012 · The predecessor to ZPE and YASS

ZPE's lineage begins with the project originally codenamed Foghorn. BlackRabbit and its BBMSIL-based scripting system allowed readable macro commands to control applications such as Painter Pro, Cobweb and Wonderword through C# and the .NET Framework. The BlackRabbit 2011 Editor could create, execute and debug scripts, and its July 2011 Platform Preview became Jamie Balfour's first major software milestone. The language grew from at least 50 commands and address lines in May 2011 to 100 by July 2012.

Functions and the first GUI

ZPE 1.2.01 · February 2015

User-defined functions and function calls changed the early engine from a sequence evaluator into a language capable of reusable behaviour. The same release also contained the first experimental graphical mode, beginning a second way of working with ZPE beyond the command line.

The Zenith Parsing Engine

ZPE 1.3.0 · May 2015

A complete redesign introduced the Zenith Parsing Engine, nested function calls, assignment from function calls, parameter passing and compilation. This was the point at which parsing became central to ZPE's identity.

The interactive interpreter

ZPE 1.3.1 onward

The early -i workflow made it possible to try YASS immediately without first building a complete script. It later became ZPE's dedicated interactive-interpreter mode in ZPE 1.8.2, retaining declarations and evolving into a much more capable REPL.

Language milestones

Real Math Mode, LAMP, LAME and LAME X2

1.3.5.63 · 1.4.3 · 1.7.1 · 1.12.3

Real Math Mode replaced arithmetic expressed through functions such as add() and subtract() with natural expressions. LAMP later unified mathematics and logic; LAME replaced it with a faster and more accurate evaluator; and LAME X2 delivered another major performance leap.

Structures, lambdas and objects

1.3.6.0 · 1.3.7.44 · 1.4.1

Structures introduced grouped state and behaviour. Lambdas then made functions assignable values, enabling callbacks and higher-order programming. Objects, member access, improved scoping and function chaining built on both ideas and permanently changed the way larger YASS programs were designed.

TYPO: three generations of typing

TYPO · 1.6.7 · TYPO 2 · 1.9.7 · TYPO 3 · 1.14.7

TYPO first brought runtime type checking to YASS. Its second generation was a ground-up redesign that completed strong typing and extended it throughout declarations and structures. TYPO 3 modernised the system again as part of ZPE 1.14.7's wider language and performance work.

Modules

1.13.4 and 1.13.5 · 2025

Modules gave YASS a dedicated boundary for organising reusable code. Static access, scoped constants and main functions separated from module ownership then completed the first version of the model.

Architecture and performance

Parser and compiler separation

ZPE 1.5.3 · February 2017

The parser was separated from the compiler and became the reusable ZenithParser project. It immediately became the basis of ZPE's own JSON implementation and established parsing as a powerful component in its own right. This release also marked the point at which performance became a defining, continuously measured concern.

Compiler and runtime separation

ZPE 1.7.1 · January 2019

Separating the compiler from the runtime clarified their responsibilities and made compilation substantially more efficient. Together with the arrival of LAME and a faster ZenithParser, it was one of ZPE's largest architectural and performance overhauls.

Everything becomes a ZPEType

ZPE 1.12.9 · August 2024

Values throughout ZPE Core and then the wider platform were unified as ZPEType values. Predefined functions returned them, native object methods accepted them and maps required them. This removed a major divide between Java-level values and the ZPE runtime model.

ZPEC

ZPE 1.12.12 · December 2024

The ZPE Performance Enhanced Cache used hashes to track edits and avoid unnecessary work. It became an active part of execution during the release and established another important layer of ZPE's performance architecture.

Development tools

The graphical editor grows up

GFX editor · 1.7.2 · Swing editor · 1.10.2 · Editor tools · 1.10.3

The GFX editor replaced the original Swing interface before ZPE later moved away from JavaFX and returned to a completely new Swing editor. Syntax highlighting, dark mode, code outlines, function tools, repository access and controllable execution turned it into a genuine development environment.

Debugging and breakpoints

Variable watching · 1.8.10 · Breakpoint debugger · 1.12.7

Debug mode first became a useful watch tool that reported variable changes, including changes in private functions. The later breakpoint system added runtime halts, source breakpoints, a watch window and dedicated debugger launch options in both the editor and console.

Transpilers

Language converters · 1.4.4.0 · AST transpilers · 1.12.5 · Editor integration · 1.12.6

Early support for external language converters eventually became a structured transpiler system. Passing the complete abstract syntax tree made new targets easier to build, and editor integration made transpilation directly accessible.

Platform and ecosystem

The web parser

ZPE 1.6.0 · May 2018

The -w web parser allowed web pages to contain executable YASS. Shared variables across page chunks, ZPE-HTML and the later YWP format grew from this first step into web-oriented execution.

ZEN Client and ZEN Server

Early client/server · 1.5.0 · ZEN platform · 1.8.1

The first client/server work made remote script execution possible. It later matured into ZEN Client and ZEN Server with a more stable protocol and public/private-key encryption, before gaining interactive, threaded and SSH-like file-management capabilities.

ZPE Online

ZPE 1.7.4 · March 2019

ZPE Online, codenamed Munro Top, introduced registration and cloud storage for ZPE programs. Public repositories, online includes and editor integration subsequently made sharing and retrieving code part of the platform.

ZPEKit

ZPE 1.8.7 · June 2020

ZPEKit became the supported public gateway to the compiler and other ZPE internals. It replaced ad-hoc public access with a deliberate embedding API that could evolve while protecting the runtime implementation.

ZPE PM and project compilation

ZPE 1.14.9 · September 2026

ZPE PM and project compilation moved ZPE towards complete application and project workflows, complementing modules, libraries and ZPE Online with a more coherent way to organise and build larger programs.

ZEQL and native database access

ZPE 1.14.9 · September 2026

ZEQL introduced a query language designed for ZPE, while native database drivers, prepared statements and database objects made data-backed YASS applications possible without relying on an external integration layer.

Comments

There are no comments on this page.

New comment

Comments are welcome and encouraged, including disagreement and critique. However, this is not a space for abuse. Disagreement is welcome; personal attacks, harassment, or hate will be removed instantly. This site reflects personal opinions, not universal truths. If you can’t distinguish between the two, this probably isn’t the place for you. The system temporarily stores IP addresses and browser user agents for the purposes of spam prevention, moderation, and safeguarding. This data is automatically removed after fourteen days. Your email address is stored so that replies can be sent to your email address.

Comments powered by BalfComment

Feedback 👍
Comments are sent via email to me.