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

Since version 1.2.01, there have been 1269 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.x.x

Version 1.x (2 updates)
10.01.2011
  1. Complete rewrite of BlackRabbit Script
31.12.2012
  1. Stopped developing BlackRabbit Script

Version 1.2.x

Version 1.2.0 (3 updates)
19.02.2015
  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.2.01 (56 updates)
20.02.2015
  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
21.02.2015
  1. Evaluate function added
  2. String support added
  3. Added GUI mode [experimental] to BRS
22.02.2015
  1. Global variables added
  2. Faster access to variables in Zenith Engine
  3. Custom commands added
  4. Functions added
  5. Call function added
23.02.2015
  1. Added help command to BRS
  2. Added type output options
  3. Added return output options
24.02.2015
  1. Added conditional statements
  2. Added if statements
  3. Added else statements
25.02.2015
  1. Added add, subtract, multiply and divide functions
  2. Added modulo function
  3. Added sin, cos and tan functions
26.02.2015
  1. Added variable reassignment
  2. Improved performance of conditional statements
27.02.2015
  1. Added while loops
  2. Fixed an issue with if statements
  3. Added escape characters
28.02.2015
  1. Added sqrt function
01.03.2015
  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
02.03.2015
  1. Added get_constant function
03.03.2015
  1. Added power function
  2. Added greater_than function
  3. Added less_than function
04.03.2015
  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
05.03.2015
  1. While loop improvements added
06.03.2015
  1. Improved the speed of the interpreter
  2. Fixed an issue with strings
07.03.2015
  1. Added a function line for running a single function
08.03.2015
  1. Improved substitution of variables
10.03.2015
  1. Added format_number
18.03.2015
  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

Version 1.3.x

Version 1.3.0 (82 updates)
09.05.2015
  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
10.05.2015
  1. Improved speed of condition testing
  2. Assignment of functions
  3. Tree parser added
  4. Compile feature added
11.05.2015
  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
12.05.2015
  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
13.05.2015
  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
14.05.2015
  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
18.05.2015
  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
19.05.2015
  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
20.05.2015
  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
21.05.2015
  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
Version 1.3.2 (12 updates)
22.05.2015
  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
25.05.2015
  1. Added a simple graphical user interface to the engine
05.06.2015
  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
Version 1.3.3 (17 updates)
06.06.2015
  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
07.06.2015
  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
10.06.2015
  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
11.06.2015
  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
Version 1.3.4 (4 updates)
12.06.2015
  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
13.06.2015
  1. Fixed the arguments system
Version 1.3.4.90 (12 updates)
15.06.2015
  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.5 (5 updates)
15.06.2015
  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
19.06.2015
  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.
Version 1.3.5.32 (4 updates)
20.06.2015
  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
28.06.2015
  1. Added file_open_image function
  2. Added limit_real function
Version 1.3.5.63 (15 updates)
29.06.2015
  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
30.06.2015
  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
Version 1.3.5.68 (10 updates)
30.06.2015
  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
01.07.2015
  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.
Version 1.3.5.90 (9 updates)
02.07.2015
  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
07.07.2015
  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.
Version 1.3.5.190 (3 updates)
08.07.2015
  1. Added the unset function for removing variables after use
09.07.2015
  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
Version 1.3.6.0 (17 updates)
10.07.2015
  1. Added structures
  2. Added structure variables
  3. Added structure functions
11.07.2015
  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
12.07.2015
  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
15.07.2015
  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)
Version 1.3.7.0 (8 updates)
21.07.2015
  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
22.07.2015
  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
Version 1.3.7.25 (12 updates)
25.07.2015
  1. Added library support
  2. Added support for semi-colons in for loops as well as commas
26.07.2015
  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
27.07.2015
  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
Version 1.3.7.44 (4 updates)
04.08.2015
  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 1.3.7.89 (24 updates)
05.08.2015
  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
11.08.2015
  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
13.08.2015
  1. Added the screen_grab function
15.08.2015
  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
18.08.2015
  1. Added the all_true function
  2. Added the all_false function
  3. Added the any_true function
  4. Added the any_false function
19.08.2015
  1. Changed the type:$language requirement on the -c mode to $language.
20.08.2015
  1. Added the global function to push a local variable to a global
  2. Added several new constants
  3. Added the mysql_connect function
Version 1.3.7.100 (5 updates)
27.08.2015
  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 1.4.x

Version 1.4.0 (9 updates)
29.08.2015
  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
30.08.2015
  1. Added the echo alias
  2. Re-added the round command
  3. Negation can now be applied through the ! function
Version 1.4.0.83 (1 updates)
12.09.2015
  1. Added compare_dates function to compare two dates
Version 1.4.1 (30 updates)
21.10.2015
  1. A few minor updates
29.11.2015
  1. Added the range function to generate a list of numbers in a range
  2. Memory usage lowered slightly
04.12.2015
  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)
06.12.2015
  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
09.12.2015
  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
11.12.2015
  1. Added publicly accessible isFunction and isObject methods to the JAR as requested
14.12.2015
  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
15.12.2015
  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
Version 1.4.2 (22 updates)
16.12.2015
  1. Improved efficiency with structure variable assignment
  2. Scripts without any functions at all can be run as a single program
20.12.2015
  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
22.12.2015
  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)
14.05.2016
  1. Added the new list_pop and list_dequeue functions
28.05.2016
  1. Added lazy evaluation to condition evaluation
31.05.2016
  1. Fixed a flaw with the random_number function that added the minimum as a string
05.06.2016
  1. Conditional words like and, or and xor are compiled as their logical counterparts (&&, || and **)
07.06.2016
  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)
16.06.2016
  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
18.06.2016
  1. Added set_cartesian_product function
27.06.2016
  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.
01.07.2016
  1. Added the ternary condition operation. E.g: $x = 10 > 20 || 20 > 10 ? "Yes" || "No" will set the value of $x to "Yes".
Version 1.4.3 (16 updates)
13.07.2016
  1. The biggest change in ZPE history has begun: rewriting the original condition and mathematical parsers and evaluators
16.07.2016
  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
17.07.2016
  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
19.07.2016
  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
20.07.2016
  1. Fixed an issue in which bracket expressions were incorrectly tested
21.07.2016
  1. Fixed a few minor issues that caused compile issues
  2. Improved the LAMP compiler
Version 1.4.3.10 (14 updates)
22.07.2016
  1. Improved the security of certain functions
  2. Reduced possibility of a memory leak in some functions
  3. Added the break function
24.07.2016
  1. Added scopes (private, public and friendly) support to variables
  2. Added the scopes to constants as well
25.07.2016
  1. Improved the efficiency of the compiler
27.07.2016
  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
28.07.2016
  1. Changed the way in which the interpreter functions (less recursion) - leading to better performance and memory usage
29.07.2016
  1. Fixed a small issue that caused lambda functions to crash
30.07.2016
  1. Fixed an issue in which lists and associative arrays would not be evaluated properly in a comparison
01.08.2016
  1. Fixed an issue with the ternary operator on single expressions
Version 1.4.3.40 (11 updates)
02.08.2016
  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
03.08.2016
  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
04.08.2016
  1. Better error messages from the compiler
05.08.2016
  1. Added the plus equals (+=) and the minus equals (-=) increment and decrement operators
  2. Added the concatenation operator, & and deprecated the string_concatenate command
06.08.2016
  1. Fixed an issue with variables and increment and decrement values
  2. Fixed an issue with anonymous functions and return functions without brackets
Version 1.4.4.0 (5 updates)
07.08.2016
  1. Focuses on external implementation of language converters
12.08.2016
  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
14.08.2016
  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

Version 1.5.x

Version 1.5.0 (12 updates)
08.12.2016
  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
10.12.2016
  1. Added the Google GSON library to parse JSON
  2. Added json_to_map function
11.12.2016
  1. Added interpreter warnings
17.12.2016
  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) }
21.12.2016
  1. Fixed an issue in which the ceiling command would round down
  2. Added the aes_encrypt and aes_decrypt functions
07.01.2017
  1. Improved server and client communication and functionality
Version 1.5.0.1 (6 updates)
08.01.2017
  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
10.01.2017
  1. Added threaded lambda functions. $v = threaded function() { for ($i = 0; $i < 100000; $i++) print($i) end for }
11.01.2017
  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
Version 1.5.1 (10 updates)
14.01.2017
  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
16.01.2017
  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
21.01.2017
  1. Added compiler improvements that make compiled applications run faster
  2. The name parameter in the compiler is now fully optional
22.01.2017
  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
31.01.2017
  1. Fixed an issue with concatenation
  2. Added do while loops
Version 1.5.2 (5 updates)
07.02.2017
  1. Added custom keyword plugin feature. This allows custom parsing of symbols and words
13.02.2017
  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
14.02.2017
  1. Structures can now be initalised through a constructor function called _construct
  2. Fixed an issue where objects within objects could not be used.
Version 1.5.3 (29 updates)
14.02.2017
  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
15.02.2017
  1. Improved server stability
  2. Pointers have been renamed accessors. The accessor symbol is still =>
21.02.2017
  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
22.02.2017
  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.
23.02.2017
  1. Fixed an issue within the compiler, whereby all inner compiled strings would be case insensitive.
24.02.2017
  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
26.02.2017
  1. Continuing with the idea of a reusable parser, the CSV parser has been redesigned from the bottom up
21.03.2017
  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)
26.03.2017
  1. Added the option to ignore new lines in the ZPE Parser
  2. Fixed a flaw that prevented objects from being parsed properly
28.03.2017
  1. Added the index of an array through square brackets $v[1] for access only
  2. Minor performance improvements and further refactoring
29.03.2017
  1. Added ZPE to a Git repository for better backtracking
30.03.2017
  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
Version 1.5.4 (11 updates)
31.03.2017
  1. Added the new object declaration format similar to JSON or JavaScript: $v = {first_name : "Jamie", surname : "Balfour"}
