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 Changelog

Official ZPE/YASS documentationZPE Changelog

Since version 1.2.01, there have been 1177 changes recorded in this changelog. From this page you can read about any version number and the changes it brought to ZPE. Click on a zone below to find out more:

Version 1.12.x

Version 1.12.5 (4 updates)
  1. Fixed an issue in the for...each loop that meant new changes didn't work
  2. Added support for $ unbound variables in for...each loops
  3. Undefined values can be written as either undefined or UNDEFINED to bring consistency with null values
  1. Added the const keyword, e.g. const x = 10
Version 1.12.4 (13 updates)
  1. The is_set and unset predefined functions are no longer functions but compiler keywords
  2. Further to the above, the NO_PARSE_MODE (aka, special functions) have been removed, which should increase performance
  1. Fixed the aliases feature, e.g. function x aliases print
  1. New escape sequences \n, \r, \t are now supported in strings and inline documents
  2. New features have been added to the Help menu in the editor.
  3. The Help menu's function information is now responsive to the function selected, rather than displaying a messy list of all functions
  1. Not directly ZPE, but the Zenith Parsing Engine has been changed to better support escape characters
  1. Improved the installer application on Linux and macOS.
  2. jLine is now bundled with the JAR file. This also means that compiling to native works again :)
  1. For...To now supports mathematical expressions in the maximum (e.g. for $i = 0 to $x + 3)
  1. Line history in interactive interpreter is now saved and loaded
  1. Added the jLine tool to interactive interpreter to allow line history to be accessed within the interactive interpreter (no need for rlWrap)
  1. Made minor changes in LAME X2 that would improve readability of code and performance of LAME
Version 1.12.3 (2 updates)
  1. LAME X2 is now ready and available in the latest version of ZPE.
  1. Fixed a bug in which ZPE would fail to start under certain circumstances down to a permission level setting not being set
Version 1.12.1 (3 updates)
  1. The Undefined and UndefinedPath have been changed to static variables
  2. It was also noticed whilst testing this that the undefined function doesn't work due to undefined being a keyword, so the function was removed
  3. Creation of the new in-order LAME expression evaluator - this is not on live tracks yet

Version 1.11.x

Version 1.11.12 (7 updates)
  1. The array_get_data_type function is now the list_get_data_type function and now works on lists as well
  2. The array_get_data_type function now aliases the list_get_data_type function
  3. Minor changes around ZPE such as using isEmpty rather than length == 0
  4. Added the mixed type byte code to string conversion
  5. Added the string_compare function, which is useful for sorting strings
  6. Added the -h changes option to allow easy access to the changelog for ZPE
  1. Fixed an issue with undo not working in the editor, causing the program to crash
Version 1.11.11 (3 updates)
  1. Added the list reference functions LIST.map, LIST.filter and LIST.reduce based on the JavaScript functions
  1. The changelog is now bundled and read locally rather than from jamiebalfour.scot.
  2. Better handling of editor start issues on headless machines
Version 1.11.10 (9 updates)
  1. The build version and time are now stored in a text file in the program to make building quicker
  1. Further improved the English syntax of the YASS Unfold feature
  2. Added support for exporting to HTML in YASS Unfold
  1. The new FunctionReference object is used to encapsulate method when assigning to a function's reference, $x = print, meaning that it can be used to reference predefined-functions as well as user-defined function
  2. The FunctionReference object exposes a get_description reference function that will read the manual description for a predefined function or the @doc directive for a user-defined function
  3. The FunctionReference object also exposes a describe_code reference function that will use YASS Unfold to explain the code of the function.
  4. Added the unfold static method to ZPEKit, allowing external access to YASS Unfold.
  1. For, For To, While, Assignment, Logical Conditions, Variables, Function definitions, Function calls have all been added to YASS Unfold
  1. Added the new YASS Unfold feature.
Version 1.11.9 (16 updates)
  1. Built the CodeEditorView which encapsulates both the line number editor and the syntax highlighter into one reusable component.
  2. Fixed the list_insert_at_index function as it was incorrectly referenced as list_insert_at and would not run as a result
  3. Fixed an issue in which editors not run from the command line would have no function information
  4. Added the -h log feature to access and view the ZPE Log.
  1. Added the empty keyword, which can be used to check if a list, map, string or object is empty (i.e contains no elements, keys, substrings or properties, respectively)
  2. Compiler directives can be written into the code using @directive. These are removed once this program is compiled.
  3. Added the compiler directive prevent_auto_include.
  1. Removed the errors that appear when a function is not found prior to checking aliases. This was meant as a temporary feature.
  2. Deeper ZPEKit integration and removal of more public methods across the system
  1. Function reference can now be used to assign a function's code to a variable by not using a function call (i.e. including brackets after the name)
    function m(){print("Hi")}
    $x = m
  2. Build version automatically updates when the program is compiled
  3. Build version in the JSON --version is now build rather than build_version
  1. Further improvements to static underlying methods mean that the ZPE takes less memory and starts faster
  1. Added the list_is_empty function to check if a list is empty (since removed)
Version 1.11.8 (7 updates)
  1. Objects are now named 'object' rather than 'Anonymous object' when they are used inline.
  2. Fixed an issue in the manual that meant that internal functions would not display data about them at all. This came from the move to static predefined functions.
  3. Added the ALLOW_UNBOUND_VARIABLES property that allows the definition of unbound (e.g x = 10) inline variable declaration
  1. Two lines of code added support for variable declaration similar to Python, x = 10
  2. After reconsidering the font menu, it has been condensed to only around a dozen useful fonts
  3. Switching to IntelliJ IDEA has allowed me to identify areas of improvement, so this version brings these
  4. Using 'short ifs' requires the USE_SHORT_IFS property to be used
Version 1.11.6 (1 updates)
  1. Huge performance improvements that make loading much faster due to the use of static code and reflection
Version 1.11.4 (15 updates)
  1. There is now a new group of functions called I/O. These functions have been moved from the Core group.
  1. Added a new startup option called SHOW_COMPILE_COMPLETE_MESSAGE which shows a message when compilation is done with the -r ZAC
  1. Added a minor fix to prevent double undo in the editor (removed accelerators from the menu items)
  1. Records can parameterised on construction, defining values for the record
  2. Real and integer data types are back as the number data type
  1. Changes to the record structure that mean that fields are accessed as $x.name = "Jamie" or print($x.name)
  1. Added union return types
    function foo(integer $bar) : real | integer
  1. Added the new inline iteration feature, e.g.
    print(from 5 to 1000)
    print(from 0 to 100 : function ($x) { return $x * 2 })
  2. Fixed an issue in which reference functions worked on a copy of a variable
  3. Added support for count in mathematical expressions e.g.
    $x = [0, 1, 2]
    $x.put($x[count($x) - 1] + 1)
Version 1.11.1 (5 updates)
  1. jANSI library bumped up to 2.1.0
  1. The first major update of the year brings type casting. Currently the main use for this is when a value needs to be stored in a typed variable: e.g.
    string $x = "10"
    integer $y = 20
    $y = cast($x, number)

Version 1.10.x

Version 1.10.12 (7 updates)
  1. The new global keyword has been added
  2. The global keyword can be applied to a function declaration within a function to push it to global
  3. Global variables now use the global keyword, rather than the function, leading to better performance
  4. The global function has now been completely removed
  1. Minor fix to the GUI that ensures that the user must be using Java 9 or above to use the GUI
  2. Fixed the issue in which Windows users had a bad looking editor
  1. Added the AutoGUI object
Version 1.10.11 (11 updates)
  1. Added support for short expressions in if statements e.g.
    $x > 10 and < 20
  1. Code must be validated before uploading to ZPE Online
  2. The auto_input function now recognises Boolean values true and false
  1. Added the int function as an alias to the value function
  1. Added the http_download function
  1. Fixed a weird issue in which a string containing a number would type as a number
  2. Errors are now displayed in red text in the GUI console
  1. Added the new Socket object, which allows for easy server socket and client socket communication
  2. Minor performance improvements using the FOR_TO byte-code instead of compiling into a FOR loop (requires re-compilation)
  3. Fixed an deprecation in which the ZPE compiler referred to itself as ZEN
Version 1.10.10 (4 updates)
  1. Improved the MQTT object
  2. Added the publish functionality to the MQTT object
  3. Added the UI builder object back into the ZPE Core
  1. Added the new MQTT object which will allow MQTT publish and subscribe functionality
Version 1.10.9 (4 updates)
  1. json_decode now accepts an optional boolean value which, if true, will mean that instead of using ZPEMaps the parser will return ZPEObjects
  2. Fixed the evaluate function for the new syntax requirements
  1. The Zenith Parsing Engine is now a separate module from the main ZPE package and will be maintained separately
  1. Changed the way in which the ZPE environment detects the install path
Version 1.10.8 (19 updates)
  1. Added the option_base_1 property allowing array access to start at 1
  1. Fixed an issue in which the csv_encode function did not return a ZPEString but return a string, causing a type error
  1. Fixed an issue in which objects would be downcast. For example from ZPEDateObject to a standard Object without properties
  1. Minor performance improvements
  1. When opening a compiled file, the password string is hidden as the user types it in
  1. Parameters now use ZPEVariables to represent their values
  2. Typing is now supported in parameters
  3. ZPE handles incorrectly assigned data to typed variables much better
  4. Fixed an issue in which ZPENumber typed values would not correctly return a result
  5. The ZPENumber type is now the ZPEInteger and ZPEReal types respectively
  6. Return types are now forced onto values on return, this means integers are cast to reals on return and vice versa
  1. Functions no longer accept parameters as objects but as ZPEVariables
  2. Infinite parameters can now be represented with the traditional triple dots (...) syntax and will be switched to this in the future
  1. Strong typing for function returns has been added using the syntax
    function testFunc() : number
  1. Added return types to functions, e.g.
    function test() {
    return 10
    } => number
