Friday, April 22, 2011

Weekly release - 1.6.0.3

After quite a long period of time I finally made a next release.

This time it includes several major changes in ELENA byte-codes and syntax.

- Several "big" bytecode commands (like redirect and dispatch) are split into smaller ones to reuse existing commands. It means 1.6.0.3 is not binary compatible with previous versions.

- It is possible now to include other symbol namespaces without aliases. I.e. instead of old code:
#define basic'* = std'basic'*.

...

#var anObject := basic'True.

it is possible to write the following:
#define std'basic'*.

...

#var anObject := True.

- The simplified syntax to create a group. Compare old code
           #group(events'EHandler, BtmOk) += 
{ on'Click'process = self set &dialog_result:basic'false. }.

with a new one:
           BtmOk~events'EHandler += 
{ on'Click'process = self set &dialog_result:basic'false. }.


- There is a simplified syntax for providing compiler hints:
#method(disp) += anObject
[
...
]

The work on an alternative library (lib2) is started. It will eventually replace the existing one starting from 1.7.0

Tuesday, April 5, 2011

Current status

It has been a while since my last post and a last release. So I decided to post a little update on the project status.

At the moment I'm working on introducing a new concept to the language - external role (or ELENA protocol).

As you probably remember a role is an alternative VMT. But I realized that there could be an external one. It can be considered as a short-time mutation as well. The good thing is that unlike a normal mutation (either #annex or #group) it does not introduce any performance overload. As a result I will implement an alternative API (so called API2), located in lib2 (the source code in src2).

So how it will be used? For the programmer there will be nothing new. For example, we've implemented a protocol __address. To use it we have to write the following: anObject1 __address ifequal:anObject2.

anObject1 actually may not know anything about the protocol (though in most cases it should implement some methods to support the protocol).

The next release will contain the first implementation of the protocol concept