Version 5.8.0.x
Introduction of null constant - Since the concept of a null constant has been introduced in version 5.8.0+, any variables that may have been named ‘null' or ‘nil’ will cause an error since those are now reserved keywords for the language.
Introduction of integer type - Due to the introduction of the integer type some values that were intended as numbers will be automatically interpreted as integers. This could cause the results of a calculation to loose all decimal values or cause the result of the calculation to change due to rounding differences.
return 3/2;
In older SIL, the result would have been 1.5. In the new SIL, the result is 1, because the literals 3 & 2 are now integers. In order to maintain the same results the code must be changed like in the examples below:
return 3.0/2.0; //or, explicity declare the type number x = 3; number y = 2; return x/y;
The introduction of the integer type has also the following consequence:
try { ..... if( ... ) { throw 1; //integer! } if( .... ) { throw 2; //these are integers literals now } } catch integer i { //you need to add this block in order to deal with the above throws } catch number n { //you need to move code from here in the above block! }
Packages - We added package and the “use“ keyword, please consider “use“ and “package“ keywords as inappropriate for variable names ('package' may be used in the future)