01.04.2017
  1. Improved the parser to support any third-party subsequent character array
02.04.2017
  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
05.04.2017
  1. Added a fix to concatenation that will need to reviewed ASAP
06.04.2017
  1. Fixed a performance issue
  2. Fixed an issue when using accessors on keyword 'this'
07.04.2017
  1. Compiler keeps track of constants that have been assigned and throws an error on reassignment
18.05.2017
  1. Fixed an issue with ZACs
19.06.2017
  1. Server threads now share Zenith Engine consumers where they can.
04.10.2017
  1. Added the switch statement, a rewrite of when-is statements

Version 1.6.x

Version 1.6.0 (4 updates)
01.02.2018
  1. Added the --colour option
28.02.2018
  1. Added the force_colour option
30.05.2018
  1. Added the new -w web parser mode to parse web pages
31.05.2018
  1. Fixed an issue in which the get_median function was actually using the same code as the get_range function
Version 1.6.1 (4 updates)
24.07.2018
  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.2 (6 updates)
30.07.2018
  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.3 (13 updates)
01.08.2018
  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
02.08.2018
  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
03.08.2018
  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)
Version 1.6.4 (24 updates)
05.08.2018
  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
06.08.2018
  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
07.08.2018
  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
09.08.2018
  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
11.08.2018
  1. Fixed an issue where associative arrays would not print with a comma
13.08.2018
  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
Version 1.6.5 (4 updates)
27.08.2018
  1. Syntax change for pre-increment and pre-decrement from $++x to ++$x
02.09.2018
  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
Version 1.6.6 (24 updates)
03.09.2018
  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
08.09.2018
  1. Added object inheritance
09.09.2018
  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.
10.09.2018
  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.
11.09.2018
  1. Fixed an issue in which new ZPEObject would set their values and variables to the FRIENDLY only access
14.09.2018
  1. Added the optional 'code' parameter to the exit method
  2. Small performance improvement with the LAMP parser
15.09.2018
  1. Added the cache_value and read_cache_value methods which read a value from a special secured file
16.09.2018
  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)
19.09.2018
  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
Version 1.6.7 (15 updates)
19.09.2018
  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'
24.09.2018
  1. TYPO is now available within ZPE 1.6.7! Finally, type checking can be done with ZPE!
25.09.2018
  1. Fixed an issue with dotted (reference) expressions
  2. Added the sublist method to the list type
26.09.2018
  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
01.10.2018
  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
11.10.2018
  1. New Python inspired fixed arrays defined as
    $v = [] * 4 or $v = ["Hello"] * 4
12.10.2018
  1. Added support for else if as well as elseif in if statements
15.10.2018
  1. Added the get_call_stack method
19.10.2018
  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
Version 1.6.8 (6 updates)
21.10.2018
  1. The GUI mode now handles errors and does not quit on an error
22.10.2018
  1. Command line now accepts negative values correctly
  2. Added the associative_array_create_ordered method which generates a new ordered associative array
25.12.2018
  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
Version 1.6.8.1 (1 updates)
28.12.2018
  1. Added the built-in internal update program. Just running the --update ZAC will update ZPE

Version 1.7.x

Version 1.7.0 (8 updates)
29.12.2018
  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
30.12.2018
  1. Fixed an issue with index access within an object context when assigning values (major bug)
05.01.2019
  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
09.01.2019
  1. Added by reference variables, list_set_at_index already implements this
Version 1.7.1 (14 updates)
10.01.2019
  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
11.01.2019
  1. Added support for by reference variable assignment, e.g. &$y = 10 will change the original $y
13.01.2019
  1. Threaded functions are now written as function threaded x() instead of threaded function x(). The latter has not been removed but deprecated.
15.01.2019
  1. Major improvement to ZenithParser which makes it perform 10% faster than before.
16.01.2019
  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
18.01.2019
  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
26.01.2019
  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]}.
27.01.2019
  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
30.01.2019
  1. Replaced the LAMP with LAME, a much faster and more accurate evaluator for logic and maths
Version 1.7.2 (10 updates)
02.02.2019
  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
03.02.2019
  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
12.02.2019
  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
13.02.2019
  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
14.02.2019
  1. Fixed an issue which prevented the _construct method from being created on an object
Version 1.7.3 (21 updates)
14.02.2019
  1. Added the get_password_input function
25.02.2019
  1. Further improvements to LAME performance
27.02.2019
  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
01.03.2019
  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.
03.03.2019
  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
05.03.2019
  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
06.03.2019
  1. Added more @ documentation features
08.03.2019
  1. Fixed an issue with index access in an evaluation
Version 1.7.4 (16 updates)
10.03.2019
  1. Added short circuit evaluation of logic
  2. Logic parser completely rewritten which allows complex conditions to be evaluated quicker
11.03.2019
  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
12.03.2019
  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
13.03.2019
  1. Complete rewrite of both structures and objects to make them more consistent
  2. Nested structures/classes are now available
17.03.2019
  1. Added the implies and iff functions
  2. Added the nor function
22.03.2019
  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
23.03.2019
  1. Added more online features
Version 1.7.5 (9 updates)
24.03.2019
  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
25.03.2019
  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
08.04.2019
  1. Moved the output from the compiler from the internal method
  2. General performance improvements
Version 1.7.6 (15 updates)
09.04.2019
  1. Added the new console window for output for the GUI mode.
  2. GUI console has a much cleaner look
13.04.2019
  1. Fixed an issue in which the floor and ceiling functions returned a double instead of an integer
15.04.2019
  1. Added support for larger numbers
19.04.2019
  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
20.04.2019
  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
21.04.2019
  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
Version 1.7.7 (5 updates)
01.05.2019
  1. Added the EXACTLY EQUAL === comparison
  2. Added the --json option to the -v (version) ZAC
04.05.2019
  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
05.05.2019
  1. The display of objects when printed is now much more like PHP
Version 1.7.8 (7 updates)
10.05.2019
  1. Fixed an issue with functions declared on anonymous objects being inaccessible
12.05.2019
  1. Added the list_find_duplicates function
17.05.2019
  1. New compiler optimisations mean that compiled programs run even faster
06.06.2019
  1. Variables are now shared across chunks in the web parser mode
16.06.2019
  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
29.06.2019
  1. Added the ZPEHTMLBuilder object
Version 1.7.9 (14 updates)
02.07.2019
  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
08.07.2019
  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
09.07.2019
  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?>
10.07.2019
  1. Fixed an issue where some whitespace characters were ignored by the parser (e.g. ASCII 160)
13.07.2019
  1. Performance improvements
14.07.2019
  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
Version 1.7.10 (7 updates)
28.07.2019
  1. Fixed an issue with quotes in quotes when escaping them
30.07.2019
  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
31.07.2019
  1. Replaced the menubar in macOS with the system menu bar for consistency
01.08.2019
  1. Added the tkmenu library to give macOS editors the macOS menu bar instead of the in window version
02.08.2019
  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
Version 1.7.11 (12 updates)
07.08.2019
  1. The is_set method now works on object properties, including object properties containing objects.
  2. Added the write function
25.08.2019
  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
30.08.2019
  1. Added the ZenithParser object
02.09.2019
  1. More changes to the GUI including a new dark mode (only on macOS currently)
13.09.2019
  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
28.09.2019
  1. Fixed a long standing bug that caused objects to not update when a reference was updated when no main function was provided
29.09.2019
  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
Version 1.7.12 (7 updates)
26.10.2019
  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
10.11.2019
  1. Fixed an issue in which quotes were removed from a string if used inside another string
02.12.2019
  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
05.12.2019
  1. Importing is now done with the import keyword and is no longer a function.
Version 1.7.13 (5 updates)
07.12.2019
  1. Minor performance improvements
  2. Fix made to the way plug ins work
  3. MySQL connector plug in now available
22.12.2019
  1. Added create_list to the ZPEUI object
30.12.2019
  1. Added the wake_on_lan function

Version 1.8.x

Version 1.8.1 (16 updates)
01.01.2020
  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
03.01.2020
  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
04.01.2020
  1. Added a new option to the shutdown command that allows a time to be specified from the current time to shutdown at
05.01.2020
  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
06.01.2020
  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
Version 1.8.2 (13 updates)
06.01.2020
  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
11.01.2020
  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
12.01.2020
  1. The -r and -i modes have been switched. -i is now the interactive interpreter and -r is the runtime
24.01.2020
  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
10.02.2020
  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
15.02.2020
  1. Added the speak function, however, this function is currently experimental and works only on a Mac
Version 1.8.3 (7 updates)
08.03.2020
  1. Fixed an issue that meant that ZPEObject values would sometimes not save correctly when cached.
18.03.2020
  1. Added the list_count_occurrences function
  2. Added the list_count_if function
22.03.2020
  1. Added support for null values in the JSON parser.
24.03.2020
  1. Added the inline documents syntax
25.03.2020
  1. Fixed an issue in which imported libraries were not accessible in all cases
  2. Added the say alias for the speak function
Version 1.8.4 (4 updates)
29.03.2020
  1. Improved the in-line document syntax by supporting variables
02.04.2020
  1. Changed the domain for the installer to jamiebalfour.scot
26.04.2020
  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
Version 1.8.5 (7 updates)
27.04.2020
  1. ZENServer now searches for updates automatically when set in the properties file to do so
28.04.2020
  1. Fixed an issue in which object comparison through the _compare method didn't work
10.05.2020
  1. The --client argument is no longer required to specify a ZENClient, as the -h argument informs the application of this
11.05.2020
  1. Added the file_get_bytes function
  2. Removed the type parameter from the file_get_contents function, making it only read text
20.05.2020
  1. Added the play_audio function which plays an audio stream
23.05.2020
  1. Changed the play_audio function to open_audio_stream which returns a ZPEAudioStream object
Version 1.8.6 (15 updates)
26.05.2020
  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() { } }
02.06.2020
  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
04.06.2020
  1. Added the list_drives function which lists all root drives
