7 - New multithreading support:
8 * A function can be prefixed with & (ampersand) to execute
9 it in a new thread; the new thread handler is returned.
10 * Support for mutex values.
11 * Support for semaphore values.
12 - Any function argument not explicitly declared and
13 sent as argument in the function call is stored
14 in the local array _ (underscore).
15 - The adel() function no longer returns the deleted element.
16 - mpsl_compile_file() now has an additional argument
17 holding the source file search path.
22 * New syntax for _inverse_ calling functions; the new
23 construction `val1->func(val2)' is equivalent
24 to `func(val1, val2)'. This way, chained function
25 calls where the first argument of one is the return
26 of the other are much easier to write and understand.
27 * Numbers prefixed by `0b' are accepted as binary numbers
28 and `sprintf()' accepts `%b' to print them.
29 * New operands >> and << (bit shifting).
30 * New operands &=, |= and ^=, <<= and >>=.
31 * New operand ** (power).
32 * New function `random()'.
33 * New trapping functionality.
38 * New function `sscanf()'.
39 * New function `compile()', to compile a string of MPSL code
40 to an executable value.
41 * New function `bincall()', to create an executable value
42 given a pointer to binary code.
43 * The `mpsl' executable now ignores the first line of an MPSL
44 script if it starts with #!.
45 * Real numbers can be expressed in scientific notation.
50 * The `write()' allows a variable argument of values to write.
51 * Values are dumped as MPSL instead of MPDM's low-level format.
52 * New function `chdir()'.
57 * Fixed a strange but annoying bug regarding local variables
58 losing their values in anonymous subroutines.
63 * New `g' flag in regex().
64 * Fix backslash parsing in strings.
69 * The iterator variable in foreach() is _always_ created
70 as a local variable inside the block. Also, the old
71 construction foreach(local v, ...) issues a warning,
77 * Anonymous subroutines now run inside a block frame
78 instead of a subroutine frame. This way, they can have
79 access to local variables defined in the subroutine
80 they are called from. So, for example, if you run
81 map() inside a subroutine, its anonymous code block
82 can access the local variables defined there.
83 * getenv() doesn't crash if the environment variable
89 * Small internal refactoring regarding subroutine and
90 block frames. Frame creation code has been unified,
91 so block frames don't crash when a NULL local symbol
92 table is sent as argument, and can have arguments.
93 This change is not visible from outside; only a step
94 towards closing bug #1107.