Version 1.10.7 (13 updates)
  1. Added support for auto-prepending files to a ZPE program.
  1. Removed the -v ZAC and replaced it with the --version ZAC
  2. Added whether or not a function can be overwritten into the manual
  1. Added the XEN mode to ZPE, which will be used in the future for cron jobs
  1. The interactive interpreter has been moved from the YASS Runtime to it's own separate class
  2. The quick fire mode has had some UI changes
  1. -m has become -d mode again for debug mode.
  1. Added the is_symlink function to check if a file is indeed some form of junction or link
  2. Added the replace_symlink function to do a direct replacement of a symlink
  3. Added the create_symlink function to create a symlink
  4. Major overhaul to the run_at function, making it more efficient
  5. Added the run_in function
  6. shutdown, get_max_memory, and get_os_name have all been moved to System functions
Version 1.10.6 (5 updates)
  1. Fixes have been made to the http_post function
  2. ZPEMaps now have a stringify function which converts them into a URL encoded string
  1. The std_out function now only takes one parameter but works faster than the print function by asking the value to output itself
  1. Added the get_hostname function
  1. Added the timeout parameter to the ping function
Version 1.10.5 (4 updates)
  1. ZENServer can now be started from the GUI mode.
  1. Added in the new record structure, see https://www.jamiebalfour.scot/projects/zpe/documentation/data-types/record/
  1. Fixed an issue with when-is statements that prevented them from compiling multiple statements
  2. Added the -o ZAC that allows downloading from the ZPE Online public repository by it's public hash ID
Version 1.10.4 (7 updates)
  1. Changes have been made to the installer package that improve stability
  2. Added the --version ZAC
  1. Shutdown command no longer requires any arguments and by default carries out a shutdown
  1. Fixed an issue in which a ZEN Client would crash if the server responded that a command was not supported
  1. Made an improvement to by value performance
  1. Big update: the by reference feature is now available and usable with ZPETypes. $x = &$y
  2. Changed all associative array functions to map functions, including internal documentation
Version 1.10.3 (10 updates)
  1. Added the ability to GetFunctionNames to ZPEKit which compiles and returns all functions in a program
  2. Added the Create code outline feature to the GUI
  3. Fixed an issue in which ZULE libraries would be downloaded to the incorrect location
  1. Fixed an issue in which the compiler did not accept a function call in a for...to loop. e.g. for ($i = 0 to len($str))
  2. Added the ability to download files from the ZPE Online Public Repository from the editor
  3. Fixed an issue in which Fn keys (amongst others) would be picked up by the editor console
  1. Added the new dark mode to the editor
  2. Added the option to view the changelog from the editor
  3. New 'function machine' creator in the GUI editor
  1. Syntax highlighting is now a feature of the editor