06.06.2020
  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
07.06.2020
  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
08.06.2020
  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
09.06.2020
  1. Deprecated the ZENWebServer
  2. Added the get_ip_address function which will return the current system's IP address
10.06.2020
  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
Version 1.8.7 (11 updates)
16.06.2020
  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)
17.06.2020
  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
19.06.2020
  1. Added the ZPECalculator object, which contains an expression compiler used to evaluate an expression
21.06.2020
  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
22.06.2020
  1. Introduction of ZPEKit (pronounced zippy kit) means that the YASSCompiler is not accessible publicly but can be accessed through ZPEKit
06.07.2020
  1. Improved the way in which replacements are done in the graphical editor
10.07.2020
  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
Version 1.8.8 (6 updates)
15.07.2020
  1. Programs compiled with a passcode are now encrypted
  2. Fixed a few bugs that seemed to occur within the GUI mode
18.07.2020
  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
19.07.2020
  1. Added in a simple send> command to the ZENClient that allows the sending of files via the client to the ZENServer
20.07.2020
  1. Fixed an issue and improved performance of the new send> command within the ZENClient and ZENServer
22.07.2020
  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
Version 1.8.9 (23 updates)
24.07.2020
  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
27.07.2020
  1. Added the require keyword as an alternative for import
01.08.2020
  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
02.08.2020
  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
05.08.2020
  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)
Version 1.8.10 (21 updates)
06.08.2020
  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
07.08.2020
  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
08.08.2020
  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
09.08.2020
  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
11.08.2020
  1. The -p mode now supports inserting a property value from the command line by leaving out the -v argument
28.08.2020
  1. Added the list_zpe_aliases function
02.09.2020
  1. Added support for ZPEObjects to the JSON parser
04.09.2020
  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
Version 1.8.11 (10 updates)
26.09.2020
  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
01.10.2020
  1. Added infinite parameters to functions
14.10.2020
  1. ZPE now detects headless systems before launching the GUI
21.10.2020
  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
Version 1.8.12 (8 updates)
28.10.2020
  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
29.10.2020
  1. Stricter variable name checking
30.10.2020
  1. The interactive interpreter no longer adds variables back into the global function but instead the main function
07.11.2020
  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
Version 1.8.13 (3 updates)
13.11.2020
  1. Fixed an issue with the ZPEString used as a key in an associative array
  2. Fixed an issue with assertion and comparing strings
04.12.2020
  1. Added the ZENClient object that allows the client to run in pure YASS code

Version 1.9.x

Version 1.9.1 (8 updates)
31.12.2020
  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
16.01.2021
  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
23.01.2021
  1. Fixed an issue that meant that negative binary numbers (using two's compliment) padded with 0s and were excessively long
09.02.2021
  1. Added the match statement, similar to the case statement
  2. Added the else option in the match statement
Version 1.9.2 (6 updates)
16.02.2021
  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
17.02.2021
  1. Added the generate_random_string predefined function
23.03.2021
  1. Added the *=, /= and ^= operators
  2. Updated the increment/decrement operators to use long values rather than integer
Version 1.9.3 (8 updates)
04.04.2021
  1. Minor performance improvements
08.04.2021
  1. Added the new optional let keyword, e.g. let $x = 10
11.04.2021
  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)
Version 1.9.4 (6 updates)
12.04.2021
  1. Added a new data type, the record structure: e.g.
    $v = [x = 65]
    print($v.x)
13.04.2021
  1. Added the new log predefined function
15.04.2021
  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
Version 1.9.5 (14 updates)
22.04.2021
  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
24.04.2021
  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
25.04.2021
  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))
17.06.2021
  1. Added the set_id to all UI objects
26.06.2021
  1. Added the get_remote_ip_address command to retrieve the IP address on the public Internet
Version 1.9.6 (5 updates)
27.06.2021
  1. Added the be keyword, e.g. let x be 10
28.06.2021
  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
Version 1.9.7 (10 updates)
29.06.2021
  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
30.06.2021
  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
01.07.2021
  1. Structures can now have properties defined with a data type
Version 1.9.8 (4 updates)
02.07.2021
  1. Re-added support for internal/local structures within a function
12.07.2021
  1. Added more information about why a login hasn't worked for ZPE Online
  2. Fixed a long standing issue with modular arithmetic
09.08.2021
  1. Added the help program to the interactive interpreter
Version 1.9.9 (10 updates)
20.09.2021
  1. Fixed an issue in which the get_definition function would return an incomparable string
  2. Added the format_string function
21.09.2021
  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)
22.09.2021
  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
Version 1.9.10 (15 updates)
25.09.2021
  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
04.10.2021
  1. String comparison has now been improved to allow $a < $b to evaluate which string comes first
06.10.2021
  1. Added the .copy method to ZPELists
  2. Renamed the getc method of ZPELists to get_circular (this was a user-unfriendly name)
09.10.2021
  1. Allows disabling of compiler includes using the properties file
10.10.2021
  1. Added the list_remove_all function
14.10.2021
  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
20.10.2021
  1. Fixed an issue with the interactive interpreter that came from the fix made a few days back
01.11.2021
  1. Added the optional decimal_places parameter to the round function
  2. Fixed an issue with input reading in GUI mode
Version 1.9.11 (3 updates)
03.11.2021
  1. Added the options to visit the ZPE Online website and public ZPE Online repository
07.11.2021
  1. New GUI console allows text input
10.11.2021
  1. Further improved the GUI console performance and text input
Version 1.9.12 (8 updates)
12.11.2021
  1. Moved static runtime variables from the Main class to the RunningInstance class
13.11.2021
  1. Added the sign function which determines if a value is positive or negative
16.11.2021
  1. Updated the counter function manual to reflect that it works on more than just strings
04.12.2021
  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
11.12.2021
  1. Fixed the write function
12.12.2021
  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
Version 1.9.13 (15 updates)
19.12.2021
  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
26.12.2021
  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
28.12.2021
  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

Version 1.10.x

Version 1.10.1 (6 updates)
01.01.2022
  1. Added the ZPE Online includes feature. Simply type: includes online {code} where {code} is the online code
05.01.2022
  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
09.01.2022
  1. Small performance improvements using cached files (not yet released)
15.01.2022
  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.
Version 1.10.2 (10 updates)
15.01.2022
  1. The beep function is now faster and more responsive
23.01.2022
  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
02.02.2022
  1. Added the OpenJDK/JFX requirements to the class path
  2. ZPE now bundles the open JFX package - this makes ZPE 10x larger :(
16.02.2022
  1. The ZPEHelperFunctions have moved to the jamiebalfour.zpe.core package
17.02.2022
  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
18.02.2022
  1. Huge changes to the GUI that make it more functional
  2. New additions to the UI
Version 1.10.3 (10 updates)
18.02.2022
  1. Syntax highlighting is now a feature of the editor
19.02.2022
  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
20.02.2022
  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
21.02.2022
  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
Version 1.10.4 (7 updates)
15.03.2022
  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
31.03.2022
  1. Made an improvement to by value performance
17.04.2022
  1. Fixed an issue in which a ZEN Client would crash if the server responded that a command was not supported
18.04.2022
  1. Shutdown command no longer requires any arguments and by default carries out a shutdown
21.04.2022
  1. Changes have been made to the installer package that improve stability
  2. Added the --version ZAC
Version 1.10.5 (4 updates)
21.04.2022
  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
23.04.2022
  1. Added in the new record structure, see https://www.jamiebalfour.scot/projects/zpe/documentation/data-types/record/
05.05.2022
  1. ZENServer can now be started from the GUI mode.
Version 1.10.6 (5 updates)
13.05.2022
  1. Added the timeout parameter to the ping function
23.05.2022
  1. Added the get_hostname function
01.06.2022
  1. The std_out function now only takes one parameter but works faster than the print function by asking the value to output itself
19.06.2022
  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
Version 1.10.7 (13 updates)
03.07.2022
  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
05.07.2022
  1. -m has become -d mode again for debug mode.
07.07.2022
  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
13.07.2022
  1. Added the XEN mode to ZPE, which will be used in the future for cron jobs
17.07.2022
  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
18.07.2022
  1. Added support for auto-prepending files to a ZPE program.
Version 1.10.8 (19 updates)
19.07.2022
  1. Added return types to functions, e.g.
    function test() {
    return 10
    } => number
20.07.2022
  1. Strong typing for function returns has been added using the syntax
    function testFunc() : number
24.07.2022
  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
26.07.2022
  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
06.08.2022
  1. When opening a compiled file, the password string is hidden as the user types it in
07.08.2022
  1. Minor performance improvements
10.08.2022
  1. Fixed an issue in which objects would be downcast. For example from ZPEDateObject to a standard Object without properties
12.08.2022
  1. Fixed an issue in which the csv_encode function did not return a ZPEString but return a string, causing a type error
25.08.2022
  1. Added the option_base_1 property allowing array access to start at 1
Version 1.10.9 (4 updates)
04.09.2022
  1. Changed the way in which the ZPE environment detects the install path
10.09.2022
  1. The Zenith Parsing Engine is now a separate module from the main ZPE package and will be maintained separately
16.09.2022
  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
Version 1.10.10 (4 updates)
02.10.2022
  1. Added the new MQTT object which will allow MQTT publish and subscribe functionality
15.10.2022
  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
Version 1.10.11 (11 updates)
17.10.2022
  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
22.10.2022
  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
27.10.2022
  1. Added the http_download function
13.11.2022
  1. Added the int function as an alias to the value function
16.11.2022
  1. Code must be validated before uploading to ZPE Online
  2. The auto_input function now recognises Boolean values true and false
20.11.2022
  1. Added support for short expressions in if statements e.g.
    $x > 10 and < 20
Version 1.10.12 (7 updates)
25.11.2022
  1. Added the AutoGUI object
27.11.2022
  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
29.11.2022
  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

Version 1.11.x

Version 1.11.1 (5 updates)
21.01.2023
  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)
