You are on page 1of 5


EScript 0.7.2 Egon (Stable)

Development: 2014-06

- Named after Egon, the nearsighted rabbit

Minor language changes:

- Number.round now returns 0 instead of -0 when rounding a negative number to zero
(unlike std::round, which returns -0).
- Add module aliases: module._setModuleAlias(alias, moduleId)
- Add Std.Traits.assureTrait( obj, trait )

EScript 0.7.1 Elfriede (Development version)
Development: 2014-4 -- 2014-6

- Named after Elfriede, the pedantic rabbit
- Language feature release.

- Binder-type introduced (replaces the old Delegate-type)
Example (bind first three parameter values): [1,2,3] => fn(a,b,c,d){};
Example (bind this object): someObj -> fn(){};
Example (bind parameter and object): [1]=>someObj -> fn(a){};
- Static variables can be injected into parsed code (load, loadOnce, and eval)
eval( "out(a);",{$a:"someStaticValue"} );
- Add multi assignments: [ #(multipleLValues) ] = #(expression returning an Array)
Example: [var a, someArray[2] ] = ["foo","bar"]
- Parameter checks are performed using the "_checkConstraint" member of the
This removes a special case for type checks and allows custom parameter
checks (e.g. for Traits).
This might cause problems with old code:
fn( MyTrait p1 ){
// old: p1 is either MyTrait, or a Trait inheriting from MyTrait.
// new: p1 has the trait MyTrait.

- Some code cleanups
- Use c++11 override where possible.
- Fix some issues found by coverty scan.

- Allow loading modules with relative module paths, using injected "module"-
- Split up "basics.escript" into several modules.
- Add "complete.escript" for loading the complete standard library.
- Add "addRevocably" module.

EScript 0.7.0 Eli (Stable)
Development: 2013-12

- Named after Eli, the elephantine rabbit
EScript 0.6.7 Elise (Development version)
Development: 2013-03 -- 2013-12

- Named after Elise the Daring Rabbit
- Language feature release.

- Support for unicode identifiers (utf8)
- All strings are now utf8 encoded.
- Support for switch/case added.
- Support for loop-else added. E.g.:
for(var i=0;i<10;++i){
if( searchForSomething(i) )
break; // found!
outln("something not found...");
- Support for @(once) added: Statements can be annotated to be called only once.
@(once) thisFn.staticCounter := 0; // this is only executed once
return ++thisFn.staticCounter;
- Static variables added: Variables declared with the keyword 'static' are
accessible in the smallest surrounding block and all
nested blocks -- including functions defined here. The variable's storage
exists only once, even if defined in a function
which is called recursively. This can e.g. be used to create a closure.
var createUID;
static id = 0;
createUID = fn(){ return ++id; };
outln("New id: ",createUID());

- '---|>'-operator's semantic changed for Types (equivalent to the .isA(...)-

someObject ---|> someType now consistently means: someObject's Type is
someType or someObject's Type inherits from someType.
[] ---|> Array == true
[] ---|> Collection == true
Array ---|> Type == true
Array ---|> Collection == false !!!! changed !!!
Array.hasBase( Collection ) == true *** new ***
Collection.isBaseOf( Array ) == true *** new ***

Minor language changes:

- Array.filter only accepts one parameter.

- string handling updated
- minor fixes and cleanups
- old ES_FUNCTION macro removed; ES_FUNCTION2 renamed to ES_FUNCTION
- ObjRef.toType<targetType> renamed to ObjRef.castTo<targetType> (toType
temporarily remains for backward compatibility)

- Scripted, module base, Std-Library introduced.
- IO.filePutContents -> IO.saveTextFile
- IO.fileGetContents -> IO.loadTextFile

EScript 0.6.6 Eduard (Stable version)
Release: 2013-02-10

- Named after Eduard the Great Rabbit

- (bugfix) Missing conversion from "const char *" to RtValue added.

- Number of necessary headers reduced: Normally, a binding's header needs only to
include the header of the (ext)reference object
Everything needed for a basic implementation in the binding's .cpp file is
included in
<EScript/Basics.h>. If additional standard types are needed
(Number,Bool,String,Array, or Map)
the additional header <EScript/StdObjects.h> can be included.
- Helper:
- declareObjectFunction(...) added.
- New function macros introduced: ES_CONSTRUCTOR, ES_CTOR, ES_FUNCTION2(to be
renamed), ES_FUN,
ES_MFUNCTION, and ES_MFUN. The new macros allow direct conversion to the
desired C++-type
(instead of the EScript wrapper type). Explicit conversion of a function's
result into an
EScript object is also no longer necessary in most cases.
The available parameters are:
- rt (the runtime, formerly named 'runtime')
- parameter (array of parameters; same as before)
- thisObj (the object of the desired type -- c++ object or the EScript
wrapper object.
Replaces the former 'self' or '**self'.)
- thisEObj (the wrapper object; corresponds to the former 'caller' or 'self')

EScript 0.6.5 Emilia (Development version)
Development: 2012-11 -- 2013-02
Developers: Claudius J�hn, Benjamin Eikel

- New naming scheme: Each new version gets the name of a famous rabbit. Beginning
with the glorious Emilia.
- Changelog introduced: All relevant changes should from now on be documented in
this document.
- Faster: Approx 5% speedup in the default benchmark.
- Automatic number conversion limited: All built-in functions that use a number
as parameter expect a Number or a String now. Other types result in a
warning message.
- Multi parameter improvements:
- The marker for a multi parameter is now '...' instead of '*' (inspired by
the syntax of c++'s variadic templates). The use of the old marker
is deprecated.
- Any parameter can now be the multi parameter (and not only the last one):
e.g. fn(a,arr...,c){}
- If the multi parameter's name is omitted, all parameters are silently
ignored. E.g.: fn(a,...){} takes at least one parameter, but all but
the first are ignored.
- Parameter expansion: When appending '...' to an array parameter value in a
function call, it is expanded and each entry results in a separate parameter
value. This allows calling functions with a dynamic parameter count.
E.g. myFunc(0,[1,2,3]...,4); is equivalent to myFunc(0,1,2,3,4);
This also works for array constructors:
E.g. [0,[1,2]...,3] is equivalent to [0,1,2,3]
- Need for additional brackets around functions removed: Before, if a newly
declared function was to be called directly, it had to be enclosed
in brackets: (fn(){out("foo");})();
These brackets can now be left out: fn(){out("foo");}();

- NumberRef removed: It introduced too complex internal contraints.
- RtValue introduced: It wrapps objets as well as several primitive and
internal types.
- Function's use RtValue as result: When returning a simple data type
(bool,uint32_t,int32_t,float,double,string), these can be directly returned
without creating an object.
- New Conversion functions: To convert an ObjPtr to a specific type (not
an EScript-type), one can call parameter[?].to<desiredType>(runtime).
E.g.: Convert parameter 0 to an unint32_t value and throw an error if this
is not possible (or in this case just issue a warning):
Optionally, a default value may be given that is returned if the ObjPtr is
undefined. E.g.: parameter[0].to<uint32_t>(runtime,42)
To allow user defined conversions, add a template specialization of
userType EScript::convertTo<userType>(Runtime,objPtr)
- Universal factory functions: A set of overloaded EScript::create(...) functions
has been introduced to create Objects of the desired type.
E.g.: EScript::create(false) --> Bool, EScript::create(42) --> Number
It is encouraged to add an appropriate factory function for all user
defined types that wrap a specific c++-type:
E_MyType EScript::create(MyType &){...}
- All standard types provide a *-operator to access the contained value.
- New (Ext)ReferenceObject constructor allows forwarding arguments to the
referenced object's constructor.

- Cleanups, minor bugfixes and tweaks.
- Delegates use a memory pool resulting in a more efficient creation and
- Try to use std::move where possible. (speedup)
- ...

EScript 0.6.4 (Stable version)
Release: 2012-10-11
Devopers: Claudius J�hn, Benjamin Eikel

- Bugfixes
EScript 0.6.3 (Development version)
Development: 2012-05 -- 2012-10
Devopers: Claudius J�hn, Benjamin Eikel

- Use new C++11 compiler.
- Redesign of the internal AST-classes.
2012-04 ... Release: EScript 0.6.2 Compiler and Bytecode-based runtime added,
2012-02 ... Release: EScript 0.6.0 (GubbelGubbel) Property support added; private,
const, init, ...
2011-07 ... Release: EScript 0.5.6
2011-04 ... Release: EScript 0.5.4 (St�pselhase)
2011-02 ... Publication at with MIT/X Consortium License
2011-01 ... Release: EScript 0.5.2 (St�pselhase)
2010-06 ... Release: EScript 0.5 (St�pselhase)
2008-04 ... Release: EScript 0.4 (Kamuffel)
2007 ... Release: EScript 0.3 (Schm�rf)
2007 ... SimpleScript 0.1 -> EScript 0.2
2006 ... SimpleScript 0.1