Last changes in the Scriptol to Wasm compiler

The changes in the language apply also to the Scriptol to PHP and JavaScript compilers

Download page

21.8 August 2021

21.7 July 2021

17.7 July 2017

17.6 June 2017

14.11 November 2014

14.4 April 2014

7.0 June 2007

6.2 - September 2006

6.1 - June 2006

6.0 - March 2006

5.6 - December 10, 2005

5.5 - October 25 , 2005

5.4 - July 25, 2005

5.3 - June 25, 2005

5.2 - May 2005

5.1 - April 2005

      C++ Compiler

4.7 December 2004

4.6 September 2004

4.5 July 2004

C++ Compiler

4.4 June 2004

- The mode parameter (LIGHT / XML) is now available in dom methods.
- A C++ wrapper to expat is included to load xml documents.
- Improved JavaScript generator by including the declaration of the external dom class.
- Added several methods to the dom tree class (see dom.hpp).4.3 March 2004

- Implemented the new concept of Scriptet.
- Unlimited number of dimensions is allowed to arrays. This works for both Php and C++ targets.
- Literal array implemented: a list of elements enclosed between curly braces.
- Insert() and reserve() methods added to text.
- Examples demonstrating how to enter a text from the console or a web page, now included.

C++ Compiler

- Added an iterator to xelement.
- More methods added to dom.
- Libxml can be used to load an xml file into the dom tree (requires visual C++/GCC).


- The gd extension is now available separatly.
- The Visual C++ compatible library is now included into the Scriptol archive for Windows, along with BCC one..

4.2 March 2004

C++ Compiler

- Now you can declare several xml documents inside a program.
- The structure a xml document may be changed at runtime by inserting or removing elements.
- The append() method has been added to dom.

4.1 February 2004

- The nil assigment to remove an element from a dict is now working: x["str"] = nil.
- A typed literal array is denoted by curly braces: Ex: int { ... }

C++ Compiler:

- The dom tree is now a data structure of scriptol. You can build it from xml code, modify and use it with scriptol statements.
- dict and array are now different classes in the C++ generated code.

3.10 November 2003

- The double symbol ~~ allows to insert code directly into the target listing.
- A natural is a "unsigned __int64" in C++ and a int in Php, and a natural literal is terminated by "n".
- Real numbers are better handled with this version.
- Literal strings may be several lines now.
- Overriding of methods is now allowed into a Scriptol source. (For the solc compiler only with this version, not for scriptol-php yet)

3.9 Octobre 2003

- Php 5 partially implemented and -5 option allows to produce Php 5 compatible code.
- Exceptions are handled with the try catch structure. Works with the C++ and Php 5 targets. This is alpha feature.
- An import ... /import tag is added to declare content of external Java classes.
- The "string" type is allowed in Java or C++ external declarations.
- Xml-like may be parsed by the Scriptol solc compiler to produce real xml or xul code.

C++ Compiler:

- Xml may be embedded inside Scriptol source. (see the Xsol.html manual).
- Invoking Java is allowed also in binary executables.

3.8 September 2003

All editions:
- Added the boolval built-in function for compatibility with Visual C.
- Description of classes of the library added to the libdoc subdirectory.
Enterprise edition:
- A typed array of objects is now implemented.

C++ Compiler:

- A library compatible with Visual C (tested with version 7.0), is now available for download.
- The library for the C++ compiler has been rewritten for compatibility with the Microsoft's C++ compiler and compile time is reduced.

3.7 July 2003

- Now the Scriptol to Php compiler produces indented Php code.
- Typed array of int and text are now recognized.
- A multi-lingual preprocessor is integrated.

C++ Compiler:

- Changed the text object, for "0" and "" to be considered as different things when compared.

3.6 June 2003

- Added the reverse method to arrays.
- The common compilers are now absolutely free for anyone and any program.
- The enterprise edition of the compiler is generated by the install command.

C++ Compiler:

- The enterprise edition features typed array of integer and typed array of text. They are 100 times faster than associative arrays (See the "ta_test.sol" demo program.)

3.5 April-May 2003

- The define type = "function" statement allows to use functions as arguments.
- The "function" keyword is deprecated, but still working in the Scriptol to Php version.
- An instance is declared by assigning the constructor (without the "new" operator) to the identifier.
 No other syntax is supported now.
- A Php or C++ array may be prefixed by the $ symbol.

C++ Compiler:

- Functions may be used as arguments thanks to the improved define statement.
- An array may hold used-defined objets.
- The generic qsort2 routine may be compiled by the Scriptol C++ compiler also.

3.4 April 2003

- Memory manager with a garbage collector.

C++ Compiler:

