Last changes in the Scriptol to Wasm compiler
The changes in the language apply also to the Scriptol to PHP and JavaScript compilers
21.8 August 2021
- Added option -w to compile only c++ to wasm.
- Added option -l to build a wasm library.
21.7 July 2021
- Added one step to the scriptol to C++ generation: C++ now compiled to WebAssembly.
- Full support for the generation of wasm code (minus file system extension).
17.7 July 2017
- arrayval is a new function to convert a typed array to a simple dynamic array.
- The array object in the library is renamed solarray to not clash with std which now has also an array object.
- More changes in the library: solarray and dict are now totally independant objects, to improve speed.
- A solarray is now initialized with a std::initializer_list.
17.6 June 2017
- Support to Scriptol 3 in the C++ compiler.
- New switch case control flow implemented.
- Not implemented for now: Promise, goal, async/await, reactive programming, XML compiled to dict, function as argument.
14.11 November 2014
- Support to Scriptol 2 in C++ and PHP compilers. New XML format.
- New methods of text: findLast. toFile.
- New methods of array: findLast, map, length, rSort.
- Dropped support to Java calls.
14.4 April 2014
- Dropped support to BCC.
- Removed the editor.
- Removed XUL files.
7.0 June 2007
- The splitFile in Path.sol file has been updated.
6.2 - September 2006
- Literal strings now compatible with PHP strings. $ symbol inside strings now recognized.
- Use of $ to prefix a whole string now deprecated.
- Added the str(bool) and str(array) builtin functions for use with $.
- Use of nil with BCC 5.5 was faulty with functions returning char *. Fixed.
- Fixed some bugs with typed arrays.
6.1 - June 2006
- The split method of text has been improved.
- Completed the header of the dom class: libdom.sol.
6.0 - March 2006
- The Licence of the Compiler has changed. The Scriptol library and a part of the compiler are now open source under Mozilla 1.1 licence.
- The date() function returns by default a complete date and time in UTF8 format.
- The store() method of array adds the end of line caracter to each line stored when needed.
- The push() method of typed arrays now can use a variable as argument.
- The toBool() method was sometimes generated. Replaced by toBoolean().
5.6 - December 10, 2005
- Expat is now integrated into the Scriptol library. No need to to add a library into the configuration file.
- Now the load function of the dom class with just the name of the Xml file as argument uses expat as default importer
- The line count inside ~~ ... ~~ was not correct. This has been changed.
5.5 - October 25 , 2005
- Added the method toString() to array.
- These functions are now built-in:
boolval, is_list, is_dir, is_file, filesize, filetime. - New file system, libraries and header files are now stored into an unique directory. Under Unix, headers are stored into /usr/include/scriptol
- Unlink returns true if succeed, false if not deleted.
5.4 - July 25, 2005
- The archive is splitted in two files, one for the Scriptol to PHP compiler, the other one for the Scriptol to C++ compiler.
- The dir keyword is added to.
5.3 - June 25, 2005
- Multi-line strings are enclosed inside ~~ .. ~~ markers and may be assigned to variables.
- Added time() and localtime() to built-in functions.
- For full compatibility, php compatible literal string are
written:
$"string" or $'string'
and C compatible string are written:
"string" or 'string'.
- Compiling sources from sub-directories works better.
- Single quoted string with a $ prefix work as Php strings.
- Double quoted string with a $ prefix not implemented for now.
- Double or single quoted string (without a dollar prefix) are similar and works as double quoted string in C.
C++ Compiler
5.2 - May 2005
- Added the input statement to the language.
- Methods on numbers are replaced by constructors and deprecated.
- The randomize built-in function requires one argument.
- These functions are now built in: cos, sin, tan, acos, asin, atan, ceil, floor, log, exp, abs, sqrt
5.1 - April 2005
- Overloading of both static and non static method is now allowed.
- The reference manual has been relooked. The old tutorial is now integrated into the reference manual.
- Added these methods to dyn: isArray, isText, isNumber, isReal, isBoolean, isNatural, isInt, isInteger, isFile.
- Added the cat method to text.
- Corrected bug when chaining methods.
C++ Compiler
- The class BinaryFile is added to create and use binary files.
- The wrapper to the sax xml library is corrected, to return
the full content of an element.
4.7 December 2004
- Line feed may be inserted inside enum structures.
- Typed arrays of int, text, real, etc... are now parts of the common language.
- OpenGL demos now included into the archive.
- Garbage collector enabled with BCC and Mingw compilers. Disabled
with Visual C++ for this version.
C++ Compiler
4.6 September 2004
- It is now possible to align on the next line the ending curly brace in literal arrays, for better readabilty.
- The isNumber() method is added to text .
- a new keyword, cstring, is now recognized by the compiler and replaces both external types string and char *.
- The compilers have been modified to work better in the console of Windows XP.
- Extended the include statement to allow numerical sub-directories.
- Now you can assign an xml document to a variable.
- The text method toStr() has been rewritten for the value can be returned by a function while the text itself beeing an object, is destroyed.
C++ Compiler
New methods added to the dom class: push(), pushNext(), pushChild()
Arrays of natural, real and number are now implemented.
C++ Compiler
- SQlite tested successfully as extension to a binary program.
- Improved interfacing with C libraries, by writing callbacks, to avoid the need for any wrapper.
- A text assigned to a dyn may return a real or a natural now (previously an integer only).
- The load method of the dom class now uses a function as first
parameter. This function must call a parser.
(A such function, LXImport is included into the libxml wrapper and another one, SaxImport into the expat wrapper).(4.4.1 June 2004) - Libxmlbc.lib / Libxmlms.lib and saxbc.lib / saxms.lib are
two wrappers to LixXml and Expat.
You can links them together with this version.(4.4.1 June 2004)
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).
Packaging:
- 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.
2.11
- 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.
2.10
- 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.
Ex:
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.
2.9
- 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.
1.0l 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.