Protected mpsl.h from re-including.
[mpsl.git] / RELEASE_NOTES
blob81cf3f32f08130c13d1a1f21ab3fa21b92003633
1 MPSL Release Notes
2 ==================
4 2.0.1
5 -----
7  - New features:
8     - An abbreviated way of defining hashes (ala JavaScript).
9  - Bugfixes:
10     - Several fixes to for() construction: fixed incorrect
11       calling order and for (;;) is accepted for infinite loops.
13 2.0.0
14 -----
16  - A new C-like for() control flow construction.
17  - Updated to match MPDM refactoring (no more sweeping /
18    garbage collection).
19  - New multithreading support:
20     - A function can be prefixed with & (ampersand) to execute
21       it in a new thread; the new thread handler is returned.
22     - Support for mutex values.
23     - Support for semaphore values.
24  - Any function argument not explicitly declared and
25    sent as argument in the function call is stored
26    in the local array _ (underscore).
27  - The adel() function no longer returns the deleted element.
28  - mpsl_compile_file() now has an additional argument
29    holding the source file search path.
30  - The following functions had had their arguments swapped:
31     - split().
32     - join().
33     - sscanf().
34     - map().
35     - grep().
36     - regex().
37     - sregex().
39 1.0.9
40 -----
42  * New syntax for _inverse_ calling functions; the new
43    construction `val1->func(val2)' is equivalent
44    to `func(val1, val2)'. This way, chained function
45    calls where the first argument of one is the return
46    of the other are much easier to write and understand.
47  * Numbers prefixed by `0b' are accepted as binary numbers
48    and `sprintf()' accepts `%b' to print them.
49  * New operands >> and << (bit shifting).
50  * New operands &=, |= and ^=, <<= and >>=.
51  * New operand ** (power).
52  * New function `random()'.
53  * New trapping functionality.
55 1.0.8
56 -----
58  * New function `sscanf()'.
59  * New function `compile()', to compile a string of MPSL code
60    to an executable value.
61  * New function `bincall()', to create an executable value
62    given a pointer to binary code.
63  * The `mpsl' executable now ignores the first line of an MPSL
64    script if it starts with #!.
65  * Real numbers can be expressed in scientific notation.
67 1.0.7
68 -----
70  * The `write()' allows a variable argument of values to write.
71  * Values are dumped as MPSL instead of MPDM's low-level format.
72  * New function `chdir()'.
74 1.0.6
75 -----
77  * Fixed a strange but annoying bug regarding local variables
78    losing their values in anonymous subroutines.
80 1.0.5
81 -----
83  * New `g' flag in regex().
84  * Fix backslash parsing in strings.
86 1.0.4
87 -----
89  * The iterator variable in foreach() is _always_ created
90    as a local variable inside the block. Also, the old
91    construction foreach(local v, ...) issues a warning,
92    as it's redundant.
94 1.0.3
95 -----
97  * Anonymous subroutines now run inside a block frame
98    instead of a subroutine frame. This way, they can have
99    access to local variables defined in the subroutine
100    they are called from. So, for example, if you run
101    map() inside a subroutine, its anonymous code block
102    can access the local variables defined there.
103  * getenv() doesn't crash if the environment variable
104    does not exist.
106 1.0.2
107 -----
109  * Small internal refactoring regarding subroutine and
110    block frames. Frame creation code has been unified,
111    so block frames don't crash when a NULL local symbol
112    table is sent as argument, and can have arguments.
113    This change is not visible from outside; only a step
114    towards closing bug #1107.