8 - The push() functions accepts a variable number of elements
9 to be pushed into the array (not only one).
10 - New function tr(), to transliterate strings.
11 - New function int(), to return the integral part of a number.
17 - An abbreviated way of defining hashes (ala JavaScript).
19 - Several fixes to for() construction: fixed incorrect
20 calling order and for (;;) is accepted for infinite loops.
25 - A new C-like for() control flow construction.
26 - Updated to match MPDM refactoring (no more sweeping /
28 - New multithreading support:
29 - A function can be prefixed with & (ampersand) to execute
30 it in a new thread; the new thread handler is returned.
31 - Support for mutex values.
32 - Support for semaphore values.
33 - Any function argument not explicitly declared and
34 sent as argument in the function call is stored
35 in the local array _ (underscore).
36 - The adel() function no longer returns the deleted element.
37 - mpsl_compile_file() now has an additional argument
38 holding the source file search path.
39 - The following functions had had their arguments swapped:
51 * New syntax for _inverse_ calling functions; the new
52 construction `val1->func(val2)' is equivalent
53 to `func(val1, val2)'. This way, chained function
54 calls where the first argument of one is the return
55 of the other are much easier to write and understand.
56 * Numbers prefixed by `0b' are accepted as binary numbers
57 and `sprintf()' accepts `%b' to print them.
58 * New operands >> and << (bit shifting).
59 * New operands &=, |= and ^=, <<= and >>=.
60 * New operand ** (power).
61 * New function `random()'.
62 * New trapping functionality.
67 * New function `sscanf()'.
68 * New function `compile()', to compile a string of MPSL code
69 to an executable value.
70 * New function `bincall()', to create an executable value
71 given a pointer to binary code.
72 * The `mpsl' executable now ignores the first line of an MPSL
73 script if it starts with #!.
74 * Real numbers can be expressed in scientific notation.
79 * The `write()' allows a variable argument of values to write.
80 * Values are dumped as MPSL instead of MPDM's low-level format.
81 * New function `chdir()'.
86 * Fixed a strange but annoying bug regarding local variables
87 losing their values in anonymous subroutines.
92 * New `g' flag in regex().
93 * Fix backslash parsing in strings.
98 * The iterator variable in foreach() is _always_ created
99 as a local variable inside the block. Also, the old
100 construction foreach(local v, ...) issues a warning,
106 * Anonymous subroutines now run inside a block frame
107 instead of a subroutine frame. This way, they can have
108 access to local variables defined in the subroutine
109 they are called from. So, for example, if you run
110 map() inside a subroutine, its anonymous code block
111 can access the local variables defined there.
112 * getenv() doesn't crash if the environment variable
118 * Small internal refactoring regarding subroutine and
119 block frames. Frame creation code has been unified,
120 so block frames don't crash when a NULL local symbol
121 table is sent as argument, and can have arguments.
122 This change is not visible from outside; only a step
123 towards closing bug #1107.