Table of Contents

Preface

AmbientTalk is a distributed programming language especially geared towards developing applications deployed on mobile networks. The language combines elements from languages such as Scheme (closures), Smalltalk (pure OO), Self (prototypes and delegation) and actor languages.

History and design rationale

The AmbientTalk language saw the light in 2005, when it was implemented by Jessie Dedecker as part of his PhD research. AmbientTalk was originally built as a distributed extension of another language named Pic% (pronounce: Pic-oh-oh). Pic% itself is a prototype-based object-oriented extension of the language Pico, a language developed by Prof. Theo D'Hondt in 1996. Both Pico and Pic% were originally developed for education purposes in the context of introductory programming courses for students in the faculty of sciences.

Pico borrowed many of its design principles and concepts from the Scheme programming language. The foremost design concern of Pico was indeed to build a simple and extensible language based upon simple rules. Since its original conception in '96 and its use in teaching, Pico has also been used as a research artifact. Many offspring exist in which particular language features have been investigated. AmbientTalk is one such offspring, used in the context of exploring distributed programming abstractions for mobile ad hoc networks.

The AmbientTalk language described in this tutorial is actually AmbientTalk/2, a successor of the original 2005 implementation by Jessie Dedecker. Although AmbientTalk/1 was successful in terms of providing novel language features for mobile ad hoc networks, it lacked several important language features that hampered the development of larger software applications (e.g. a module system, exception handling, etc.)

In 2006, Tom Van Cutsem and Stijn Mostinckx started the AmbientTalk/2 project, which resulted in the present version of AmbientTalk. They redesigned most aspects of the original language, including the syntax, to make AmbientTalk more accessible to people unfamiliar with the Pico language. AmbientTalk/2's main purpose is still to be used as a research artifact for PhD students at the programming technology lab. On the other hand, from the beginning AmbientTalk/2 was conceived as a usable, practical programming language, which could be used to construct large and real-life software. This design decision motivated the inclusion of such features as a module system and symbiosis with the underlying Java Virtual Machine, for example.

Perhaps the most significant change from AmbientTalk/1 to AmbientTalk/2 is the incarnation of actor concurrency in the language. In AmbientTalk/1 - inspired by other actor languages such as ABCL/1 - actors were represented as distinct so-called active objects, and the language explicitly distinguished those active objects from ordinary, passive objects. AmbientTalk/2, on the other hand, is based on the notion of actors as “vats” or “containers” of ordinary objects as introduced in the E programming language. As you will read in the subsequent chapters of the tutorial, this design change shifted the emphasis from actors back onto regular objects, which in the general case makes AmbientTalk/2 programs more reusable and easier to understand.

Today, AmbientTalk/2 is being maintained by a number of PhD students and postdoctoral fellows of the ambient research group of the programming technology lab. The language is still being used as a research vehicle, although it is accessible to the general public and can be used to develop realistic distributed applications.

About this tutorial

The tutorial introduces the AmbientTalk programming language from its basic building blocks (functions, objects, messages) up to its advanced distribution model (remote objects, discovery, failure handling). The tutorial is not a comprehensive reference manual that tries to give the precise semantics of all of AmbientTalk's language features. Rather, it tries to give the reader hands-on experience in using the main features of the language in an example-driven manner.

The tutorial is subdivided into different chapters that each highlight different aspects of the language. It is recommended to read through the tutorial sequentially, although this does not preclude a reader interested in concurrency and actors to read that chapter early on, and then get back to previous chapters when things are unclear.