- The compiler produces memory managed programs, thanks to a garbage collector.

3.3  March 2003

- "define ident" allows to integrate a new type from an external library, for compatibility with C++.

C++ Compiler:

- Better handling of external libraries.
* Passing files to include to C++ in the form <ident/ident.h> now allowed.
* C++ variables or constants may be used directly with the "$" prefix (removed in C++).
- Better formatting of C++ output.
- Support of GTK.

3.2 February 2003

- If an include statement holds a filename without the ".sol" extension, the file is not parsed.
  With the Scriptol C++ compiler, the statement is transmitted to the C++ target code.
- Creating an instance of class with a "null" assignment allows to use extern Php classes.

C++ Compiler:

- Added support to compile a program using the GD graphical Php extension to binary executable.

3.1 January 2003

- The "using xxx" statement produces a C++ "using namespace xxx;" statement. No effect when compiled to Php.

C++ Compiler:

- Added the array_reverse function to the library.
- The "using" keyword is passed to C++.
- Changed the for and scan loops to stop when the whole array is parsed rather than when the next element is false.


- Now you can use static variables without the need to declare any instance of the class.

C++ Compiler:

The C++ generated code is now indented.
The generated code is now compatible with MinGW 3.2. But the libsol.a library is for mingw 2.96. The library for 3.2 is on the 15 $ CD.


- The language now allows to declare a class or a virtual object just by invoking its constructor.
   Ex: print Object(10)
  is equivalent to:    Object o(10); print o 
- The constructor of an int or a text may be used for conversion purpose.
    text a = "12"
    int x = int(a)
- Options at command line may be combined:
   solp -br xxxx            is equivalent to    solp -b -r xxxx

C++ Compiler:

Changes described in the common page apply to the solc compiler also.
This version is still compatible with minGW 2.95.3 and GCC 2.96.
I am working on compatibility with the 3.2 versions.


- The one-statement "if" and other one-statement control structures (for orthogonality) may be written now without the "let" symbol if the following statement starts with a keyword (break, continue, return, print, echo, define). Ex: if x < y break (instead of if x < y let break).
- Added the "plural" function to built-in.
- You can now pass comments to the target code with the double `` comment symbol.
- Now you can declare a class inside "extern" tags (useful for Java classes)

C++ Compiler:

- The Scriptol to natve compiler now can compile a script holding functions and classes among statements.
- Now the -s option is useless, the compiler is able to distinguish a script or an application.- The Scriptol to natve compiler now can compile a script holding functions and classes among statements.

2.08 August 2002 C++ Compiler

- Extended the Php compatible library of functions. Look at libphp.sol file for a full list.

2.07 July 2002 C++ Compiler

- Now the binary operators & | ^ are usable with arrays also, for intersection, union and complement of intersection.  The || and # old operators are deprecated;
- Compound assignment with union of arrays is now available.
- the doXXX cast methods on dynamic object are replaced by toXXX and setXXX are suppressed.

2.06 June 28, 2002

C++ Compiler, First public release

 The version number is the date for this compiler: 2 = year 2002, 6 = month june, a letter may follow.

1.6a July 15, 2002

- Now the binary operators & | ^ are usable with arrays also, for intersection, union and complement of intersection.  The || and # old operators are deprecated;
- Compound assignment with union of arrays is now available.
- the doXXX cast methods on dynamic object are replaced by toXXX and setXXX are suppressed.
- The Scriptol to Php compiler is now invoqued by solp on Windows & Linux and the Scriptol to C++ one by solc.

1.6 July 1, 2002

- External variables and constants now can start with an underscore (not Scriptol ones). Ex: $(__FILE__)
- Added the method "empty" to array.
- Added several built-in functions. Look at the reference manual.
- Now "extern" is a tag: you can enclose several external declarations between extern and /extern.

1.5b June 7, 2002

- A variable declared inside the heading of a "for" control structure is now local to the block of statements, for compatibility with ANSI C++.
- The "append" array's method is now useless. Suppressed.
- Now both + and - operators are allowed on an array with a scalar.
- The "merge" method is deprecated, but not suppressed for now.
- In 4.2.1 version, the Php staff has corrected the "array_unique" function. This may causes some difference when your program use the "unique" virtual method or the union operator.
- Unique now returns void.
- The "main" function has changed for compatibilty with C++.

1.5a May 21, 2002

Arrays are indexed list, dicts are associative ones. The difference is reinforced to not be confused by indices and numerical keys.
- Array and dict are no longer compatibles types.You can't assign one with the other, add them, etc... You still can use the "values()" method to convert a dict to array.
- A "pack()" method replaces the "arrange()" one.
- The "unique" method now return void.
- Splicing a dict with another dict retains the keys (php loses them). For array, splicing causes a "pack".