22.01.2023
  1. jANSI library bumped up to 2.1.0
Version 1.11.4 (15 updates)
04.02.2023
  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)
08.03.2023
  1. Added union return types
    function foo(integer $bar) : real | integer
01.04.2023
  1. Changes to the record structure that mean that fields are accessed as $x.name = "Jamie" or print($x.name)
02.04.2023
  1. Records can parameterised on construction, defining values for the record
  2. Real and integer data types are back as the number data type
07.04.2023
  1. Added a minor fix to prevent double undo in the editor (removed accelerators from the menu items)
10.04.2023
  1. Added a new startup option called SHOW_COMPILE_COMPLETE_MESSAGE which shows a message when compilation is done with the -r ZAC
30.04.2023
  1. There is now a new group of functions called I/O. These functions have been moved from the Core group.
Version 1.11.6 (1 updates)
03.06.2023
  1. Huge performance improvements that make loading much faster due to the use of static code and reflection
Version 1.11.8 (7 updates)
26.08.2023
  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
30.08.2023
  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
Version 1.11.9 (16 updates)
31.08.2023
  1. Added the list_is_empty function to check if a list is empty (since removed)
02.09.2023
  1. Further improvements to static underlying methods mean that the ZPE takes less memory and starts faster
03.09.2023
  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
05.09.2023
  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
08.09.2023
  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.
09.09.2023
  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.
Version 1.11.10 (9 updates)
06.10.2023
  1. Added the new YASS Unfold feature.
08.10.2023
  1. For, For To, While, Assignment, Logical Conditions, Variables, Function definitions, Function calls have all been added to YASS Unfold
09.10.2023
  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.
14.10.2023
  1. Further improved the English syntax of the YASS Unfold feature
  2. Added support for exporting to HTML in YASS Unfold
17.10.2023
  1. The build version and time are now stored in a text file in the program to make building quicker
Version 1.11.11 (3 updates)
19.10.2023
  1. The changelog is now bundled and read locally rather than from jamiebalfour.scot.
  2. Better handling of editor start issues on headless machines
15.11.2023
  1. Added the list reference functions LIST.map, LIST.filter and LIST.reduce based on the JavaScript functions
Version 1.11.12 (7 updates)
22.12.2023
  1. Fixed an issue with undo not working in the editor, causing the program to crash
30.12.2023
  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

Version 1.12.x

Version 1.12.1 (3 updates)
05.01.2024
  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.12.3 (2 updates)
17.02.2024
  1. Fixed a bug in which ZPE would fail to start under certain circumstances down to a permission level setting not being set
16.03.2024
  1. LAME X2 is now ready and available in the latest version of ZPE.
Version 1.12.4 (13 updates)
17.03.2024
  1. Made minor changes in LAME X2 that would improve readability of code and performance of LAME
22.03.2024
  1. Added the jLine tool to interactive interpreter to allow line history to be accessed within the interactive interpreter (no need for rlWrap)
23.03.2024
  1. Line history in interactive interpreter is now saved and loaded
31.03.2024
  1. For...To now supports mathematical expressions in the maximum (e.g. for $i = 0 to $x + 3)
01.04.2024
  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 :)
02.04.2024
  1. Not directly ZPE, but the Zenith Parsing Engine has been changed to better support escape characters
03.04.2024
  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
10.04.2024
  1. Fixed the aliases feature, e.g. function x aliases print
11.04.2024
  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
Version 1.12.5 (16 updates)
13.04.2024
  1. Added the const keyword, e.g. const x = 10
15.04.2024
  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
21.04.2024
  1. Fixed an issue in which unbound typed parameters would not correctly be passed to the program
24.04.2024
  1. The compiler performers a post check on function definition declarations to check if they are actually meant to be references to variables
  2. Made a change to the auto_input function that means if a number is meant to be an integer, it returns it without decimal places
25.04.2024
  1. Fixed an issue that seemed to randomly appear with association in for...each loops
  2. Added support for object iteration of public properties. For example, $o = {"Forename" : "Jamie", "Surname" : "Balfour"} for each ($o as $prop) { print($prop) }
26.04.2024
  1. Removed the ZPEIterable interface as it was no longer being used.
10.05.2024
  1. Added an additional challenge to check if AWT is installed before trying to launch the graphical editor. This stops installations such as native images trying to launch it.
11.05.2024
  1. Improved the transpiler system to make it easier to make transpilers
12.05.2024
  1. Removed the check for AWT as it was causing issues with native builds
  2. Removed the ConvertibleFunction class
  3. Transpiled programs no longer are given a function list but the whole AST
15.05.2024
  1. Removed the GOTO and LABEL bytecode as they were no longer needed
Version 1.12.6 (17 updates)
17.05.2024
  1. Removed the MQTT object from the ZPE Programming Environment, thus reducing the size (this is now an external library)
  2. Added the ability to transpile code from the built-in editor
19.05.2024
  1. Changed the plugin interface to use camel case on all exposed functions and to ensure that they begin with get. E.g. getParameters.
  2. Removed the LAME interface, LAME is now a core part of ZPE and therefore needs no interface.
20.05.2024
  1. Finally fixed the issue in which $x[0]->$distance did not work.
  2. Added the -n option to --update allowing the downloading of 'nightly' builds
21.05.2024
  1. Added support for variables called $count, $length, $record, $default through a list of $-bound variable names that use keywords
  2. Removed the UIBuilder object and moved it to a plugin.