Version 1.10.2 (10 updates)
  1. Huge changes to the GUI that make it more functional
  2. New additions to the UI
  1. The editor has been removed, as have all JavaFX features, and the editor has now moved entirely to Swing
  2. The GUI can now stop code that is running
  1. The ZPEHelperFunctions have moved to the jamiebalfour.zpe.core package
  1. Added the OpenJDK/JFX requirements to the class path
  2. ZPE now bundles the open JFX package - this makes ZPE 10x larger :(
  1. Beautification of data has been improved further, adding commas, quote marks for strings and more indentation
  2. Fixed an issue in the JSON encoder that now makes it more flexible
  1. The beep function is now faster and more responsive
Version 1.10.1 (6 updates)
  1. Added the list_compose function, which can help with quickly generating a list
  2. The UIBuilder no longer is bundled with ZPE. This will likely be a temporary change.
  1. Small performance improvements using cached files (not yet released)
  1. Fixed an issue which would close the socket after a put command in the ZENClient
  2. Completely redesigned the way in which the update check works
  1. Added the ZPE Online includes feature. Simply type: includes online {code} where {code} is the online code

Version 1.9.x

Version 1.9.13 (15 updates)
  1. Changed the way that documentation is 'bound' to fASTs
  2. Fixed an issue in the ZENServer that meant that when a file was put it disconnected from the client
  3. The ZENClient put command now accepts a second argument which is optional and can provide the file name for the file on the server
  4. Made it possible for external applications to run a ZPE Console and run code within it like the editor does
  1. Added the file_touch function to 'touch' a file and set its modification time
  2. Added the list_contains_all function which checks if list1 contains everything list2 contains
  3. Added the string_to_list function to split the string into a list of characters
  4. Added the copy_of function to make a pure copy of a value
  5. Added the rainbow effect to the format_string function
  6. The write function can now take an optional function parameter that allow a function to run after each character is written
  7. Changed the way that the exit function works in GUI mode
  8. Added the resize reference function to array data types
  9. Changed the way in which the write function works in the GUI editor console
  1. Added the new Map data type which supersedes the list data type for Maps
  2. Fixed an issue that prevented strings from being iterated correctly
Version 1.9.12 (8 updates)
  1. The get_type function is now just type and the alias type is now get_type
  2. Another fix has been made to ZULE
  1. Fixed the write function
  1. ZPE now retrieves compiler constants from the constants.json file in the install path
  2. Constants have now been moved to the RunningInstance meaning no duplication of constants
  1. Updated the counter function manual to reflect that it works on more than just strings
  1. Added the sign function which determines if a value is positive or negative
  1. Moved static runtime variables from the Main class to the RunningInstance class
Version 1.9.11 (3 updates)
  1. Further improved the GUI console performance and text input
  1. New GUI console allows text input
  1. Added the options to visit the ZPE Online website and public ZPE Online repository
Version 1.9.10 (15 updates)
  1. Added the optional decimal_places parameter to the round function
  2. Fixed an issue with input reading in GUI mode
  1. Fixed an issue with the interactive interpreter that came from the fix made a few days back
  1. Fixed an issue in which http_post did not return a string correctly
  2. Fixed an issue in which setting a boolean or numeric value to null would cause a memory exception
  1. Added the list_remove_all function
  1. Allows disabling of compiler includes using the properties file
  1. Added the .copy method to ZPELists
  2. Renamed the getc method of ZPELists to get_circular (this was a user-unfriendly name)
  1. String comparison has now been improved to allow $a < $b to evaluate which string comes first
  1. Changed the way in which ZPEStrings are assigned from variable to variable so that they copy the value and do not reference it. E.g. $a = "Hello" $a = $b
  2. Changed the null value works underneath the surface
  3. Further improved ZPEString comparison
  4. Fixed an issue in which the get_type function wouldn't return a comparable string
  5. An additional magic method for objects, _beautify, has been added, which allows ZPE to call it upon beautification
Version 1.9.9 (10 updates)
  1. Major comparison fixes make the runtime more stable and makes it easier to compare lists and arrays
  2. All associative array functions are now called map functions, with associative_array aliases
  3. All associative array functions now fall under the Maps category
  4. Updated the supports function to check all aliases as well as parent functions for support
  1. Add the associative_array_remove function
  2. Major fix to ZPEString that means that when inserted into a map or associative array it can now be found using its hash code
  3. Associative arrays no longer do any late conversion (this was a temporary fix) on ZPEString data types but perform full hashing checks on all operations
  4. Further improved comparison between data types, with lists and associative arrays now being comparable (lists require the same order to be the same)
  1. Fixed an issue in which the get_definition function would return an incomparable string
  2. Added the format_string function
Version 1.9.8 (4 updates)
  1. Added the help program to the interactive interpreter
  1. Added more information about why a login hasn't worked for ZPE Online
  2. Fixed a long standing issue with modular arithmetic
  1. Re-added support for internal/local structures within a function
Version 1.9.7 (10 updates)
  1. Structures can now have properties defined with a data type
  1. Fixed a long standing issue in which FAST values weren't copied correctly
  2. Fixed another issue in which scope of variables and functions wasn't copied correctly from prototype to instance
  1. Changes have been made to the assertion unit testing asserts true and asserts false now only take a parameter which is now compared to a true or false value respectively
  2. asserts equal and asserts nequal is now used to compare values. e.g. asserts equal (5 + 5, 5 * 2)
  3. asserts equal and asserts nequal now use LAME to evaluate equality
  4. Record structure has been removed as it is being redesigned
  5. Strong typing is finally complete in ZPE/YASS! TYPO has been redesigned from the ground up to give a much better typing system
  6. Variables can be declared with a type using declare x as string = "Hello", string x = "Hello", declare $x as string = "Hello", string $x = "Hello" or using any other means
  7. Fixed an issue within the Zenith Parsing Engine that prevented double values with an exponent from evaluating correctly
Version 1.9.6 (5 updates)
  1. Deeper support for non-$ bound variables
  2. Pre and post increment and pre and post decrement now support non-$ bound variables e.g. let x = 10 x-- print(x) let y = --x
  3. Fixed an issue in which increment assignment and decrement assignment values would not work
  4. The UPDATE_PATH property now allows the user to modify the path/URL to where to find updates
  1. Added the be keyword, e.g. let x be 10
Version 1.9.5 (14 updates)
  1. Added the get_remote_ip_address command to retrieve the IP address on the public Internet
  1. Added the set_id to all UI objects
  1. Changed the way in which the time thread works which makes them more reliable
  2. Added the ScheduledCommand object that can now allow a thread to execute a command the future to be interrupted
  3. Re-added the not keyword, this works identically to the ! except it requires a bracketed expression e.g. print(not(true))
  1. Added the new PHP 8 style match statement e.g.
    print(match($x) {
    5 => "Yes",
    else => "No"
  2. Added the DoNothing object
  3. The do_nothing command no longer returns null but a DoNothing object, in it's place a lambda function should be used that returns null
  1. Fixed an issue that prevented strings from being serialised, and in turn any data type containing strings
  2. Variables defined using the let keyword can now be negated
Version 1.9.4 (6 updates)
  1. Fixed a major issue with else if statements. They can now only be written as elseif again
  2. 0 now correctly resolves to false when in a comparison
  1. Added the new log predefined function
  1. Added a new data type, the record structure: e.g.
    $v = [x = 65]
Version 1.9.3 (8 updates)
  1. Added in a new syntax for declaring variables without a dollar in front i.e. let x = 10
  2. Added support for new variables with lambda functions, e.g. let x = function(y) print(y) end function x("Hello")
  3. Added the var keyword which can be used in place of let
  4. All these years later I have made print a class 1 predefined function, making it perform slightly better
  5. Improved the quality of the output when a native object function cannot be run due to permission levels required
  6. Fixed an issue that meant that fixed loops didn't work correctly on an initial value (e.g. for (-2 to 10) would start on 0)
  1. Added the new optional let keyword, e.g. let $x = 10
  1. Minor performance improvements
Version 1.9.2 (6 updates)
  1. Added the *=, /= and ^= operators
  2. Updated the increment/decrement operators to use long values rather than integer
  1. Added the generate_random_string predefined function
  1. Created a ZPE settings file type
  2. ZPE now stores local settings such as a unique ID in a settings file
  3. Added the get_unique_id predefined function
Version 1.9.1 (8 updates)
  1. Added the match statement, similar to the case statement
  2. Added the else option in the match statement
  1. Fixed an issue that meant that negative binary numbers (using two's compliment) padded with 0s and were excessively long
  1. Fixed an issue that caused parameters to always be set even if they weren't
  2. Fixed a bug that caused undefined == undefined not to always work
  1. Fixed empty lists in the ZenithJSONParser
  2. Replaced a few references to the ZENJSONParser with ZenithJSONParser
  3. Added support for empty associative arrays to JSON parser

Version 1.8.x

Version 1.8.13 (3 updates)
  1. Added the ZENClient object that allows the client to run in pure YASS code
  1. Fixed an issue with the ZPEString used as a key in an associative array
  2. Fixed an issue with assertion and comparing strings
Version 1.8.12 (8 updates)
  1. Added the ZPEString data type replacing the standard string
  2. String values can now be passed by reference
  3. String values are now chainable/reference types
  1. The interactive interpreter no longer adds variables back into the global function but instead the main function
  1. Stricter variable name checking
  1. Added the create_variable command to create local variables on the fly
  2. Added the -flush command to interactive interpreter to clear all global variables
  3. Added the say command to ZENServer/ZENClient
Version 1.8.11 (10 updates)
  1. Better management of reference functions and objects
  2. General tidy up of the native method objects
  3. Better integration of Objects and Structures
  4. Fixed an issue where an empty file list in compilation would cause an error and crash the compiler
  5. Removed the old serialise and serialize, save_object_to_file aliases from the predefined function list (they should have been removed previously)
  6. Removed the open_object_from_file alias for the deserialise function
  1. ZPE now detects headless systems before launching the GUI
  1. Added infinite parameters to functions
  1. Compiler issues are now handled better
  2. Fixed an issue that threw infinite errors in the -a mode when there was a compile issue
Version 1.8.10 (21 updates)
  1. Added native sandboxing to the engine providing further sandbox support linked to the permission level system
  2. Added the USE_FILE_SANDBOX property to the properties file
  1. Added support for ZPEObjects to the JSON parser
  1. Added the list_zpe_aliases function
  1. The -p mode now supports inserting a property value from the command line by leaving out the -v argument
  1. Added the --install ZAC which will now replace the -h install and the --configure command
  2. get> and put> become get and put in client
  3. Fixed a few issues with the installer package to make it work more in a more seamless way
  1. Added the mkdir and rm commands to ZENServer and ZENClient
  2. Added the supports feature to the server
  3. The list of server commands now comes from the server to the client so that the client can have an up to date list of server commands supported
  4. Changed the logo in the command line
  5. The -d debug mode has been changed to the -m mode and improved. Now it acts like a watch command and informs of any changes to a variable within a function, including private functions
  1. Added several SSH-like commands ls, cd, pwd and cat to the ZENServer and ZENClient
  2. ZENServer has its own root path
  3. The ZENServer rls command is now ls and the local version is lls
  4. Added real Unix style file paths using my own version of the .. in a path to the ZENServer
  1. Added the file_encrypt and file_decrypt functions
  2. Fixed an issue in which compiled applications given a -level argument could not be given arguments
  3. Added the file_get_path function which will obtain the absolute path of a file or directory
  4. Added the file_get_parent_path function will obtain the absolute path of the parent directory of a file or directory
Version 1.8.9 (23 updates)
  1. Better console colouring thanks to JANSI library
  2. File encryption when sending data to an passworded server is now standard
  3. Added the ls command to the ZENClient (e.g. ls or ls Documents)
  4. Cleaned up the directory_list_files function when working with the empty string (the current working directory will be listed)
  5. Added the rls shorthand to the ZENClient which will run `return beautify(directory_list_files(""))`. Much like ls, this can accept a parameter filename
  6. Added the get command to obtain a file from the server (it's the direct reverse of the send command)
  1. The GUI ZPE Online now connects via HTTPS
  2. Properties are now uppercase
  3. Since my unfortunate shift from macOS to Windows for the time being, I focused the development on adding an icon to the editor. It now has the new ZPE logo
  4. Fixed the broken tray icon in GUI
  5. Added the ability to run a ZENServer from the GUI
  6. Removed the option to show server messages in a GUI mode from ZENServer (it may come back but better designed)
  7. The new ZPE folder is ~/.zpe instead of ~/.zpe_tools
  8. Added the ONLINE_PATH and ZULE_PATH properties to the properties file
  9. Created a new .exe file for Windows
  1. Separated the compilation of parameters and arguments in the compile_parameters compiler function to compile_parameters and compile_arguments so $y = function($m, [50]) { $m = $m + 5 } is no longer valid
  2. Default values can now be assigned to parameters. E.g. function foo($arg1, $arg2 = 10, $arg3 = "Jack")
  3. Providing too many arguments to a function no longer stop the program with a -2 error but simply throws a ZPE WARNING.
  4. Added the list_compress function which compresses a list, for example: list_compress([11, 22, 33, 44, 55, 66, 77], 3) returns [11, 22, 33]
  5. New Recent Cloud Files option in GUI
  1. Added the require keyword as an alternative for import
  1. Fixed the issue with http_post and ZPE Online and made POST requests function correctly again
  2. Added the command documentation feature to the GUI editor
Version 1.8.8 (6 updates)
  1. Fixed an issue in ZPE 1.8.7 that meant that it could not be executed with JavaFX and therefore some openJDK versions did not execute it at all
  1. Fixed an issue and improved performance of the new send> command within the ZENClient and ZENServer
  1. Added in a simple send> command to the ZENClient that allows the sending of files via the client to the ZENServer
  1. Numbers with a negative exponent e.g. 5E-5 can now be represented - this is a long standing bug within the Zenith Parsing Engine parser. I can't believe it's been here this long :L
  1. Programs compiled with a passcode are now encrypted
  2. Fixed a few bugs that seemed to occur within the GUI mode
Version 1.8.7 (11 updates)
  1. Improved the to_binary function which can now accept a string of characters which will be converted to their binary equivalent
  2. Added the list_combine function which can combine a list into a string very quickly
  1. Improved the way in which replacements are done in the graphical editor
  1. Introduction of ZPEKit (pronounced zippy kit) means that the YASSCompiler is not accessible publicly but can be accessed through ZPEKit
  1. All ZPEObjects included such as the ZPEImage are no longer prefixed with ZPE, so the ZPEImage is now the Image and can be declared as $x = new Image()
  2. The ZPEUI object is now the UIBuilder object
  1. Added the ZPECalculator object, which contains an expression compiler used to evaluate an expression
  1. list_pop and list_dequeue had the wrong implementation and manual entry: pop would remove from the start of a list and dequeue from the end, this has been fixed
  2. Fixed an issue with the --man command and mixed types being displayed as an object
  1. Added the list_plugins function which returns all active plugin functions
  2. Added the get_function_information function which returns information from the function manual (see --man for more information)
Version 1.8.6 (15 updates)
  1. Added the create_temporary_file function which can be used to create a temporary file
  2. Added the file_put_bytes function to write bytes to a file
  1. Deprecated the ZENWebServer
  2. Added the get_ip_address function which will return the current system's IP address
  1. Added the the set_header function which will set a web header
  2. Added the set_http_status function which will set the HTTP response code header
  1. Added support for the Velocity Web Server through the Velocity Module
  2. Added the update_zpe function which attempts to run the ZPE updater
  1. ZENServer is now interactive, meaning declared functions and variables are stored
  2. ZENServer is now threaded - I hadn't even noticed this wasn't done! :O
  1. Added the list_drives function which lists all root drives
  1. Added index ranges e.g. $x[1:3] similar to Python
  2. Added in negative index support, e.g. $x[-1] which will work in reverse, again similar to Python
  1. Added the extends keyword as an alternative to inherits for inheritance of classes or structures
  2. Added the option to create a constructor with the name of the class, like C or Java, e.g class Animal { function Animal() { } }
Version 1.8.5 (7 updates)
  1. Changed the play_audio function to open_audio_stream which returns a ZPEAudioStream object
  1. Added the play_audio function which plays an audio stream
  1. Added the file_get_bytes function
  2. Removed the type parameter from the file_get_contents function, making it only read text
  1. The --client argument is no longer required to specify a ZENClient, as the -h argument informs the application of this
  1. Fixed an issue in which object comparison through the _compare method didn't work
  1. ZENServer now searches for updates automatically when set in the properties file to do so
Version 1.8.4 (4 updates)
  1. Fixed an issue in which the list_parameters function required at least one parameter
  2. Improved the way objects, associative arrays, lists etc are iterated and made it more flexible
  1. Changed the domain for the installer to jamiebalfour.scot
  1. Improved the in-line document syntax by supporting variables
Version 1.8.3 (7 updates)
  1. Fixed an issue in which imported libraries were not accessible in all cases
  2. Added the say alias for the speak function
  1. Added the inline documents syntax
  1. Added support for null values in the JSON parser.
  1. Added the list_count_occurrences function
  2. Added the list_count_if function
  1. Fixed an issue that meant that ZPEObject values would sometimes not save correctly when cached.
Version 1.8.2 (13 updates)
  1. Added the speak function, however, this function is currently experimental and works only on a Mac
  1. Major fix for an issue that caused object functions to not see the same call stack as their object owners
  2. Added the list_shuffle function
  1. Added the -j option to the main ZPE package for JSON commands (more information coming soon)
  2. ZPEExceptions are now accessible as ZPEObjects and can be returned from a function
  1. The -r and -i modes have been switched. -i is now the interactive interpreter and -r is the runtime
  1. Added the list_zpe_functions function which will create an ordered associative array of functions
  2. Changed the way in which the JSON parser deals with ordered associative arrays, ensuring order is maintained
  3. Fixed an issue in which functions were not evaluated in concatenation
  1. Added the list_object_properties function which lists all properties of a given object
  2. Added the get_object_property function which will get a value from an object property
  3. Added the is_function function
  4. Reduced the delay on the interactive interpreter
Version 1.8.1 (16 updates)
  1. Certain functionalities have been moved to primary native libraries that will offer to be installed on first run
  2. Fix made to ZULE repository that make it perform better
  3. Moved the generate_alphabet function to String functions
  4. Moved the send_zpe_server_request to Networking functions
  5. ZULE has been moved to a separate static class
  1. Made a major fix to the way bigger (long or double) numbers are handled
  2. Added the time function which gets the current number of milliseconds since 1st January 1970 (epoch time)
  3. Added the run_at command, which runs a background daemon thread until a certain time arrives and executes that function using it's handle
  1. Added a new option to the shutdown command that allows a time to be specified from the current time to shutdown at
  1. Major improvements to way the ZENClient and ZENServer communicate
  2. Public and private key encryption is now used to encrypt all information between server and client unless no password is given
  1. Changes to the way in which the ZPEClient and ZPEServer work, making them much more stable
  2. ZPEClient is now the ZENClient and ZPEServer is now the ZENServer
  3. ZENClient and ZENServer no longer feature message mode
  4. ZPEWebParser has been renamed ZENWebParser
  5. Tidied up internal packages so ZEN related files are now in the zen package

Version 1.7.x

Version 1.7.13 (5 updates)
  1. Added the wake_on_lan function
  1. Added create_list to the ZPEUI object
  1. Minor performance improvements
  2. Fix made to the way plug ins work
  3. MySQL connector plug in now available
Version 1.7.12 (7 updates)
  1. Importing is now done with the import keyword and is no longer a function.
  1. Library imports are no longer done by the interpreter on startup but are now done with import command, thus taking away some of the startup time
  2. Minor performance updates
  1. Fixed an issue in which quotes were removed from a string if used inside another string
  1. The if...then statement is now a single expression based if statement
  2. The if...then statement can also have a single expression based else statement
  3. Improved performance of When-Is statement by using a hash map to store values
Version 1.7.11 (12 updates)
  1. For loops with the syntax x = n to y can now use variable references as the y value
  2. The same for loops now loop from x to y non-inclusive of y
  1. Fixed a long standing bug that caused objects to not update when a reference was updated when no main function was provided
  1. Added the alternative value syntax, e.g.
    $x = null $v = $x ?? "James" will evaluate to "James"
  2. Potential fix for Bug #9 - global traverse now marks traversed FASTs as complete
  1. More changes to the GUI including a new dark mode (only on macOS currently)
  1. Added the ZenithParser object
  1. If the import function does not find the file initially, it will search the library path for the file next
  2. The password_hash function now throws a warning if the number of rounds is > 30 and resets it to 30
  1. The is_set method now works on object properties, including object properties containing objects.
  2. Added the write function
Version 1.7.10 (7 updates)
  1. ZPE now set the DOCUMENT_ROOT property to a public_html folder in the users home directory by default
  2. Added a button to stop a running web server in the GUI
  1. Added the tkmenu library to give macOS editors the macOS menu bar instead of the in window version
  1. Replaced the menubar in macOS with the system menu bar for consistency
  1. Added type checking on array data types
  2. Added the array_get_data_type function, which will return the data type of all elements within the array
  1. Fixed an issue with quotes in quotes when escaping them
Version 1.7.9 (14 updates)
  1. Fixed an issue with public declared values in a structure
  2. Removed the threaded function
  3. Added the run_in_thread function, this can also run lambda functions in a thread.
  4. Fixed an issue within objects that prevented inner functions being given the correct parent object
  5. Added for loop compiler optimisations
  1. Performance improvements
  1. Fixed an issue where some whitespace characters were ignored by the parser (e.g. ASCII 160)
  1. A change to the web parser - pages now end with ywp instead of zhtml
  2. The opening tag for web pages is now <?ywp and ywp?>
  1. Added the string_text_compare function
  2. Renamed the cache_value command to write_cache_value
  3. Added the count keyword. E.g. count ($v). This is not a function and takes advantage of compiler speed
  1. The ZPEHTMLBuilder object internal function list_to_html_list now works recursively on lists
  2. Native methods are now declared with a public scope in objects
Version 1.7.8 (7 updates)
  1. Added the ZPEHTMLBuilder object
  1. Added the self keyword which has the same functionality as the this keyword
  2. The returnInteger function on the LAME parser has been removed. This means that an integer value such as 10 will now be displayed as it's decimal equivalent of 10.0
  1. Variables are now shared across chunks in the web parser mode
  1. New compiler optimisations mean that compiled programs run even faster
  1. Added the list_find_duplicates function
  1. Fixed an issue with functions declared on anonymous objects being inaccessible
Version 1.7.7 (5 updates)
  1. The display of objects when printed is now much more like PHP
  1. Added the boolean comparison that 0 == false is true
  2. Fixed an issue that meant that short circuit evaluation only happened if it was true
  1. Added the EXACTLY EQUAL === comparison
  2. Added the --json option to the -v (version) ZAC
Version 1.7.6 (15 updates)
  1. Fixed an issue that prevented functions being declared without a main function
  2. Added the password_hash function
  3. Added password_verify function
  4. Added password encryption to compiled files
  1. Added the for each...break when...is loop
  2. Changed the file_open function to use the ZPESequentialFile object
  3. Added a file_get_contents function
  1. Added the list_process function
  2. Added the array_to_list function
  3. Added the list_to_array function
  4. Added the list_auto_populate function
  1. Added support for larger numbers
  1. Fixed an issue in which the floor and ceiling functions returned a double instead of an integer
  1. Added the new console window for output for the GUI mode.
  2. GUI console has a much cleaner look
Version 1.7.5 (9 updates)
  1. Moved the output from the compiler from the internal method
  2. General performance improvements
  1. Native methods can now be constructors in objects
  2. The new file option in the GUI now creates a simple program with a main function
  3. Several constants have been removed in favour of a new global variable called $_SYSTEM, similar to PHP's superglobal $_SERVER
  1. GUI now remembers the last state it was in
  2. Fixed an issue with the date conversion in which the month and minute were muddle up
  3. A new feature now means that built-in language objects are now available. E.g. the ZPEUI object can now be accessed with new ZPEUI()
  4. Certain object generation methods: generate_image, generate_ui, file_open_sequentially and get_time have now been removed in favour of pure objects
Version 1.7.4 (16 updates)
  1. Added more online features
  1. Added the http_post method, allowing requests to be made to any URL
  2. Added the new ZPE Online (codenamed Munro Top) registration and cloud storage of ZPE programs
  1. Added the implies and iff functions
  2. Added the nor function
  1. Complete rewrite of both structures and objects to make them more consistent
  2. Nested structures/classes are now available
  1. Added type checking option to the GUI
  2. Added the web server option to the GUI
  3. Fixed an issue in which objects were not correctly evaluated by the get_type function
  1. Fixed an issue with the is_set function not correctly accessing indexes
  2. Index safety is no longer built-in to the language by default but enabled using the properties file
  3. Removed an old hack that fixed an issue but actually broke the compiler later
  4. Fixed an issue within lambda functions due to a hack that was put in
  1. Added short circuit evaluation of logic
  2. Logic parser completely rewritten which allows complex conditions to be evaluated quicker
Version 1.7.3 (21 updates)
  1. Fixed an issue with index access in an evaluation
  1. Added more @ documentation features
  1. Structures are no longer just the same as objects and are now restricted to their original definition
  2. Major fix that fixes ZPE private access
  1. Changed the way binary, hex and octal values are inserted.
  2. Binary has a signed bit so 0b111 would be 7 and 1b111 would be -7
  3. Octal now uses the format of 0o17 where the o is the feature that lets us know it is an octal value
  4. Octal has a signed bit so 0o17 is 15 and 1o17 is -15
  5. Hexadecimal numbers now have a signed bit so 0xa is 10 and 1xa is -10
  1. Fixed a bug in concatenation that prevented the concatenation of integer values
  2. The to_json function is now the json_encode function
  3. The parse_csv, parse_json and parse_xml functions have been renamed csv_decode, json_decode and xml_decode respectively
  4. Minor performance tweaks that help stabilise LAME
  5. Added the csv_encode function
  6. list_add_element no longer functions on arrays only on lists
  7. list_remove now works differently on arrays. It will now set the value in the array to a Null value.
  1. New data types ZPEOrderedAssociativeArray and ZPEArray which replace the older is_ordered and is_fixed_size methods on their super classes
  2. Added the input_validate function
  3. Added the list_populate function
  1. Further improvements to LAME performance
  1. Added the get_password_input function
Version 1.7.2 (10 updates)
  1. Fixed an issue which prevented the _construct method from being created on an object
  1. The normal Swing based editor has been removed and the GFX editor has taken its place. It is now accessed with the -g ZAC.
  2. Added the list_to_associative_array function
  1. If the JAR is opened by double clicking rather than command line, the GFX editor will show
  2. Updated the GFX editor which will soon replace the GUI editor
  1. Compiler constants remain in play in the interactive interpreter between lines
  2. Fixed a flaw which prevented concatenation of doubles or integers (LAME only)
  3. Fixed a flaw which prevented access to variables defined using strong typing
  1. Compiler constants are now moved to the compiler away from the interpreter. This offers better performance.
  2. Compiler constants can now only be one single value and cannot be expressions
Version 1.7.1 (14 updates)
  1. Replaced the LAMP with LAME, a much faster and more accurate evaluator for logic and maths
  1. Added the bound word exception to the ZenithEngine. E.g. $ must be bound to a name, so the parser will not accept when it is written as $ x = 10 but will accept $x = 10
  1. Bug fix for object index access in comparison e.g. if($x->$v[0] > 9) print("Yes") end if would not work if $x = {$v : [34, 35]}.
  1. Added the index.zhtml handler to the ZPEWebServer so that if no file is specified but an index file exist it will read this
  2. Further improvements to whitespace within the ZenithParser
  3. Better memory usage within the runtime interpreter
  1. Added the ZPEWebServer that can act as a basic web server and can serve ZPE-HTML pages (zhtml)
  2. ZenithParser now features custom whitespace tokens
  3. Improved performance
  1. Major improvement to ZenithParser which makes it perform 10% faster than before.
  1. Threaded functions are now written as function threaded x() instead of threaded function x(). The latter has not been removed but deprecated.
  1. Added support for by reference variable assignment, e.g. &$y = 10 will change the original $y
  1. A huge overhaul to the design and performance of ZPE both in the interpreter and the compiler
  2. Compiler and runtime have now been separated, which allows the compiler to run more efficiently
Version 1.7.0 (8 updates)
  1. Added by reference variables, list_set_at_index already implements this
  1. Added assertion tools for unit testing. Assertion can be true or false
  2. Fixed a ZenithParser flaw that meant that when lexing whitespace no check was made for comments after
  1. Fixed an issue with index access within an object context when assigning values (major bug)
  1. Fixed a long standing issue with concatenation
  2. Fixed an issue which would result in the string_get_length function returning a string value
  3. Fixed an issue which would cause ZPELists to recursively call their own remove function
  4. Fixed an issue that caused quotes to be added to strings after being inserted using the older list_add_element method

Version 1.6.x

Version (1 updates)
  1. Added the built-in internal update program. Just running the --update ZAC will update ZPE
Version 1.6.8 (6 updates)
  1. Further to the expansion of everything is a function in YASS, the ZPE global function is now the main place for functions
  2. Internal functions (nested functions) have been improved and now perform better
  3. New feature to -r ZAC, functions are now retained after being defined
  1. Command line now accepts negative values correctly
  2. Added the associative_array_create_ordered method which generates a new ordered associative array
  1. The GUI mode now handles errors and does not quit on an error
Version 1.6.7 (15 updates)
  1. Added the input alias for std_in
  2. Assignment within statements is now possible, e.g. if(($v = 10) == 10) print($v) end if
  1. Added the get_call_stack method
  1. Added support for else if as well as elseif in if statements
  1. New Python inspired fixed arrays defined as
    $v = [] * 4 or $v = ["Hello"] * 4
  1. The print method no longer runs variables containing functions but simply leaves them as a reference.
  2. Minor performance improvements through a hopeful trial
  1. Added the new --typed argument that forces type checking in assignment
  2. Further engine cleanup means that built in methods are now completely separate from the compiler and interpreter
  1. Fixed an issue with dotted (reference) expressions
  2. Added the sublist method to the list type
  1. TYPO is now available within ZPE 1.6.7! Finally, type checking can be done with ZPE!
  1. Added the new alternative lambda function syntax that uses the fat arrow syntax: $v = () => print("Hello") end function and $v = () { print("Hello") }
  2. Added the new alternative syntax to the for each loop similar to 'for each ($v) print ($pos++) end for'
Version 1.6.6 (24 updates)
  1. Added negation of variables such as -$v and improved the method of negative values being used
  2. Improved the way in which negative values are evaluated
  1. Added the get_version method which obtains the version number of the ZPE instance it is running within
  2. Added an option to disable methods from the runtime environment (using the properties file)
  1. Added the cache_value and read_cache_value methods which read a value from a special secured file
  1. Added the optional 'code' parameter to the exit method
  2. Small performance improvement with the LAMP parser
  1. Fixed an issue in which new ZPEObject would set their values and variables to the FRIENDLY only access
  1. Fixed an issue where in the single line interpreter variable values were not actually retained properly
  2. The single line interpreter no longer exits on an error but displays an error and continues.
  1. New if statement optional syntax using the THEN keyword: $x = 10 if $x == 11 then print("Yes") end if
  2. Added the built-in object methods `inherit`, `serialise` and `get_definition`. Removed the general serialise and object_get_definition methods.
  1. Added object inheritance
  1. Fixed an issue with for loops
  2. Added the circumflex syntax for power e.g.
    5^2 is 25 (five squared) and 5^3 is 125
  3. Added the variable mode to the -r ZAC. This mode is like single line mode except that variables and their values are persisted.
  4. Removed the Program read mode and the Multi line read mode
  5. Fixed with comments in the Zenith Parser
  6. Fixed an issue in for loop with reading lists
  7. Fixed an issue that caused negative numbers to convert to strings when parsed
  8. Added binary parsing into the compiler e.g. $v = 0b0101. Binary values always start with a 0b
  9. Added the to_decimal method to convert a string of binary, octal or hexadecimal characters to an integer
  10. Command line arguments are now separated from program arguments using a -args command line
Version 1.6.5 (4 updates)
  1. Added the FOR EACH IN loop to complement the FOR EACH AS loop (it works the reverse to this)
  2. Fixed an issue in the CSV parser where single line CSV files parsed incorrectly
  3. Fixed an issue in the feedback command that prevented it from sending when given just one argument
  1. Syntax change for pre-increment and pre-decrement from $++x to ++$x
Version 1.6.4 (24 updates)
  1. Big change to the way that images are used in ZPE as they are no longer a native type but are now stored in an object.
  2. The image() method now returns an image_object object - a simple object with multiple native methods on it
  3. Several built in image methods have been removed in favour of the image_object
  4. The single apostrophe quote is now parsed properly
  5. Fixed performance of parser
  6. Improved the ZenithParser's method of finding multiline comments
  7. Small performance improvements in compilation
  1. Fixed an issue where associative arrays would not print with a comma
  1. Fixed single bracketed expression problem e.g. return (5 + 5) would not work.
  2. Fixed an issue with concatenation
  3. Fixed an issue with FOR EACH loops with object and the this keyword
  1. remove_at has now been added to strings as a chainable function
  2. Added a fix that allows objects to contain non-prefixed variables, e.g.
    $v = {"name" : "Jamie"} print($v->name) would work
  1. Both the server side and the client side of ZULE have been improved
  2. Infinite indexes for variables are now possible
  3. New undefined() function returns an undefined value
  1. It's been a long time coming, but 64 bit integers (longs) are now used instead of 32 bit.
  2. Fixed the problem occurring with constant definition
  3. Constants are now defined using the define keyword (lowercase)
  4. ZPEObjects now expose an addNativeMethod method that allows executable Java code to be used in an object
  5. Native methods can now be run as Java based programs within objects
  6. When an ZPEObject is printed, it no longer exposes the values of the object (for safety and security reasons)
  7. Fixed downloading in ZULE
Version 1.6.3 (13 updates)
  1. Functions can now be indexed using [] e.g. getNames()[0]
  2. Functions within objects can now also be accessed with the index notation e.g. $person->getNames()[0]
  3. When a function is incorrectly called it no longer returns !error as a string but an actual Error object
  4. Negation is now compiled differently and the not function has been removed
  5. Improved the way in which chained (.) functions work. E.g. $v = [44, 55] $x = $v.get(0)
  1. Added the variable index to ACCESSOR e.g.
    $a->$b[0] = 10
  2. Better compatibility with libraries
  3. Probably released a fix for issues #4 and #7
  1. Major update and complete rewrite of the way objects and structures work, making them faster and more efficient than before
  2. Accessibility within public, private and friendly objects is now checked at runtime
  3. Objects can now have functions that set internal values
  4. Improved the way that a break call bubbles
Version 1.6.2 (6 updates)
  1. Major fix to indexing of variables e.g. $v[0] = 10 now works perfectly
  2. Added a padding of nulls when an item is inserted at an index that doesn't exist
  3. Major improvements to the is_set method
  4. Fixed concatenation (small bug causing a huge problem)
  5. The shell command now adds line breaks at the end of each line
  6. Fixed an issue in which adding an escape \ before a quote would be ignored.
Version 1.6.1 (4 updates)
  1. Renamed Zenith Parsing Engine to ZPE Programming Environment
  2. Fixed an issue in which the parse_json function would only return an associative array, never a list
  3. Fixed an issue when comparing integers, double and strings that looked similar e.g. 1 == "1" would be true.
  4. Fixed a LAMP issue in which less than was improperly parsed, causing a memory leak and eventually a stack overflow
Version 1.6.0 (4 updates)
  1. Fixed an issue in which the get_median function was actually using the same code as the get_range function
  1. Added the new -w web parser mode to parse web pages
  1. Added the force_colour option
  1. Added the --colour option

Version 1.5.x

Version 1.5.4 (11 updates)
  1. Added the switch statement, a rewrite of when-is statements
  1. Server threads now share Zenith Engine consumers where they can.
  1. Fixed an issue with ZACs
  1. Compiler keeps track of constants that have been assigned and throws an error on reassignment
  1. Fixed a performance issue
  2. Fixed an issue when using accessors on keyword 'this'
  1. Added a fix to concatenation that will need to reviewed ASAP
  1. Redesign of the way objects are accessed that makes them a little unstable
  2. Fixed the issue with accessors and objects, making them stable again
  1. Improved the parser to support any third-party subsequent character array
  1. Added the new object declaration format similar to JSON or JavaScript: $v = {first_name : "Jamie", surname : "Balfour"}
Version 1.5.3 (29 updates)
  1. Added the new index assignment through $v[2] = "Hello"
  2. Added index support for associative arrays
  3. Added index setting support for associative arrays $v["Tom"] = "Allan"
  4. Improved the way the compiler works, improving performance
  5. Improved the shell command to now return the return value of the command
  6. Added the sprintf function to format a string fairly quickly
  1. Added ZPE to a Git repository for better backtracking
  1. Added the index of an array through square brackets $v[1] for access only
  2. Minor performance improvements and further refactoring
  1. Added the option to ignore new lines in the ZPE Parser
  2. Fixed a flaw that prevented objects from being parsed properly
  1. Associative arrays no longer use braces {} but [] similarly to lists
  2. To access an internal method of an object the -> is used instead of => (=> is used for associative arrays only)
  1. Continuing with the idea of a reusable parser, the CSV parser has been redesigned from the bottom up
  1. Fixed a couple of minor issues in regards to scope
  2. Completely redesigned the parser, making it separate to the main compiler.
  3. Introduced the new ZenithParser, the underlying parser that powers the whole ZPE.
  4. Added JBSON, my own JSON parser.
  5. Fixed an issue that has been around for a long time with string quotes not being removed by moving this to the parser
  1. Fixed an issue within the compiler, whereby all inner compiled strings would be case insensitive.
  1. Fixed an issue in which foo = function() { print("bar") } would be a valid function
  2. Objects are better inlined with structures, the 'object()' function is removed and replaced with the 'new object()' syntax.
  3. Chainable functions can be used on accessors such as $people => $list.get(1). This is a minor fix.
  1. Added a new feature that allows function declaration within objects. $x => f = function() print("Test") end function
  2. Added the _output core method to objects. Any object declaring an _output method will call this when cast to a string
  1. Improved server stability
  2. Pointers have been renamed accessors. The accessor symbol is still =>
  1. Added the get_object_definition function, designed to identify which structure this object inherits it's format from
  2. Added the wait method which waits a specified number of milliseconds
Version 1.5.2 (5 updates)
  1. Structures can now be initalised through a constructor function called _construct
  2. Fixed an issue where objects within objects could not be used.
  1. Added the serialise and deserialise functions to object $v = object() $v => $x = 10 $v.serialise("Test")
  2. Improved the serialise and deserialise functions to now support functions, objects within objects, lists and associative arrays
  1. Added custom keyword plugin feature. This allows custom parsing of symbols and words
Version 1.5.1 (10 updates)
  1. Fixed an issue with concatenation
  2. Added do while loops
  1. A huge number of changes designed to make it easier to use ZPE within the Java language by organising ZPE into packages jamiebalfour.ZPE
  1. Added compiler improvements that make compiled applications run faster
  2. The name parameter in the compiler is now fully optional
  1. Added the publicly available PublicMethods class and the built in ExternalMethods variable to access it which allows access to a bunch of useful functions to access internals of ZPE
  2. Changed the plugin interface slightly, it now sends a 'parent' ZenithEngine object to the MainMethod of an interface
  3. Improved performance and fixed a flaw in which plugins could not be executed
  4. Added the for-to loop e.g. for($i = 0 to 10). Works the same way underneath
  1. Added the includes statement. This will include non-compiled code before compilation. E.g. include "file.txt". This code will execute as though it were in the main program
Version (6 updates)
  1. Fixed an issue in which lambda calls were not called in a LAMP expression
  2. Fixed an issue in which the global #SCRIPT constant is not defined a associative array properly
  1. Added threaded lambda functions. $v = threaded function() { for ($i = 0; $i < 100000; $i++) print($i) end for }
  1. Further improved server and client communication, now allowing the server to execute a script on the input.
  2. Added the string_cut function that cuts a string from start to finish
  3. Added the string_divide function to split a string multiple times
Version 1.5.0 (12 updates)
  1. Improved server and client communication and functionality
  1. Fixed an issue in which the ceiling command would round down
  2. Added the aes_encrypt and aes_decrypt functions
  1. LAMP parser memory consumption improved considerably
  2. Fixed an issue with lambda functions not evaluating correctly in LAMP expressions
  3. Added the 'this' keyword for pointers. E.g. $x => $y = function(){ print (this => $z) }
  1. Added interpreter warnings
  1. Added the Google GSON library to parse JSON
  2. Added json_to_map function
  1. Fixed an issue with the LAMP compiler
  2. Fixed an issue with the LAMP interpreter
  3. Fixed an issue with the ternary operator, that stopped it functioning on the false value

Version 1.4.x

Version (5 updates)
  1. Fixed an issue with the += and -= increment and decrement values that only allowed numbers to be used
  2. Fixed an issue with the += and -= increment and decrement values that meant that values were rounded to integers not left as reals
  1. Expressions can now be negated by simply putting the ! in front of them without bracketing it. E.g. !false
  2. Added the list_get_at_random_index and the generate_alphabet methods
  1. Focuses on external implementation of language converters
Version (11 updates)
  1. Fixed an issue with variables and increment and decrement values
  2. Fixed an issue with anonymous functions and return functions without brackets
  1. Added the plus equals (+=) and the minus equals (-=) increment and decrement operators
  2. Added the concatenation operator, & and deprecated the string_concatenate command
  1. Better error messages from the compiler
  1. Added the try and catch clause to catch errors
  2. Better error handling and few Java like errors
  3. Another fix with the ternary operator makes them function better
  1. Fixed an issue with lambda functions that prevented them from being evaluated when given parameters on declaration
  2. Modularised the for loop
  3. Added the sha1, sha256 and md5 hashing algorithms
Version (14 updates)
  1. Fixed an issue with the ternary operator on single expressions
  1. Fixed an issue in which lists and associative arrays would not be evaluated properly in a comparison
  1. Fixed a small issue that caused lambda functions to crash
  1. Changed the way in which the interpreter functions (less recursion) - leading to better performance and memory usage
  1. Merged structures and object types into one larger type
  2. Fixed issues with structures that prevented them from functioning
  3. Fixed an issue with boolean variables in a logical statement
  4. Minor fix with lambda functions within objects
  1. Improved the efficiency of the compiler
  1. Added scopes (private, public and friendly) support to variables
  2. Added the scopes to constants as well
  1. Improved the security of certain functions
  2. Reduced possibility of a memory leak in some functions
  3. Added the break function
Version 1.4.3 (16 updates)
  1. Fixed a few minor issues that caused compile issues
  2. Improved the LAMP compiler
  1. Fixed an issue in which bracket expressions were incorrectly tested
  1. XOR has been removed, but a function has been added in its stead
  2. Fixed an issue whereby the compiler seeing a comparator (==, > etc.) would force it to read only one symbol ahead
  3. Fixed an issue where comparison and mathematics mixed together, e.g. 5 > 2 + 1, would crash the interpreter
  4. Fixed an issue within LAMP where a bracket expression would return a number. E.g. (true == false) would return 0
  5. Fixed an issue that prevented return functions from working properly
  6. Function chaining has been fixed
  1. Added the improved evaluator for comparison. This works around 3 times as efficiently as the previous one on larger statements
  2. The new evaluator is flaky and not fully tested, so use this version with caution
  3. Major fix with chaining
  1. The mathematical parser has been rewritten into the same parser as the logical one
  2. Resurrected the ternary (?) operator and operation on logic
  3. Added a compiler failure on the ternary operator on mathematical expressions
  1. The biggest change in ZPE history has begun: rewriting the original condition and mathematical parsers and evaluators
Version 1.4.2 (22 updates)
  1. Added the ternary condition operation. E.g: $x = 10 > 20 || 20 > 10 ? "Yes" || "No" will set the value of $x to "Yes".
  1. Compiler improvements
  2. Updated manual command for get_type
  3. Updated website information to jamiebalfour.scot/projects/zpe/
  4. The put, length and get commands are no longer experimental but fully implemented. They work as [43, 22].length() which will give 2.
  1. Added set_cartesian_product function
  1. Fixed an issue that meant that true at the end of a statement would not be evaluated. E.g. '(10 < 15 && (15 > 15 || 20 > 20)) || true' would return false
  1. The echo command does not need brackets around parameters, but it will only take a single parameter. e.g. echo "Hello"
  2. Fixed a flaw in which functions compiled under the case insensitive compile option would not function correctly
  3. Added the config option to the -h mode to display all the user's configurations (or properties)
  1. Conditional words like and, or and xor are compiled as their logical counterparts (&&, || and **)
  1. Fixed a flaw with the random_number function that added the minimum as a string
  1. Added lazy evaluation to condition evaluation
  1. Added the new list_pop and list_dequeue functions
  1. The range function now can take numbers with decimal places in them, e.g. range (99.1, 1000.4)
  2. Added an increment parameter to range function, e.g. range(99, 1000, 0.3)
  1. Added compiler type checking when using the typed system
  2. Added the string, integer, boolean, structure, lambda, object and image types
  3. Types are always case insensitive
  4. Finally added the configuration file for setting options
  1. Improved efficiency with structure variable assignment
  2. Scripts without any functions at all can be run as a single program
Version 1.4.1 (30 updates)
  1. Function chaining is now supported. E.g. range(0, 40).list_get_length()
  2. Fixed a bug where the . would break strings
  3. Added the length function which will work on strings, lists and associative arrays
  4. Added the get function which will work on strings, lists and associative arrays
  5. Fixed an issue with conditions being evaluated incorrectly
  6. New -experimental mode
  7. Added a compiler_version number to compiled scripts
  1. Images can now be compared using the equals sign, e.g. $img1 == $img2
  2. Removed dotted expressions in favour of using the pointer. E.g. $x = object() $x => $y = 10
  3. Added lambda functions to variables in structures
  4. Improved modularity of ZPE
  5. The file_create_directory function is now the directory_create function
  1. Added publicly accessible isFunction and isObject methods to the JAR as requested
  1. Fixed a bug with the is_set command which would always return false
  2. Fixed a bug that stopped the return function working
  3. Anonymous functions have been improved
  4. Major improvement to lambda functions that makes them function better
  5. Fixed a bug with condition compilation
  6. Lambda functions now have scope to read global and parent variables
  7. Fixed a flaw that made the get_input function the same as the print function
  1. Out of order arguments can now be passed to the application. The only change is now that they require an argument name before.
  2. The new clean arguments system works with application arguments better
  3. Functions can be made private or public
  4. ZPE programs are now compiled to ZEX (Zenith Engine Executable) files
  1. Added the counter function to generate an associative array of counts of items in a list
  2. Added the object function to generate a new Object
  3. Added the dotted expressions. $x.$y = 10 and print($x.$y)
  1. Added the range function to generate a list of numbers in a range
  2. Memory usage lowered slightly
  1. A few minor updates
Version (1 updates)
  1. Added compare_dates function to compare two dates
Version 1.4.0 (9 updates)
  1. Added the echo alias
  2. Re-added the round command
  3. Negation can now be applied through the ! function
  1. Major restructure of internal core of interpreter for better hash functions
  2. Internal aliases are now fully implemented and much easier to execute
  3. Internal documentation is built-in to core functions
  4. Internal documentation is required on extension functions and libraries
  5. Minimum parameter requirement is now built-in to extension functions and libraries
  6. Minimum permission level requirement is now built-in to extension functions and libraries

Version 1.3.x

Version (5 updates)
  1. Fixed a flaw in which lambda functions would not function if they were the first parameter
  2. Fixed an issue with returning lambda functions
  3. All list and associative array functions now copy the original list or array before modification
  4. Fixed an issue with logical comparisons
  5. Added logical comparison evaluation to parameter checker
Version (24 updates)
  1. Added the global function to push a local variable to a global
  2. Added several new constants
  3. Added the mysql_connect function
  1. Changed the type:$language requirement on the -c mode to $language.
  1. Added the all_true function
  2. Added the all_false function
  3. Added the any_true function
  4. Added the any_false function
  1. Added the image_get_width function
  2. Added the image_get_height function
  3. Added the image_get_pixel function
  4. Added the image_set_pixel function
  1. Added the screen_grab function
  1. Fixed a minor flaw with lambda calls
  2. Added the Function type to the get_type command
  3. Added the list_local_variables function
  4. Added the list_parameters function
  5. Added the list_global_variables function
  1. Made a few changes to the workings of lambda functions
  2. Lambda functions can be passed as parameters to functions and conditions
  3. Fixed a flaw with variable storage
  4. Variables can now be assigned to other variables which themselves are lambda functions
  5. Added lambda functions to for each loops
  6. Added lambda functions to for loops
Version (4 updates)
  1. Added lambda functions that can be assigned to variables: e.g. $foo = function($bar){return $bar * $bar}
  2. Added pointer support to evaluation
  3. Added pointer support to function parameter evaluation
  4. Fixed a flaw that stopped increment and decrement working
Version (12 updates)
  1. Added an optional parameter to the directory_list_files function to find only specific file types
  2. By specifying no directory, ie. "" to the directory_list_files function, it uses the current directory
  1. Fixed a flaw in which variables would be incorrectly updated
  2. Added the list_is_a_set function
  3. Added the associative_array_flip function
  4. Fixed an issue with substitution of variables and associative arrays
  5. Added the string_is_uppercase function
  6. Added the string_is_lowercase function
  7. Added the significant_figures function
  8. Added another minor fix to the unset and is_set functions
  1. Added library support
  2. Added support for semi-colons in for loops as well as commas
Version (8 updates)
  1. Added handle_of function to obtain a function handle from the function name
  2. Return no longer requires brackets around the value, this is optional
  1. Plugin system is functioning now, Java-based plugins can be written
  2. Removed the add function
  3. Removed the subtract function
  4. Removed the multiply function
  5. Removed the divide function
  6. Removed the modulo function
Version (17 updates)
  1. Added the image_transform_invert_colour function
  2. Added the image_transform_rotate function
  3. Fixed an issue with the is_set command evaluating incorrectly
  4. Fixed an issue with structure
  5. Added the start function (identical to the main function)
  1. Fixed an issue with for loops in which assignment caused a crash if the assignment was evaluated
  2. Added the image_transform_resize function
  1. Added structure variable assignment
  2. Added structure variable access methods
  3. Removed increment function
  4. Removed decrement function
  5. Added pointer evaluation to parameters, conditions and function calls
  6. Fixed a flaw in which parameters of more than length 1 would not function
  7. Fixed an issue with associative arrays
  1. Added structures
  2. Added structure variables
  3. Added structure functions
Version (3 updates)
  1. Added the file_save_image function for saving images
  2. Fixed an issue that prevented using global variables that used lists, associative arrays, structure and so on
  1. Added the unset function for removing variables after use
Version (9 updates)
  1. Added the conversion option. It currently only supports very basic conversion to Java.
  2. Fixed an issue with mathematical evaluation
  3. Updated the start up information with the new -c mode as well as the -doc mode.
  1. Fixed a bug with pre-increment and pre-decrement
  2. Added increment and decrement values to math evaluation
  3. Fixed an issue with subtraction in mathematical evaluation
  4. Added the -math mode for mathematical evaluation
  5. Added mathematical evaluation to associative arrays and lists
  6. Fixed a bug with the exit function in the -math mode
Version (10 updates)
  1. Added support for constants into mathematical evaluation
  2. Fixed a flaw in which mathematical evaluation could only be done once
  3. Fixed an issue with subtraction
  4. Cleared up a lot of bugs in the RMM evaluator.
  1. Added modulo calculations to mathematical expressions
  2. Fixed another flaw in the mathematical evaluation
  3. Added backtracking requirement for mathematical evaluation
  4. Removed backtracking requirement previously added
  5. Fixed several more flaws in mathematical evaluation
  6. Fixed an issue in which numbers with decimal places would cause a crash when incremented or decremented
Version (15 updates)
  1. Negative numbers can be included in mathematical expressions
  2. Fixed a flaw in which substitution did not take place
  3. Fixed a flaw in which variables could not be assigned to an incrementing or decrementing value
  4. Changed the way increment and decrement work under the hood
  5. Added mathematical evaluation to conditional statements
  6. Fixed a minor flaw that affected condition checking
  7. Added run_command function to run commands on the fly
  8. Fixed an issue with permission levels
  9. Added bracketed mathematical expressions
  10. Fixed a flaw in the bracketed expression evaluation
  1. Fixed a problem with heap space
  2. Added recursion support again
  3. Added image_transform_greyscale function
  4. Added image_transform_sepia function
  5. Added Real Math Mode mathematical evaluation
Version (4 updates)
  1. Added file_open_image function
  2. Added limit_real function
  1. Added support for numbers with exponents, symbolised by an E
  2. Fixed a flaw in which post decrement and post increment did not function as expected
Version 1.3.5 (5 updates)
  1. Fixed a flaw in which conditions and parameters would not work correctly with post increments and post decrements
  2. Improved constants. Constants can also be defined if they are not already defined, but they cannot be overwritten.
  1. Modified the increment and decrement tools syntaxes
  2. Added the file_get_size function
  3. Fixed a flaw in which doubles could not be incremented
Version (12 updates)
  1. Added the list_update_at_index function
  2. Changed the greater_than function to the greater_than_all function
  3. Changed the less_than function to the less_than_all function
  4. Added the equals_any function
  5. Added the to_binary function
  6. Added the to_octal function
  7. Added the to_hexadecimal function
  8. Added pre-increment tools
  9. Added pre-decrement tools
  10. Added post-increment tools
  11. Added post-decrement tools
  12. Certain functions cannot be overridden. More at http://www.jamiebalfour.scot/projects/zpe/
Version 1.3.4 (4 updates)
  1. Fixed the arguments system
  1. Error messages are more useful with the compiler and interpreter
  2. ZPE automatically adds all scripts found in the "libs" folder
  3. Fixed an issue with constants not being recognised
Version 1.3.3 (17 updates)
  1. Fixed an issue with boolean expressions given to functions
  2. Added the invert_value function
  3. Fixed a flaw in which negative numbers were some times discarded as not being integers
  1. Added the import function to import compiled scripts
  2. Changed the way scripts compile
  3. Boolean expressions can now be assigned to variables without bracketing
  4. Logical expressions can now be passed to functions
  1. Added associative arrays
  2. Added associative_array_get function
  3. Added associative_array_put function
  4. Added associative_array_contains function
  5. Fixed the problem occurring with adding arguments to programs
  1. Added internal local functions (functions defined within functions)
  2. Due to minor changes, the constant character is no longer * but #
  3. Added string_ends_with function
  4. Added string_starts_with function
  5. Added string_matches function
Version 1.3.2 (12 updates)
  1. Changed the output of errors to stderr rather than stdout
  2. Added the std_error function
  3. Fixed a flaw with when statements that caused strings to evaluate incorrectly
  1. Added a simple graphical user interface to the engine
  1. Pass parameters from function line to program
  2. Added is_numeric function
  3. Added string_split function
  4. Added string_find_occurrences function
  5. Added string_get_substring function
  6. Added get_os_name function
  7. Added string_to_lowercase function
  8. Added string_to_uppercase function
Version 1.3.0 (82 updates)
  1. Added do until loops
  2. Added the round function
  3. Added the factorial function
  4. Added -m multiple line interpreter mode
  5. Added get_median function
  6. Added list_sort function
  7. Added list_reverse function
  8. Added list_swap_elements function
  9. If statements and loops can have empty bodies
  10. Minor fixes that make it easier to develop small empty statements
  11. Added select-when statements
  1. Added permission mode. Levels can be defined using arguments on the -i and -r modes.
  2. Added is_file function
  3. Added is_directory function
  4. Added directory_exists function
  5. Fixed an issue where parameters would be read over local variables
  6. For can now be assigned to another variable e.g. for($i = $j, $i < 10, 1)
  7. For now deletes variables after the for loop
  1. Added for loops for($i = 1, $i < 10, 1)
  2. Added char_to_int to convert a character to an integer
  3. Added int_to_char to convert an integer to a character
  1. Added get_type function
  2. Added set_intersection function
  3. Added set_union function
  4. Added list_add function
  5. Added list_remove function
  6. Added list_contains function
  7. Added set_from_list function
  8. Added list_get_index_at function
  9. Added list_get_length function
  10. Fixed a flaw in which empty sets cannot be defined
  11. Conditional statements now support comparison of sets
  12. Added get_minimum function
  13. Added get_maximum function
  14. Added get_range function
  15. Added get_mean function
  16. Added greater_than function
  17. Added less_than function
  18. Fixed a problem in which an empty string cannot be represented
  19. Added get_mode function
  20. Fixed a flaw in which a string would be added as a name to a function
  21. Another flaw fixed with return function
  22. Another flaw fixed on the return function to exit functions
  23. Fixed a problem in which numeric values were surrounded by quotes within sets
  24. Fixed an issue with the list_remove function which would only remove numbers equal to the position to remove from
  25. Added list_insert_at_index
  26. Language checks now check for accidental semicolons at the end of lines
  1. Added string_contains
  2. Sets are now working as definitions and as parameters
  3. Fixed a flaw when compiling without an output file
  4. There is no longer the requirement of spaces between variable declarations and comparisons
  5. Added elseif statements to if statements
  6. Added recursion restriction on functions
  7. Program is more friendly to files not found
  1. Variables can be assigned to logical evaluations, such as $v = (true || false). All expressions must be bracketed.
  2. Comments can be included after code on the same line (all programs need recompiled)
  3. Added multi line comments with the /* */ representation
  4. Added absolute_value function
  1. Fixed a flaw in subtract which lead to the first number being removed twice
  2. Fixed a flaw in which conditional statements failed if a variable name is used
  3. Re-added file_open function
  4. Added file_exists function
  5. Re-added random_number function
  6. It is no longer necessary to specify an output file in compilation. If there is no output specified it defaults to out.brs.
  7. While loops can be ended by either end while or end loop
  1. Logic (if and while) now supports nested functions
  2. Logic supports bracketed expressions within if and while statements
  3. Variables can now be assigned to each other: e.g. $j = $v
  4. Added parameter passing to functions
  1. Improved speed of condition testing
  2. Assignment of functions
  3. Tree parser added
  4. Compile feature added
  1. Complete redesign of core and the introduction of the Zenith Parsing Engine
  2. Improved parsing speed
  3. Redesign improves ease of creating new functionalities
  4. New and improved while statements
  5. Functions can now be nested in calls such as add(add(1, 1), 2)
  6. Variables can be assigned to function calls
  7. Interpreter speed improved
  8. Faster substitution
  9. Better unix_execute function speed

Version 1.2.x

Version 1.2.01 (56 updates)
  1. Constants are now signified with an asterisk *
  2. Fixed a flaw in the substitution that prevented a variable being substituted if it was the last in a parameter string
  3. Added increment and decrement
  4. Added mode, median, mean, max, min and range
  5. The mode, median, max, min and range also work on both sets and numbers
  1. Added format_number
  1. Improved substitution of variables
  1. Added a function line for running a single function
  1. Improved the speed of the interpreter
  2. Fixed an issue with strings
  1. While loop improvements added
  1. Added comments
  2. Added set type
  3. Added set_contains function
  4. Added set_add_elements function
  5. Added set_get_length function
  6. Added set_union function
  7. Added set_intersection function
  8. Added set_difference function
  1. Added power function
  2. Added greater_than function
  3. Added less_than function
  1. Added get_constant function
  1. Added the ability to overwrite Zenith Engine functions
  2. Added get_char_at function
  3. Added get_string_length function
  4. Added unix_runtime function
  1. Added sqrt function
  1. Added while loops
  2. Fixed an issue with if statements
  3. Added escape characters
  1. Added variable reassignment
  2. Improved performance of conditional statements
  1. Added add, subtract, multiply and divide functions
  2. Added modulo function
  3. Added sin, cos and tan functions
  1. Added conditional statements
  2. Added if statements
  3. Added else statements
  1. Added help command to BRS
  2. Added type output options
  3. Added return output options
  1. Global variables added
  2. Faster access to variables in Zenith Engine
  3. Custom commands added
  4. Functions added
  5. Call function added
  1. Evaluate function added
  2. String support added
  3. Added GUI mode [experimental] to BRS
  1. Added CLI support to BRS
  2. Added support for reading code in Zenith Engine
  3. Added file read support to BRS
  4. Translation process added
  5. Variable assignment added
  6. Print function added
Version 1.2.0 (3 updates)
  1. Rewrote BlackRabbit Script using a new parser called the Zenith Engine
  2. Added basic print support support using if return statement
  3. Added support for variables from the command line

Version 1.x.x

Version 1.x (2 updates)
  1. Stopped developing BlackRabbit Script
  1. Complete rewrite of BlackRabbit Script
Feedback 👍
Comments are sent via email to me.