1.5 May 2, 2002

- Implemented an automatic cast for int variables assigned with real numbers. Sorry but this may cause some differences in previously written program but allows for full compatibility with the coming C++ Compiler...
- Option -quiet added to.
- In the last version, not relevant error message may be thrown when an error occur, corrected.

1.4a April 16, 2002

- Method "store" added to array, allowing saving it in a file (no Php equivalent).

1.4 beta April 11, 2002

- Now you can declare "extern" any PHP variable, constant or function and use it as scriptol object, with control of type at reference or assignment.

1.3 Final April 4, 2002

The final 1.3 version is available for Windows and Linux.

1.3c April 2, 2002

- Static attributes are now allowed. PHP has static methods but lacks for static attributes, however Scriptol bypass this limitation when compiling into PHP.
- Added tests on static methods.
- The "let" final element now is generalized for any one-line statement (along with "?").

1.3b March 26, 2002

- Added "-verbose" to the list of options.
- No any message is displayed when running a program, now (but if -v option is passed).
- The "not in" operator previously was not working on arrays. Corrected.
- The tutorial is now included into the archives.

1.3a Win/Linux March 18, 2002

- The archive is smaller once I have replaced the BCC 5.4 compiler by MingW 2.95.3.
- The Linux version now can run the php code once it is compiled.

1.3a Windows March 12, 2002
- Modified some system calls for the program to run under Unix as under Windows.

1.3 beta February 20, 2002
- Now all tests on idents ignore truly case to prevent errors at runtime, as Php is not case-sensitive (for identifiers of functions).
- The "static" keyword is now recognized by the compiler for a method.

1.2 final February 15, 2002

1.2e beta February 13, 2002
- Improved subscripting. Now the compiler recognizes a statement as ident[i][x..y] , providing that the i element is an list or a text.

1.2d beta February 7, 2002
- Reduced the size of the compiler.
- Now a script is launched directly when the compilation is successful, and thus you do not see difference with an interpreted language! (apart that errors are all detected at compile time, a Net advantage).
- Now an instance of class may be declared in any scope (including another class).
- Conditional assignment with the := operator lets the target assigned if the source is not nil or the target not assigned yet. (This is in level 2.)

1.2c beta January 25, 2002
- The annoying file to include "scriptol.php" is no longer required.
- Now splicing is available for text also. Thus slicing and splicing can operate on text, array and dict.

1.2b beta January 21, 2002
- Extended methods to dynamic variables with empty [] indices.
- The method toText of array and toArray of text has been replaced by join and split to avoid eventual confusions.
- The "in" operator can now be used also in composite if.
- The "match" operator now works in any relational expression. The "swap" option added to the define statement.
- The "Match" chapter moved to the new Level II reference manual (this has no effect on the compiler).
- Now an array initializer accepts any expression as element.
- Added to built-in the "swap" function.
- Built-in functions and virtual methods are no longer case-sensitive.

1.2a beta January 17, 2002
- Simplified the language, array and dict are unified with a common set of methods.
- Now dynamic variables have all the methods of any type.
- And thus one can now invoque a method on an element of an array, for example: print myarray[10].upper()
 One can also chain the methods: myarray[10].lower().capitalize()
- Post-casting is a new set of methods that give a type to dynamic variables: doInt(), doText(), etc...and dynamic variables may be changed to typed ones with setInt(), setText(), etc...
- A new type of var is implemented: "function", that allows to pass functions as parameters.
- By assigning "nil", you can now remove an element or a range of an array or dict.
- Added to text the method "dup".

1.1 final January 11, 2002
Implemented inheritance of class.
The method "compare" now compares lexicographically (no case).
The method "identical" performs case-sensitive comparison.

1.0p January 9, 2002
Added the union || operator to complete operators on lists.

1.0n January 7, 2002
Added these methods to text: toInt(), toReal()
Added the toText() method to integer and real (or number).

1.0m January 2, 2002
Support to Java now available.
Methods may be chained now, ex: a ="DEMO"
a.lower.capitalize()   ...returns "Demo"
Now you can assign several variables the elements of array or dict by a multiple assignment..
Multiple assignment allowed to call of function returning a single value.
Added the classical "str" to list of built-in functions. It is equivalent to strval.
Both array and dict now has a sort and a kSort method, the first sorting the values and the second sorting the indexes or keys.

December 28, 2001
A method may be associated to a literal. For text literal mainly.
Ex: "DEMO".length()     returns 4.
1.00 First version, October 22, 2001
Several updates will follow until the 1.0l one.