28.05.2024
  1. Removed the BECL (Balfour's Enterprise Class Library, one of my oldest libraries that I started developing in C# 20 years ago) library as there was code duplication with the HelperFunctions library.
29.05.2024
  1. Transpilers require a name for the transpiler itself now.
30.05.2024
  1. Constants are now listed in the -h config option.
  2. Changed ZPE_MAJOR_VERSION, ZPE_MINOR_VERSION and ZPE_CLI_VERSION constants to be updated automatically with the version of ZPE they are bundled with.
  3. Added the ZPE_VERSION_BUILD constant.
01.06.2024
  1. Function traversal is now done in a static manner, meaning higher performance and lower memory footprints for function instantiation
  2. ZPE now has a stunning new logo on macOS.
  3. Fixed an issue in which internal aliases were not working. This might actually have existed for some time now as version 1.12.5 also has this bug.
  4. Removed the power, square and cube functions (these were deprecated some time ago).
Version 1.12.7 (15 updates)
08.06.2024
  1. Another fix to FunctionReferences that means that if the function does not exist in any way, it returns undefined
13.06.2024
  1. Added the iif function
  2. Removed the iff function due to similar names and the function no longer serving a purpose.
21.06.2024
  1. Importing libraries or other files now works completely differently (https://www.jamiebalfour.scot/blog/posts/zpe-1127-changes-to-libraries)
  2. The stdLib file is now bundled with ZPE and will be offered during first run.
22.06.2024
  1. Added the import lib as name, e.g. import stdLib as lib, $l = new lib
25.06.2024
  1. Changes to the error handling in ZPE with the addition of ZPERuntimeErrors. This paves the way for ZIDE and better error handling in ZPE.
26.06.2024
  1. The new ExitHalt is a new means of creating an exit internally. This has paved the way for breakpoints in ZPE and ZIDE.
  2. Fixed an issue in which PERMISSION_LEVEL wasn't read correctly unless it was lowercase in the properties file
  3. The -d mode is now the same as -r except with debugging turned on
  4. Breakpoints can now be added to code with #breakpoint# in them.
27.06.2024
  1. Added the new Breakpoint Watch window to the ZPE editor
  2. Added the new Run code with debugging on option to both the editor and the console
29.06.2024
  1. The run_in_thread command is now deprecated scheduled for removal in ZPE 1.12.9.
01.07.2024
  1. Added support for unescaped strings using the @ sign in front of a string. E.g. @"Hello \"
Version 1.12.8 (48 updates)
02.07.2024
  1. Fixed an issue in which ZPE would try to compile the standard library every time it starts up
05.07.2024
  1. Updated with the latest version of the Zenith Parsing Engine.
10.07.2024
  1. Fixed an issue in which the shell command would return a non-ZPE compliant data typed value.
  2. Ensured that cache_values.prop is now stored in the ZPE folder.
11.07.2024
  1. Added simple support for namespaces in YASS and ZPE (this is the first new version of YASS in a while, known as YASS 24.7)
  2. Added a feature to ZPEKit to list all byte codes and their definition
  3. Dropped the copyof keyword
  4. Added the bytes option to the -h ZAC to list all byte codes in ZPE
13.07.2024
  1. Added the new ZPERandomizer for generating random numbers and the like
  2. Match statements require a semi-colon at the end of each expression (part of YASS 24.7)
  3. Brackets and other delimiters no longer format in keyword format in the editor
  4. The editor now correctly moves the caret back in between quotes or brackets
14.07.2024
  1. Added a new logs folder in the main ZPE folder where old logs are kept
  2. Logs are limited to just the five most recent log files
  3. When a file is downloaded from ZPE Online it precompiled by ZPE as a library
  4. The main ZPE introduction is considerably more detailed now
  5. Tidied up the main ZPE introduction (e.g. all instances of $file_path and $filepath are now $filepath)
15.07.2024
  1. Fixed an issue in which string comparison was not carried out correctly
  2. Started to add Java documentation to functions that are exposed
  3. Changed the ZPE -o so that if no ZAC value is provided it will list everything
  4. std_out always prints to the same line
18.07.2024
  1. Removed the exit_on_fail parameter for the Interpret function on the runtime
  2. The ZenithParsingEngine now properly catches substring errors and passes to ZPE so they can be handled
  3. When the getIndex function is called on an non-indexed type it throws a new UnacceptableTypeException that can be handled
19.07.2024
  1. Added support for the null value in a JSON file
  2. Moved the exceptions from the package jamiebalfour.zpe.core to jamiebalfour.zpe
  3. The CompileError is now the CompileException and the ZPERuntimeError is now the ZPERuntimeException
  4. Fixed an issue in which the --man always stated that any function returned an object data type
  5. Fixed an issue in which the rate and voice parameters in the speak command were not optional. Also updated the manual heading for the speak command as a result of this update and bumped the command to version 1.1
21.07.2024
  1. Updated and simplified the regexps in the byte codes
  2. Regexps are now precompiled
  3. The match expression now only supports one else statement and this must be the last statement in the match expression
  4. Added the NoEntryPoint and NonExectuableFile exceptions
22.07.2024
  1. New ZPEException class is the basis of all ZPE-based exceptions
  2. Handling of errors focuses more of the handling of ZPEExceptions
23.07.2024
  1. Handling of errors is slightly better than it was before.
  2. Try-catch statement has been improved to handle errors better.
25.07.2024
  1. Further removal of public methods from ZPERuntimeEnvironment, which can now only be accessed through the protection of the ZPEKit module.
  2. Fixed an issue in the ZenithParsingEngine that meant that words were not returned when it saw a quote mark after being toggled.
28.07.2024
  1. Updated the ZPERuntimeException to be the basis of all runtime-based exceptions
  2. Added support for declaring a return type with -> as well as the colon. For example:
    function test(string x) -> string
29.07.2024
  1. Anonymous functions in the short form, i.e. () => {}, now support $-unbound parameters.
  2. Added static function calls and static methods in objects
  3. Added support for namespaces with static methods
  4. There is now much stricter rules for the Exception object to be thrown and the throw_error function is now only able to throw Exception objects.
  5. Fixed an issue in which constructors would not always be called when an object was created
30.07.2024
  1. Although the protected scope has been available for a long time, it is now also a keyword that can be specified for conciseness

Since version 1.2.01, there have been 1269 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.8 (48 updates)
30.07.2024
  1. Although the protected scope has been available for a long time, it is now also a keyword that can be specified for conciseness
29.07.2024
  1. Anonymous functions in the short form, i.e. () => {}, now support $-unbound parameters.
  2. Added static function calls and static methods in objects
  3. Added support for namespaces with static methods
  4. There is now much stricter rules for the Exception object to be thrown and the throw_error function is now only able to throw Exception objects.
  5. Fixed an issue in which constructors would not always be called when an object was created
28.07.2024
  1. Updated the ZPERuntimeException to be the basis of all runtime-based exceptions
  2. Added support for declaring a return type with -> as well as the colon. For example:
    function test(string x) -> string
25.07.2024
  1. Further removal of public methods from ZPERuntimeEnvironment, which can now only be accessed through the protection of the ZPEKit module.
  2. Fixed an issue in the ZenithParsingEngine that meant that words were not returned when it saw a quote mark after being toggled.
23.07.2024
  1. Handling of errors is slightly better than it was before.
  2. Try-catch statement has been improved to handle errors better.
22.07.2024
  1. New ZPEException class is the basis of all ZPE-based exceptions
  2. Handling of errors focuses more of the handling of ZPEExceptions
21.07.2024
  1. Updated and simplified the regexps in the byte codes
  2. Regexps are now precompiled
  3. The match expression now only supports one else statement and this must be the last statement in the match expression
  4. Added the NoEntryPoint and NonExectuableFile exceptions
19.07.2024
  1. Added support for the null value in a JSON file
  2. Moved the exceptions from the package jamiebalfour.zpe.core to jamiebalfour.zpe
  3. The CompileError is now the CompileException and the ZPERuntimeError is now the ZPERuntimeException
  4. Fixed an issue in which the --man always stated that any function returned an object data type
  5. Fixed an issue in which the rate and voice parameters in the speak command were not optional. Also updated the manual heading for the speak command as a result of this update and bumped the command to version 1.1
18.07.2024
  1. Removed the exit_on_fail parameter for the Interpret function on the runtime
  2. The ZenithParsingEngine now properly catches substring errors and passes to ZPE so they can be handled
  3. When the getIndex function is called on an non-indexed type it throws a new UnacceptableTypeException that can be handled
15.07.2024
  1. Fixed an issue in which string comparison was not carried out correctly
  2. Started to add Java documentation to functions that are exposed
  3. Changed the ZPE -o so that if no ZAC value is provided it will list everything
  4. std_out always prints to the same line
14.07.2024
  1. Added a new logs folder in the main ZPE folder where old logs are kept
  2. Logs are limited to just the five most recent log files
  3. When a file is downloaded from ZPE Online it precompiled by ZPE as a library
  4. The main ZPE introduction is considerably more detailed now
  5. Tidied up the main ZPE introduction (e.g. all instances of $file_path and $filepath are now $filepath)
13.07.2024
  1. Added the new ZPERandomizer for generating random numbers and the like
  2. Match statements require a semi-colon at the end of each expression (part of YASS 24.7)
  3. Brackets and other delimiters no longer format in keyword format in the editor
  4. The editor now correctly moves the caret back in between quotes or brackets
11.07.2024
  1. Added simple support for namespaces in YASS and ZPE (this is the first new version of YASS in a while, known as YASS 24.7)
  2. Added a feature to ZPEKit to list all byte codes and their definition
  3. Dropped the copyof keyword
  4. Added the bytes option to the -h ZAC to list all byte codes in ZPE
10.07.2024
  1. Fixed an issue in which the shell command would return a non-ZPE compliant data typed value.
  2. Ensured that cache_values.prop is now stored in the ZPE folder.
05.07.2024
  1. Updated with the latest version of the Zenith Parsing Engine.
02.07.2024
  1. Fixed an issue in which ZPE would try to compile the standard library every time it starts up
Version 1.12.7 (15 updates)
01.07.2024
  1. Added support for unescaped strings using the @ sign in front of a string. E.g. @"Hello \"
29.06.2024
  1. The run_in_thread command is now deprecated scheduled for removal in ZPE 1.12.9.
27.06.2024
  1. Added the new Breakpoint Watch window to the ZPE editor
  2. Added the new Run code with debugging on option to both the editor and the console
26.06.2024
  1. The new ExitHalt is a new means of creating an exit internally. This has paved the way for breakpoints in ZPE and ZIDE.
  2. Fixed an issue in which PERMISSION_LEVEL wasn't read correctly unless it was lowercase in the properties file
  3. The -d mode is now the same as -r except with debugging turned on
  4. Breakpoints can now be added to code with #breakpoint# in them.
25.06.2024
  1. Changes to the error handling in ZPE with the addition of ZPERuntimeErrors. This paves the way for ZIDE and better error handling in ZPE.
22.06.2024
  1. Added the import lib as name, e.g. import stdLib as lib, $l = new lib
21.06.2024
  1. Importing libraries or other files now works completely differently (https://www.jamiebalfour.scot/blog/posts/zpe-1127-changes-to-libraries)
  2. The stdLib file is now bundled with ZPE and will be offered during first run.
13.06.2024
  1. Added the iif function
  2. Removed the iff function due to similar names and the function no longer serving a purpose.
08.06.2024
  1. Another fix to FunctionReferences that means that if the function does not exist in any way, it returns undefined
Version 1.12.6 (17 updates)
01.06.2024
  1. Function traversal is now done in a static manner, meaning higher performance and lower memory footprints for function instantiation
  2. ZPE now has a stunning new logo on macOS.
  3. Fixed an issue in which internal aliases were not working. This might actually have existed for some time now as version 1.12.5 also has this bug.
  4. Removed the power, square and cube functions (these were deprecated some time ago).
30.05.2024
  1. Constants are now listed in the -h config option.
  2. Changed ZPE_MAJOR_VERSION, ZPE_MINOR_VERSION and ZPE_CLI_VERSION constants to be updated automatically with the version of ZPE they are bundled with.
  3. Added the ZPE_VERSION_BUILD constant.
29.05.2024
  1. Transpilers require a name for the transpiler itself now.
28.05.2024
  1. Removed the BECL (Balfour's Enterprise Class Library, one of my oldest libraries that I started developing in C# 20 years ago) library as there was code duplication with the HelperFunctions library.
21.05.2024
  1. Added support for variables called $count, $length, $record, $default through a list of $-bound variable names that use keywords
  2. Removed the UIBuilder object and moved it to a plugin.
20.05.2024
  1. Finally fixed the issue in which $x[0]->$distance did not work.
  2. Added the -n option to --update allowing the downloading of 'nightly' builds
19.05.2024
  1. Changed the plugin interface to use camel case on all exposed functions and to ensure that they begin with get. E.g. getParameters.
  2. Removed the LAME interface, LAME is now a core part of ZPE and therefore needs no interface.
17.05.2024
  1. Removed the MQTT object from the ZPE Programming Environment, thus reducing the size (this is now an external library)
  2. Added the ability to transpile code from the built-in editor
Version 1.12.5 (16 updates)
15.05.2024
  1. Removed the GOTO and LABEL bytecode as they were no longer needed
12.05.2024
  1. Removed the check for AWT as it was causing issues with native builds
  2. Removed the ConvertibleFunction class
  3. Transpiled programs no longer are given a function list but the whole AST
11.05.2024
  1. Improved the transpiler system to make it easier to make transpilers
10.05.2024
  1. Added an additional challenge to check if AWT is installed before trying to launch the graphical editor. This stops installations such as native images trying to launch it.
26.04.2024
  1. Removed the ZPEIterable interface as it was no longer being used.
25.04.2024
  1. Fixed an issue that seemed to randomly appear with association in for...each loops
  2. Added support for object iteration of public properties. For example, $o = {"Forename" : "Jamie", "Surname" : "Balfour"} for each ($o as $prop) { print($prop) }
24.04.2024
  1. The compiler performers a post check on function definition declarations to check if they are actually meant to be references to variables
  2. Made a change to the auto_input function that means if a number is meant to be an integer, it returns it without decimal places
21.04.2024
  1. Fixed an issue in which unbound typed parameters would not correctly be passed to the program
15.04.2024
  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
13.04.2024
  1. Added the const keyword, e.g. const x = 10
Version 1.12.4 (13 updates)
11.04.2024
  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
10.04.2024
  1. Fixed the aliases feature, e.g. function x aliases print
03.04.2024
  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
02.04.2024
  1. Not directly ZPE, but the Zenith Parsing Engine has been changed to better support escape characters
01.04.2024
  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 :)
31.03.2024
  1. For...To now supports mathematical expressions in the maximum (e.g. for $i = 0 to $x + 3)
23.03.2024
  1. Line history in interactive interpreter is now saved and loaded
22.03.2024
  1. Added the jLine tool to interactive interpreter to allow line history to be accessed within the interactive interpreter (no need for rlWrap)
17.03.2024
  1. Made minor changes in LAME X2 that would improve readability of code and performance of LAME
Version 1.12.3 (2 updates)
16.03.2024
  1. LAME X2 is now ready and available in the latest version of ZPE.
17.02.2024
  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)
05.01.2024
  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)
30.12.2023
  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
22.12.2023
  1. Fixed an issue with undo not working in the editor, causing the program to crash
Version 1.11.11 (3 updates)
15.11.2023
  1. Added the list reference functions LIST.map, LIST.filter and LIST.reduce based on the JavaScript functions
19.10.2023
  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)
