User Tools

Site Tools


Sidebar

Jump to
AmbientTalk
CRIME
iScheme

at:changelog

This is an old revision of the document!


AmbientTalk/2 ChangeLog

build060407

System library additions:

  • added a unit testing framework, see at/unit/test.at
  • added a proper vector abstraction, see at/collections/vector.at
  • added support for ambient references, see at/lang/ambientrefs.at
  • added initial support for exceptions, see at/exceptions.at
  • added a small timer library for scheduling code, see at/support/timer.at
  • added a minimal object inspector using symbiosis with java, see at/support/inspector.at

Implementation changes:

  • The AT/2 interpreter no longer uses any of the JGroups or Log4J Dependencies. Rather, distributed network communication is performed in a dedicated manner. This improved performance, made AT/2 less dependent on external libraries, has a tremendous effect on the memory footprint and - most importantly - has enabled AT/2 to be used on the J2ME CDC platform. To the AT/2 programmer, the interface remains the same.

Bugfixes:

  • 0000009: [] Bug in Detection of offline VMs (in new distribution layer) (tvcutsem)
  • 0000010: [] Race condition in distribution layer when going offline (tvcutsem)

build230307

  • added a new option '–network' or '-n' to IAT which allows you to configure the name of the JGroups overlay network that the AmbientTalk VM should join. Very useful for debugging or demo purposes (allows you to set up a 'private' network of AT/2 VMs)
  • Symbiosis: when Java code performs obj.equals(obj2), and obj is an AmbientTalk object, the implementation now correctly invokes the obj.==(obj2) AmbientTalk method (provided that obj2 is also an AmbientTalk object)
  • Meta-level interface: createMessage's interface has changed: the method now takes as arguments the selector, a table of arguments and a table of stripes. The sender is no longer taken into account and the table of stripes is used to stripe the created message with.
  • Added new syntax to support the 'annotation' of message sends with stripes. For example, you can write o←m()@Foo, which is equivalent to writing actor.createMessage(`m, [], [Foo]).sendTo(o). Any expression can be put after the '@'. It is the intent that the result of evaluating that expression is either one stripe or a table of stripes (e.g. o←m()@[Foo,Bar]). Synchronous message sends can also be annotated.
  • Reworked the futures language module to support 'annotated' message sends. When loading the futures using FuturesModule.enableFutures(), you can pass an optional boolean argument (by default false) which says whether the futures language module should apply to unannotated messages or not.

The futures language module now also exports two stripes, 'FutureMessage' and 'OneWayMessage'. When the 'FutureMessage' is attached to a message send, the message will always return a future (if the futures language module is activated). If 'OneWayMessage' is attached to a message send, the message will use the default behaviour (i.e. normally return 'nil') even if the futures are enabled. Hence, you have two options to work with futures from now on: you can evaluate 'enableFutures(true)' to make ← return futures by default, and use o←m()@OneWayMessage to create pure asynchronous messages without futures, or you can evaluate 'enableFutures(false) to make ← behave normally (i.e. return nil) and then use o←m()@FutureMessage to explicitly require the creation of futures.

  • distributed memory management extensions by Elisa: it is now possible to take an exported object offline (using the takeOffline native). Far references that point to objects that are taken offline perceive this event as though it was a disconnection, and hence this will trigger any when:disconnected: listeners on that object. Additionally, when:expired: observers can be registered on a far reference to be notified explicitly when an object has been taken offline rather than disconnected (otherwise there is no means to distinguish between takeOffline/disconnection)
  • added the 'mobiTunes' demo program to the system library (under at/demo/mobiTunes.at)

build150307

  • Contains important bugfixes w.r.t the 050307 release.
  • Based on comments by all of you during our meeting, we changed the semantics of actor.install: { code }

actor.install: now takes an arbitrary 'protocol' object and installs that object as the mirror of the actor. Also, its return value is no longer an object you can use to 'unmix' the protocol. Rather, it now returns the old installed protocol. If you still want to mimick the old behaviour, you can do so with code like:

def mixin(protocolCode) {
  def oldActor := actor.install: (extend: actor with: protocolCode);
  object: {
    def uninstall() {
      // restore the previously active protocol
      actor.install: oldActor
    }
  }
}
  • The import: native now works, but to make it work, we had to implement it as syntax, not as a native method. If you would like to find out why, come by and ask me :-) Here's an example of how to use import:
def trait := object: {
  def foo() { self.bar() + 3 };
  def bar() { 5 };
  def baz := 3;
};

def obj := object: {
  import trait alias bar := tralala exclude baz;
  def bar() { 1 };
}

obj.bar() => 1
obj.foo() => 4
obj.baz => error
obj.tralala() => 5
  • The futures language mixin now works! Please check out the source code in the native library provided with the distribution under at/lang/futures.at

Example:

import /.at.lang.futures;
enableFutures(); // changes the MOP of the current actor
def id(x) { x }
when: self<-id(42) becomes: { |val| system.println(val == 42) }

It might be that we later decide to invoke 'enableFutures()' automatically when you load the futures module.

  • The mirror architecture has been updated, but I'm not going to detail all bugfixes/changes here :-)
  • Project/build changes:
    • Don't forget to change the value of the AT_HOME environment variable in TextMate to point to the latest build!
    • Based on the proposal by StijnT, I changed the structure of the AmbientTalk 'object path' argument from

path1:path2:path3:… to name1=path1:name2=path2:name3=path3:… The names given in the path will be the names of slots defined in the lobby at startup time. For example, if you specify:

iat -o foo=/Users/me/test:bar=/usr/local/lib

Then in AmbientTalk: lobby.foo is bound to the namespace “/Users/me/test” and lobby.bar is bound to the namespace “/usr/local/lib”

  • By default, if you do not give an object path to iat in the command line (using -o), IAT will use the following path:

$AT_OBJECTPATH:at=$AT_HOME/at In other words: it uses the value of $AT_OBJECTPATH if that variable exists (cfr. Java's $CLASSPATH) and always includes the 'native' library which will be known under the name at. You will see that in the new build, the native library is shipped in the at subdirectory. It is now allowed to shadow names in the object path (a warning is printed on the console to make you aware of the shadowing). For example, if your $AT_OBJECTPATH equals foo=/usr/lib/ambienttalk and you start iat using:

iat -o foo=/test:$AT_OBJECTPATH

then lobby.foo will be bound to /test

  • If you do not give the location of an init file to iat (using -i), iat will try to load $AT_HOME/at/init/init.at or fail if it cannot find this file.
  • In order to run IAT properly from within Eclipse with this new semantics, you have to set the value of the AT_HOME environment variable in your 'run configuration'. Go to the 'run' menu, select the IAT run, in the 'arguments' tab, enter the following under VM Arguments:
-DAT_HOME="${project_loc:AT2 Library}/edu/vub"

This passes to the JVM the value of the AT_HOME property. It is set to the location of the edu/vub subdirectory of the AT2 Library project, which contains the native AT library. Note that if you named that project differently, you need to adapt the string “AT2 Library” to match your project name.

at/changelog.1176133289.txt.gz · Last modified: 2007/05/08 20:40 (external edit)