Up to Main Index Up to Journal for November, 2023 JOURNAL FOR SATURDAY 25TH NOVEMBER, 2023 ______________________________________________________________________________ SUBJECT: Mere ICE updated to v0.0.9 DATE: Sat 25 Nov 19:42:43 GMT 2023 Mere ICE has been updated to v0.0.9 in the annexed works[1]. This update comes six weeks after the v0.0.8 release. Mere has a new ‘any’ data type that can hold the value of any other Mere data type. This is paired with a new ‘!any’ built-in conversion, from type any back to the original data type. Variables can now be defined as constant using the new ‘const’ built-in. With the addition of ‘any’ and ‘const’ there are now 53 reserved keywords. Two compiler phases have been added. The first simplifies expressions such as “x := (1 + 2) * 3” to “x := 9”. The second replaces references to constants with the constant’s value, if it is a simple data type. NOTE: Please make sure the version in the top right of Mere ICE shows ‘v0.0.9’ and if not hard refresh the web page in your browser. From the “What’s New” section: v0.0.9 — Saturday 25th November, 2023 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ • New ‘any’ type added that can wrap any Mere data type. A variable of type any is shown with an ‘A’ short type in traces and dumps. • New ‘!any’ built-in conversion from a type any back to the original type. • New ‘const’ built-in for defining constants: const i := 3 Constants display in the stack storage section of a dump annotated with a ‘c’: -- Stack Storage -------------------- Line Inst Depth 3 9 Global non-constant → 0x0006:i a 5 constant → c 0x0005:i b 3 • Added ‘any’ and ‘const’ to reserved keywords, making 53 keywords. • Defined labels are now constants, and show in traces and dumps as constants. • Variables of type label are display as ‘label(n)’ to distinguish them from normal ints. This is also in keeping with ‘regexp(…)’ and ‘any(…)’. • For clarity traces and dumps now show a ‘next’ built-in instead of a rewritten goto for loops. • Compiler has a new goto/next optimisation phase. • Compiler has a new expression optimisation phase. This can simplify expressions such as “x := (1 + 2) * 3” to “x := 9”. The operators currently simplified are: int, uint, float: add ‘+’, subtract ‘-’, divide ‘/’, multiply ‘*’ int, uint: bit-wise AND ‘&’, bit-wise OR ‘|’, bit-wise XOR ‘^’, bit-wise shift left ‘<<’, bit-wise shift right ‘>>’ modulus ‘%’, uint: bit-wise NOT ‘!’ string: concatenation ‘+’, repetition ‘*’, extended string ‘~x’ boolean: logical NOT ‘!’ miscellaneous: open parentheses ‘(’, close parentheses ‘)’ • Compiler has a new constants optimisation phase. If a constant evaluates to a simple value, after expression optimisation, then a reference to it will be replaced with the value itself. • Reinstated expanding an array into a map, alternating array elements for map key/value pairs: A := []string "a" "ant" "b" "bat" "c" "cat" M := [string] A println literal M // [string]("a" "ant", "b" "bat", "c" "cat") -- Diddymus [1] The annexed works: /annex/ Up to Main Index Up to Journal for November, 2023