17.10.2023
  1. The build version and time are now stored in a text file in the program to make building quicker
14.10.2023
  1. Further improved the English syntax of the YASS Unfold feature
  2. Added support for exporting to HTML in YASS Unfold
09.10.2023
  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.
08.10.2023
  1. For, For To, While, Assignment, Logical Conditions, Variables, Function definitions, Function calls have all been added to YASS Unfold
06.10.2023
  1. Added the new YASS Unfold feature.
Version 1.11.9 (16 updates)
09.09.2023
  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.
08.09.2023
  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.
05.09.2023
  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
03.09.2023
  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
02.09.2023
  1. Further improvements to static underlying methods mean that the ZPE takes less memory and starts faster
31.08.2023
  1. Added the list_is_empty function to check if a list is empty (since removed)
Version 1.11.8 (7 updates)
30.08.2023
  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
26.08.2023
  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)
03.06.2023
  1. Huge performance improvements that make loading much faster due to the use of static code and reflection
Version 1.11.4 (15 updates)
30.04.2023
  1. There is now a new group of functions called I/O. These functions have been moved from the Core group.
10.04.2023
  1. Added a new startup option called SHOW_COMPILE_COMPLETE_MESSAGE which shows a message when compilation is done with the -r ZAC
07.04.2023
  1. Added a minor fix to prevent double undo in the editor (removed accelerators from the menu items)
02.04.2023
  1. Records can parameterised on construction, defining values for the record
  2. Real and integer data types are back as the number data type
01.04.2023
  1. Changes to the record structure that mean that fields are accessed as $x.name = "Jamie" or print($x.name)
08.03.2023
  1. Added union return types
    function foo(integer $bar) : real | integer
04.02.2023
  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)
22.01.2023
  1. jANSI library bumped up to 2.1.0
21.01.2023
  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)
29.11.2022
  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
27.11.2022
  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
25.11.2022
  1. Added the AutoGUI object
Version 1.10.11 (11 updates)
20.11.2022
  1. Added support for short expressions in if statements e.g.
    $x > 10 and < 20
16.11.2022
  1. Code must be validated before uploading to ZPE Online
  2. The auto_input function now recognises Boolean values true and false
13.11.2022
  1. Added the int function as an alias to the value function
27.10.2022
  1. Added the http_download function
22.10.2022
  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
17.10.2022
  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)
15.10.2022
  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
02.10.2022
  1. Added the new MQTT object which will allow MQTT publish and subscribe functionality
Version 1.10.9 (4 updates)
16.09.2022
  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
10.09.2022
  1. The Zenith Parsing Engine is now a separate module from the main ZPE package and will be maintained separately
04.09.2022
  1. Changed the way in which the ZPE environment detects the install path
Version 1.10.8 (19 updates)
25.08.2022
  1. Added the option_base_1 property allowing array access to start at 1
12.08.2022
  1. Fixed an issue in which the csv_encode function did not return a ZPEString but return a string, causing a type error
10.08.2022
  1. Fixed an issue in which objects would be downcast. For example from ZPEDateObject to a standard Object without properties
07.08.2022
  1. Minor performance improvements
06.08.2022
  1. When opening a compiled file, the password string is hidden as the user types it in
26.07.2022
  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
24.07.2022
  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
20.07.2022
  1. Strong typing for function returns has been added using the syntax
    function testFunc() : number
19.07.2022
  1. Added return types to functions, e.g.
    function test() {
    return 10
    } => number
Version 1.10.7 (13 updates)
18.07.2022
  1. Added support for auto-prepending files to a ZPE program.
17.07.2022
  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
13.07.2022
  1. Added the XEN mode to ZPE, which will be used in the future for cron jobs
07.07.2022
  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
05.07.2022
  1. -m has become -d mode again for debug mode.
03.07.2022
  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)
19.06.2022
  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
01.06.2022
  1. The std_out function now only takes one parameter but works faster than the print function by asking the value to output itself
23.05.2022
  1. Added the get_hostname function
13.05.2022
  1. Added the timeout parameter to the ping function
Version 1.10.5 (4 updates)
05.05.2022
  1. ZENServer can now be started from the GUI mode.
23.04.2022
  1. Added in the new record structure, see https://www.jamiebalfour.scot/projects/zpe/documentation/data-types/record/
21.04.2022
  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)
21.04.2022
  1. Changes have been made to the installer package that improve stability
  2. Added the --version ZAC
18.04.2022
  1. Shutdown command no longer requires any arguments and by default carries out a shutdown
17.04.2022
  1. Fixed an issue in which a ZEN Client would crash if the server responded that a command was not supported
31.03.2022
  1. Made an improvement to by value performance
15.03.2022
  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)
21.02.2022
  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
20.02.2022
  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
19.02.2022
  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
18.02.2022
  1. Syntax highlighting is now a feature of the editor
Version 1.10.2 (10 updates)
18.02.2022
  1. Huge changes to the GUI that make it more functional
  2. New additions to the UI
17.02.2022
  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
16.02.2022
  1. The ZPEHelperFunctions have moved to the jamiebalfour.zpe.core package
02.02.2022
  1. Added the OpenJDK/JFX requirements to the class path
  2. ZPE now bundles the open JFX package - this makes ZPE 10x larger :(
23.01.2022
  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
15.01.2022
  1. The beep function is now faster and more responsive
Version 1.10.1 (6 updates)
15.01.2022
  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.
09.01.2022
  1. Small performance improvements using cached files (not yet released)
05.01.2022
  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
01.01.2022
  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)
28.12.2021
  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
26.12.2021
  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
19.12.2021
  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)
12.12.2021
  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
11.12.2021
  1. Fixed the write function
04.12.2021
  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
16.11.2021
  1. Updated the counter function manual to reflect that it works on more than just strings
13.11.2021
  1. Added the sign function which determines if a value is positive or negative
12.11.2021
  1. Moved static runtime variables from the Main class to the RunningInstance class
Version 1.9.11 (3 updates)
10.11.2021
  1. Further improved the GUI console performance and text input
07.11.2021
  1. New GUI console allows text input
03.11.2021
  1. Added the options to visit the ZPE Online website and public ZPE Online repository
Version 1.9.10 (15 updates)
01.11.2021
  1. Added the optional decimal_places parameter to the round function
  2. Fixed an issue with input reading in GUI mode
20.10.2021
  1. Fixed an issue with the interactive interpreter that came from the fix made a few days back
14.10.2021
  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
10.10.2021
  1. Added the list_remove_all function
09.10.2021
  1. Allows disabling of compiler includes using the properties file
06.10.2021
  1. Added the .copy method to ZPELists
  2. Renamed the getc method of ZPELists to get_circular (this was a user-unfriendly name)
04.10.2021
  1. String comparison has now been improved to allow $a < $b to evaluate which string comes first
25.09.2021
  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)
22.09.2021
  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
21.09.2021
  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)
20.09.2021
  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)
09.08.2021
  1. Added the help program to the interactive interpreter
12.07.2021
  1. Added more information about why a login hasn't worked for ZPE Online
  2. Fixed a long standing issue with modular arithmetic
02.07.2021
  1. Re-added support for internal/local structures within a function
Version 1.9.7 (10 updates)
01.07.2021
  1. Structures can now have properties defined with a data type
30.06.2021
  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
29.06.2021
  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)
28.06.2021
  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
27.06.2021
  1. Added the be keyword, e.g. let x be 10
Version 1.9.5 (14 updates)
26.06.2021
  1. Added the get_remote_ip_address command to retrieve the IP address on the public Internet
17.06.2021
  1. Added the set_id to all UI objects
25.04.2021
  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))
24.04.2021
  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
22.04.2021
  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)
15.04.2021
  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
13.04.2021
  1. Added the new log predefined function
12.04.2021
  1. Added a new data type, the record structure: e.g.
    $v = [x = 65]
    print($v.x)
Version 1.9.3 (8 updates)
11.04.2021
  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)
08.04.2021
  1. Added the new optional let keyword, e.g. let $x = 10
04.04.2021
  1. Minor performance improvements
Version 1.9.2 (6 updates)
23.03.2021
  1. Added the *=, /= and ^= operators
  2. Updated the increment/decrement operators to use long values rather than integer
17.02.2021
  1. Added the generate_random_string predefined function
16.02.2021
  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)
09.02.2021
  1. Added the match statement, similar to the case statement
  2. Added the else option in the match statement
23.01.2021
  1. Fixed an issue that meant that negative binary numbers (using two's compliment) padded with 0s and were excessively long
16.01.2021
  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
31.12.2020
  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)
04.12.2020
  1. Added the ZENClient object that allows the client to run in pure YASS code
13.11.2020
  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)
07.11.2020
  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
30.10.2020
  1. The interactive interpreter no longer adds variables back into the global function but instead the main function
29.10.2020
  1. Stricter variable name checking
28.10.2020
  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)
21.10.2020
  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
14.10.2020
  1. ZPE now detects headless systems before launching the GUI
01.10.2020
  1. Added infinite parameters to functions
26.09.2020
  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)
04.09.2020
  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
02.09.2020
  1. Added support for ZPEObjects to the JSON parser
28.08.2020
  1. Added the list_zpe_aliases function
11.08.2020
  1. The -p mode now supports inserting a property value from the command line by leaving out the -v argument
09.08.2020
  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
08.08.2020
  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
07.08.2020
  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
06.08.2020
  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)
05.08.2020
  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)
02.08.2020
  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
01.08.2020
  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
27.07.2020
  1. Added the require keyword as an alternative for import
24.07.2020
  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)
22.07.2020
  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
20.07.2020
  1. Fixed an issue and improved performance of the new send> command within the ZENClient and ZENServer
19.07.2020
  1. Added in a simple send> command to the ZENClient that allows the sending of files via the client to the ZENServer
18.07.2020
  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
15.07.2020
  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)
10.07.2020
  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
06.07.2020
  1. Improved the way in which replacements are done in the graphical editor
22.06.2020
  1. Introduction of ZPEKit (pronounced zippy kit) means that the YASSCompiler is not accessible publicly but can be accessed through ZPEKit
21.06.2020
  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
19.06.2020
  1. Added the ZPECalculator object, which contains an expression compiler used to evaluate an expression
17.06.2020
  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
16.06.2020
  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)
10.06.2020
  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
09.06.2020
  1. Deprecated the ZENWebServer
  2. Added the get_ip_address function which will return the current system's IP address
08.06.2020
  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
07.06.2020
  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
06.06.2020
  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
04.06.2020
  1. Added the list_drives function which lists all root drives
02.06.2020
  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
26.05.2020
  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)
23.05.2020
  1. Changed the play_audio function to open_audio_stream which returns a ZPEAudioStream object
20.05.2020
  1. Added the play_audio function which plays an audio stream
11.05.2020
  1. Added the file_get_bytes function
  2. Removed the type parameter from the file_get_contents function, making it only read text
10.05.2020
  1. The --client argument is no longer required to specify a ZENClient, as the -h argument informs the application of this
28.04.2020
  1. Fixed an issue in which object comparison through the _compare method didn't work
27.04.2020
  1. ZENServer now searches for updates automatically when set in the properties file to do so
Version 1.8.4 (4 updates)
26.04.2020
  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
02.04.2020
  1. Changed the domain for the installer to jamiebalfour.scot
29.03.2020
  1. Improved the in-line document syntax by supporting variables
Version 1.8.3 (7 updates)
25.03.2020
  1. Fixed an issue in which imported libraries were not accessible in all cases
  2. Added the say alias for the speak function
24.03.2020
  1. Added the inline documents syntax
22.03.2020
  1. Added support for null values in the JSON parser.
18.03.2020
  1. Added the list_count_occurrences function
  2. Added the list_count_if function
08.03.2020
  1. Fixed an issue that meant that ZPEObject values would sometimes not save correctly when cached.
Version 1.8.2 (13 updates)
15.02.2020
  1. Added the speak function, however, this function is currently experimental and works only on a Mac
10.02.2020
  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
24.01.2020
  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
12.01.2020
  1. The -r and -i modes have been switched. -i is now the interactive interpreter and -r is the runtime
11.01.2020
  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
06.01.2020
  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)
06.01.2020
  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
05.01.2020
  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
04.01.2020
  1. Added a new option to the shutdown command that allows a time to be specified from the current time to shutdown at
03.01.2020
  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
01.01.2020
  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)
30.12.2019
  1. Added the wake_on_lan function
22.12.2019
  1. Added create_list to the ZPEUI object
07.12.2019
  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)
05.12.2019
  1. Importing is now done with the import keyword and is no longer a function.
02.12.2019
  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
10.11.2019
  1. Fixed an issue in which quotes were removed from a string if used inside another string
26.10.2019
  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)
29.09.2019
  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
28.09.2019
  1. Fixed a long standing bug that caused objects to not update when a reference was updated when no main function was provided
13.09.2019
  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
02.09.2019
  1. More changes to the GUI including a new dark mode (only on macOS currently)
30.08.2019
  1. Added the ZenithParser object
25.08.2019
  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
07.08.2019
  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)
02.08.2019
  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
01.08.2019
  1. Added the tkmenu library to give macOS editors the macOS menu bar instead of the in window version
31.07.2019
  1. Replaced the menubar in macOS with the system menu bar for consistency
30.07.2019
  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
28.07.2019
  1. Fixed an issue with quotes in quotes when escaping them
Version 1.7.9 (14 updates)
14.07.2019
  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
13.07.2019
  1. Performance improvements
10.07.2019
  1. Fixed an issue where some whitespace characters were ignored by the parser (e.g. ASCII 160)
09.07.2019
  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?>
08.07.2019
  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
02.07.2019
  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)
29.06.2019
  1. Added the ZPEHTMLBuilder object
16.06.2019
  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
06.06.2019
  1. Variables are now shared across chunks in the web parser mode
17.05.2019
  1. New compiler optimisations mean that compiled programs run even faster
12.05.2019
  1. Added the list_find_duplicates function
10.05.2019
  1. Fixed an issue with functions declared on anonymous objects being inaccessible
Version 1.7.7 (5 updates)
05.05.2019
  1. The display of objects when printed is now much more like PHP
04.05.2019
  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
01.05.2019
  1. Added the EXACTLY EQUAL === comparison
  2. Added the --json option to the -v (version) ZAC
Version 1.7.6 (15 updates)
21.04.2019
  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
20.04.2019
  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
19.04.2019
  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
15.04.2019
  1. Added support for larger numbers
13.04.2019
  1. Fixed an issue in which the floor and ceiling functions returned a double instead of an integer
09.04.2019
  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)
08.04.2019
  1. Moved the output from the compiler from the internal method
  2. General performance improvements
25.03.2019
  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
24.03.2019
  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)
23.03.2019
  1. Added more online features
22.03.2019
  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
17.03.2019
  1. Added the implies and iff functions
  2. Added the nor function
13.03.2019
  1. Complete rewrite of both structures and objects to make them more consistent
  2. Nested structures/classes are now available
12.03.2019
  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
11.03.2019
  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
10.03.2019
  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)
08.03.2019
  1. Fixed an issue with index access in an evaluation
06.03.2019
  1. Added more @ documentation features
05.03.2019
  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
03.03.2019
  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
01.03.2019
  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.
27.02.2019
  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
25.02.2019
  1. Further improvements to LAME performance
14.02.2019
  1. Added the get_password_input function
Version 1.7.2 (10 updates)
14.02.2019
  1. Fixed an issue which prevented the _construct method from being created on an object
13.02.2019
  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
12.02.2019
  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
03.02.2019
  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
02.02.2019
  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)
30.01.2019
  1. Replaced the LAMP with LAME, a much faster and more accurate evaluator for logic and maths
27.01.2019
  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
26.01.2019
  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]}.
18.01.2019
  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
16.01.2019
  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
15.01.2019
  1. Major improvement to ZenithParser which makes it perform 10% faster than before.
13.01.2019
  1. Threaded functions are now written as function threaded x() instead of threaded function x(). The latter has not been removed but deprecated.
11.01.2019
  1. Added support for by reference variable assignment, e.g. &$y = 10 will change the original $y
10.01.2019
  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)
09.01.2019
  1. Added by reference variables, list_set_at_index already implements this
05.01.2019
  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
30.12.2018
  1. Fixed an issue with index access within an object context when assigning values (major bug)
29.12.2018
  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.6.8.1 (1 updates)
28.12.2018
  1. Added the built-in internal update program. Just running the --update ZAC will update ZPE
Version 1.6.8 (6 updates)
25.12.2018
  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
22.10.2018
  1. Command line now accepts negative values correctly
  2. Added the associative_array_create_ordered method which generates a new ordered associative array
21.10.2018
  1. The GUI mode now handles errors and does not quit on an error
Version 1.6.7 (15 updates)
19.10.2018
  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
15.10.2018
  1. Added the get_call_stack method
12.10.2018
  1. Added support for else if as well as elseif in if statements
11.10.2018
  1. New Python inspired fixed arrays defined as
    $v = [] * 4 or $v = ["Hello"] * 4
01.10.2018
  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
26.09.2018
  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
25.09.2018
  1. Fixed an issue with dotted (reference) expressions
  2. Added the sublist method to the list type
24.09.2018
  1. TYPO is now available within ZPE 1.6.7! Finally, type checking can be done with ZPE!
19.09.2018
  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)
19.09.2018
  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
16.09.2018
  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)
15.09.2018
  1. Added the cache_value and read_cache_value methods which read a value from a special secured file
14.09.2018
  1. Added the optional 'code' parameter to the exit method
  2. Small performance improvement with the LAMP parser
11.09.2018
  1. Fixed an issue in which new ZPEObject would set their values and variables to the FRIENDLY only access
10.09.2018
  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.
09.09.2018
  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.
08.09.2018
  1. Added object inheritance
03.09.2018
  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)
02.09.2018
  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
27.08.2018
  1. Syntax change for pre-increment and pre-decrement from $++x to ++$x
Version 1.6.4 (24 updates)
13.08.2018
  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
11.08.2018
  1. Fixed an issue where associative arrays would not print with a comma
09.08.2018
  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
07.08.2018
  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
06.08.2018
  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
05.08.2018
  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)
03.08.2018
  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)
02.08.2018
  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
01.08.2018
  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)
30.07.2018
  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)
24.07.2018
  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)
31.05.2018
  1. Fixed an issue in which the get_median function was actually using the same code as the get_range function
30.05.2018
  1. Added the new -w web parser mode to parse web pages
28.02.2018
  1. Added the force_colour option
01.02.2018
  1. Added the --colour option

Version 1.5.x

Version 1.5.4 (11 updates)
04.10.2017
  1. Added the switch statement, a rewrite of when-is statements
19.06.2017
  1. Server threads now share Zenith Engine consumers where they can.
18.05.2017
  1. Fixed an issue with ZACs
07.04.2017
  1. Compiler keeps track of constants that have been assigned and throws an error on reassignment
06.04.2017
  1. Fixed a performance issue
  2. Fixed an issue when using accessors on keyword 'this'
05.04.2017
  1. Added a fix to concatenation that will need to reviewed ASAP
02.04.2017
  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
01.04.2017
  1. Improved the parser to support any third-party subsequent character array
31.03.2017
  1. Added the new object declaration format similar to JSON or JavaScript: $v = {first_name : "Jamie", surname : "Balfour"}
Version 1.5.3 (29 updates)
30.03.2017
  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
29.03.2017
  1. Added ZPE to a Git repository for better backtracking
28.03.2017
  1. Added the index of an array through square brackets $v[1] for access only
  2. Minor performance improvements and further refactoring
26.03.2017
  1. Added the option to ignore new lines in the ZPE Parser
  2. Fixed a flaw that prevented objects from being parsed properly
21.03.2017
  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)
26.02.2017
  1. Continuing with the idea of a reusable parser, the CSV parser has been redesigned from the bottom up
24.02.2017
  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
23.02.2017
  1. Fixed an issue within the compiler, whereby all inner compiled strings would be case insensitive.
22.02.2017
  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.
21.02.2017
  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
15.02.2017
  1. Improved server stability
  2. Pointers have been renamed accessors. The accessor symbol is still =>
14.02.2017
  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)
14.02.2017
  1. Structures can now be initalised through a constructor function called _construct
  2. Fixed an issue where objects within objects could not be used.
13.02.2017
  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
07.02.2017
  1. Added custom keyword plugin feature. This allows custom parsing of symbols and words
Version 1.5.1 (10 updates)
31.01.2017
  1. Fixed an issue with concatenation
  2. Added do while loops
22.01.2017
  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
21.01.2017
  1. Added compiler improvements that make compiled applications run faster
  2. The name parameter in the compiler is now fully optional
16.01.2017
  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
14.01.2017
  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 1.5.0.1 (6 updates)
11.01.2017
  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
10.01.2017
  1. Added threaded lambda functions. $v = threaded function() { for ($i = 0; $i < 100000; $i++) print($i) end for }
08.01.2017
  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)
07.01.2017
  1. Improved server and client communication and functionality
21.12.2016
  1. Fixed an issue in which the ceiling command would round down
  2. Added the aes_encrypt and aes_decrypt functions
17.12.2016
  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) }
11.12.2016
  1. Added interpreter warnings
10.12.2016
  1. Added the Google GSON library to parse JSON
  2. Added json_to_map function
08.12.2016
  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 1.4.4.0 (5 updates)
14.08.2016
  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
12.08.2016
  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
07.08.2016
  1. Focuses on external implementation of language converters
Version 1.4.3.40 (11 updates)
06.08.2016
  1. Fixed an issue with variables and increment and decrement values
  2. Fixed an issue with anonymous functions and return functions without brackets
05.08.2016
  1. Added the plus equals (+=) and the minus equals (-=) increment and decrement operators
  2. Added the concatenation operator, & and deprecated the string_concatenate command
04.08.2016
  1. Better error messages from the compiler
03.08.2016
  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
02.08.2016
  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 1.4.3.10 (14 updates)
01.08.2016
  1. Fixed an issue with the ternary operator on single expressions
30.07.2016
  1. Fixed an issue in which lists and associative arrays would not be evaluated properly in a comparison
29.07.2016
  1. Fixed a small issue that caused lambda functions to crash
28.07.2016
  1. Changed the way in which the interpreter functions (less recursion) - leading to better performance and memory usage
27.07.2016
  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
25.07.2016
  1. Improved the efficiency of the compiler
24.07.2016
  1. Added scopes (private, public and friendly) support to variables
  2. Added the scopes to constants as well
22.07.2016
  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)
21.07.2016
  1. Fixed a few minor issues that caused compile issues
  2. Improved the LAMP compiler
20.07.2016
  1. Fixed an issue in which bracket expressions were incorrectly tested
19.07.2016
  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
17.07.2016
  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
16.07.2016
  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
13.07.2016
  1. The biggest change in ZPE history has begun: rewriting the original condition and mathematical parsers and evaluators
Version 1.4.2 (22 updates)
01.07.2016
  1. Added the ternary condition operation. E.g: $x = 10 > 20 || 20 > 10 ? "Yes" || "No" will set the value of $x to "Yes".
27.06.2016
  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.
18.06.2016
  1. Added set_cartesian_product function
16.06.2016
  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
07.06.2016
  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)
05.06.2016
  1. Conditional words like and, or and xor are compiled as their logical counterparts (&&, || and **)
31.05.2016
  1. Fixed a flaw with the random_number function that added the minimum as a string
28.05.2016
  1. Added lazy evaluation to condition evaluation
14.05.2016
  1. Added the new list_pop and list_dequeue functions
22.12.2015
  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)
20.12.2015
  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
16.12.2015
  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)
15.12.2015
  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
14.12.2015
  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
11.12.2015
  1. Added publicly accessible isFunction and isObject methods to the JAR as requested
09.12.2015
  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
06.12.2015
  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
04.12.2015
  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)
29.11.2015
  1. Added the range function to generate a list of numbers in a range
  2. Memory usage lowered slightly
21.10.2015
  1. A few minor updates
Version 1.4.0.83 (1 updates)
12.09.2015
  1. Added compare_dates function to compare two dates
Version 1.4.0 (9 updates)
30.08.2015
  1. Added the echo alias
  2. Re-added the round command
  3. Negation can now be applied through the ! function
29.08.2015
  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 1.3.7.100 (5 updates)
27.08.2015
  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 1.3.7.89 (24 updates)
20.08.2015
  1. Added the global function to push a local variable to a global
  2. Added several new constants
  3. Added the mysql_connect function
19.08.2015
  1. Changed the type:$language requirement on the -c mode to $language.
18.08.2015
  1. Added the all_true function
  2. Added the all_false function
  3. Added the any_true function
  4. Added the any_false function
15.08.2015
  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
13.08.2015
  1. Added the screen_grab function
11.08.2015
  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
05.08.2015
  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 1.3.7.44 (4 updates)
04.08.2015
  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 1.3.7.25 (12 updates)
27.07.2015
  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
26.07.2015
  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
25.07.2015
  1. Added library support
  2. Added support for semi-colons in for loops as well as commas
Version 1.3.7.0 (8 updates)
22.07.2015
  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
21.07.2015
  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 1.3.6.0 (17 updates)
15.07.2015
  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)
12.07.2015
  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
11.07.2015
  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
10.07.2015
  1. Added structures
  2. Added structure variables
  3. Added structure functions
Version 1.3.5.190 (3 updates)
09.07.2015
  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
08.07.2015
  1. Added the unset function for removing variables after use
Version 1.3.5.90 (9 updates)
07.07.2015
  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.
02.07.2015
  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 1.3.5.68 (10 updates)
01.07.2015
  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.
30.06.2015
  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 1.3.5.63 (15 updates)
30.06.2015
  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
29.06.2015
  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 1.3.5.32 (4 updates)
28.06.2015
  1. Added file_open_image function
  2. Added limit_real function
20.06.2015
  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)
19.06.2015
  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.
15.06.2015
  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 1.3.4.90 (12 updates)
15.06.2015
  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)
13.06.2015
  1. Fixed the arguments system
12.06.2015
  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)
11.06.2015
  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
10.06.2015
  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
07.06.2015
  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
06.06.2015
  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)
05.06.2015
  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
25.05.2015
  1. Added a simple graphical user interface to the engine
22.05.2015
  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)
21.05.2015
  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
20.05.2015
  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
19.05.2015
  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
18.05.2015
  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
14.05.2015
  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
13.05.2015
  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
12.05.2015
  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
11.05.2015
  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
10.05.2015
  1. Improved speed of condition testing
  2. Assignment of functions
  3. Tree parser added
  4. Compile feature added
09.05.2015
  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)
18.03.2015
  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
10.03.2015
  1. Added format_number
08.03.2015
  1. Improved substitution of variables
07.03.2015
  1. Added a function line for running a single function
06.03.2015
  1. Improved the speed of the interpreter
  2. Fixed an issue with strings
05.03.2015
  1. While loop improvements added
04.03.2015
  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
03.03.2015
  1. Added power function
  2. Added greater_than function
  3. Added less_than function
02.03.2015
  1. Added get_constant function
01.03.2015
  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
28.02.2015
  1. Added sqrt function
27.02.2015
  1. Added while loops
  2. Fixed an issue with if statements
  3. Added escape characters
26.02.2015
  1. Added variable reassignment
  2. Improved performance of conditional statements
25.02.2015
  1. Added add, subtract, multiply and divide functions
  2. Added modulo function
  3. Added sin, cos and tan functions
24.02.2015
  1. Added conditional statements
  2. Added if statements
  3. Added else statements
23.02.2015
  1. Added help command to BRS
  2. Added type output options
  3. Added return output options
22.02.2015
  1. Global variables added
  2. Faster access to variables in Zenith Engine
  3. Custom commands added
  4. Functions added
  5. Call function added
21.02.2015
  1. Evaluate function added
  2. String support added
  3. Added GUI mode [experimental] to BRS
20.02.2015
  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)
19.02.2015
  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)
31.12.2012
  1. Stopped developing BlackRabbit Script
10.01.2011
  1. Complete rewrite of BlackRabbit Script
Comments
Feedback 👍
Comments are sent via email to me.