This site's content was compiled from 1993 to 2006. Beyond that, Google is your friend.
The most commercially-successful of the Eiffel-like languages is in widespread use by Apple Macintosh developers - but most of them are blissfully unaware of its Eiffel connection.
This is a major update of an article I wrote in 1998 for Geoff Eldridge's "Eiffel Liberty Journal", and before that for comp.lang.eiffel. -- Roger Browne
Patrick Soquet, a French-speaking Belgian software developer, was exposed to ISE Eiffel 2.x at the beginning of the 1990s and found much to appreciate about it. However, his interest was multimedia authoring, and ISE's product and language didn't quite meet his needs.
In multimedia applications, there is often only one item with a specific behaviour, and Patrick needed a dynamic way to extend single objects at runtime - in addition to the inheritance-based extension and refinement of classes at compile time.
So, together with Alain Soquet, he designed the Key Language. They experimented with C and Lisp dialects and discussed the merits of Eiffel, Oberon, Self, Smalltalk, and other languages, leading to the design of the Key Language.
The Key language was designed for Arborescence, a CD-ROM publisher. The language was part of the custom authoring tool that Arborescence used to produce tens of titles - and others later used to produce thousands of CD-ROM titles.
In 1993, Apple Computer licensed the authoring tool from Arborescence, and started selling it as the Apple Media Tool (AMT). The Key language was called the Apple Media Language (Key 1), though most users referred to it as AMT/PE - the Apple Media Tool Programming Environment. It has occasionally also been called the "K Language" on account of the ".k" suffix used for the source files.
The Apple Media Tool was a visual object-oriented multimedia authoring tool. It allowed users to quickly and easily assemble media elements (graphics, video, text and sound) and then add interactivity and navigation without the need to use scripting.
Behind the scenes, AMT generated a program in the Eiffel-like Key Language. The generated program could be modified or extended, or an application could be written from scratch in Key. The Key code could then be compiled for the Macintosh or for Windows (using C as an intermediate language).
Eiffel users will not be surprised to hear that Apple described the Key language as "efficient and easy-to-read, yet easy to maintain and modify", and said that "programmers can extend the AMT/PE class library to build reusable libraries; once objects are written they can be used in later projects."
The Programming Environment included a cut-down version of the Macintosh Programmer's Workbench and a debugger, making it possible to set breakpoints, step through code and examine the state of objects in a running application.
The Programming environment also allowed external routines to be coded in C, thereby providing access to the Macintosh and Windows toolboxes.
The Apple Media Tool itself was mostly written in Key, and source code was supplied. A number of users wrote and distributed enhancements for it, and for its runtime engine.
The language reference for Key 4 is freely available. In the preface, Patrick Soquet writes:
I expected it would be much tougher to write a small book than a big software. And it was. And it still is ... So please consider the book as a work in progress.
Here are a few snippets to give you a feel for Key:
A Key application is organized as a project comprised of classes. A class defines a type by inheritance from its parent classes, and by features introduced in the class. Class features are fields and methods.
Objects are intances of a class. They take up memory, and may contain other objects.
Fields are variables available to an object, and are initialized to 'void' (of type NONE) when the object is created. ":=" is used for assignment.
Methods are functions or procedures available to instances of a class.
Garbage Collection is automatic. Any object not currently referenced may be dynamically purged from the heap.
Statements end with a semicolon. Anything after two hyphens ('--') is a comment.
Predefined types are ANY, INTEGER, STRING, CHARACTER and BOOLEAN. Important predefined constants are true, false and void.
Standard unary and binary math operators are available. The result of a function is returned in a special field called 'result', which is set to void on entry to the function.
You can include "C" external code.
Assertions include the "check" instruction, plus preconditions which are integrated with a robust exception handling mechanism. There doesn't seem to be an explicit language construct to support postconditions or class invariants.
The Key Language grew out of Eiffel 2.x so it differs from modern Eiffel, and some changes have been made to suit the taste of the language designers - such as the use of 'self' instead of 'current'.
Also, Key has been modified extensively to suit the needs of multimedia programming, where it is frequently the case that there will be only one object of each type, or that each object will differ only by the addition of a method or two.
In Key, methods in addition to those defined by the class may be specified by an object when declared. All that is needed is to use the keyword "object" instead of "class". Ruby programmers will feel right at home here.
Only an object may initialize its fields. This is done with the 'with' statement - creation procedures are not used.
The declaration of a class or object implicitly creates a TYPE object of the same name. These TYPE objects are used at runtime for type checking. The 'is?' operator can be used to test a varaible's type, for example:
if arg is? STRING then ... end if;
The integer division operator is "%".
The "=" operator tests for reference equality. As in Eiffel 2.x, the only expanded types are basic types (INTEGER, CHARACTER and BOOLEAN). There is no 'deep_equal' operation, but two strings can be tested for value equality with the rather unintuitive expression "(s - s2) = 0".
'[' marks the start of an array and ']' marks the end of an array and commas ',' are used to separate items in an array, for example:
Items is [ "Picture", "Sound", "Movie", "Text" ];
'#' is used to get the index of an item in an array. For example...
count := #"test";
...would assign the value of 4 to 'count'.
'@' is used to access an element in an array, and a STRING behaves like an ARRAY of CHARACTERs. For example...
c := "test" @ 2;
...would assign to 'c' the CHARACTER 'e';
The first example demonstrates the "from" loop, which is similar to Eiffel's "from" loop except for the addition of an optional "step" subclause:
from BoundsCheck := false; until BoundsCheck loop DoSomething; step self.increment(); end
The next example illustrates many differences from Eiffel. It shows the declaration of an object - a customised instance of a class. The keyword "is" serves both for inheritance and to declare initial values (which are not restricted to manifest constants as they are in Eiffel).
The keyword "has" introduces new features, whilst "with" introduces initialization of features already declared in the class (in this case, in the class "cPictureHandler"):
object Blinker is cPictureHandler with Duration is 60; -- a constant attribute (60 ticks = 1 second) Behavior is cDefaultBehavior -- a nested object definition has ... -- new features for 'Behaviour' go here with Enabled is false; Shown is true; end; end;
The authoring product that became AMT was developed for Arborescence by a team of three Belgian engineers: Gilbert Amar, Sebastien Burel and Patrick Soquet.
Apple was looking for authoring tools, and licensed it. AMT became available in September 1993, and by 1997 over 100 commercial CD-ROM titles had been developed with it, ranging from art history and children's entertainment to corporate training and rock music.
In 1996 Arborescence developed, and Apple Computer published, the second version of the Apple Media Tool and the Apple Media Language (Key 2).
AMT gained second place in terms of market share, with first place going to Macromedia's Director, despite Director's origins as an animation tool rather than a multimedia authoring tool.
According to AMT user Marc van Olmen, Apple's long-term plan was to replace the "Key Language" component of AMT with a product called ScriptX. ScriptX was to be the "be-all and end-all" of multimedia scripting languages, and was being developed by Kaleida, a joint Apple-IBM venture.
But as is so often the case, throwing hordes of developers at a project doesn't necessarily produce proportional results. Apple eventually realized that ScriptX used too much memory, was too slow, too buggy and generally over-engineered. ScriptX was dead.
But so, it seems, was Apple's interest in AML.
In March 1997, Apple made some tough downsizing decisions, and released a list of technologies that it was keeping, and a list of those it was dropping. Those dropped included text-to-speech products, the AIX server software, and AMT.
Andrew Salop, AMT Product Manager, commented, "AMT, despite its brilliance, was not a comfortable fit in Apple's business model. And many of us have the bruises to prove it. The recent announcement was no surprise."
It had always been a difficult product for Apple. At first it had been distributed through their developer channels - but multimedia authors don't think of themselves as developers.
Things improved once distribution was handed over to Claris - but then Apple released a Director plug-in for QuickDraw3D before making the same functionality available to AMT. This is akin to Microsoft issuing plug-ins for Firefox before Internet Explorer!
There were also tug-of-wars within Apple. Some thought that OpenDoc could be something for AMT; others wanted to integrate Hypercard; some wanted to drop AML in favor of QuickTime Interactive. There seemed to be no clear strategy for the product.
Andrew Salop continued: "but this does not mean the product will die. The facts are that this product works, is evolved, has a loyal following, and given the right development environment and marketing resources can become a major player in the interactive industry."
And it seems that he was right.
AMT/PE was then taken back by the company that developed the first and second versions of AMT, and originally licensed the product to Apple - by then known as Encore Développement, and a subsidiary of the global Havas communications group.
Encore Developpement continued to enhance the product. Although they apparently released some upgrades to the AMT/PE engine and runtime, they were themselves a large publisher of CD-ROMs and their main focus appears to have been to develop the product for their own in-house use.
The original designer of the Key language, Patrick Soquet, then formed another company, TribeWorks, which in 1998 wrote from scratch a much more advanced authoring tool, using a new implementation of the same underlying language - this became Key 3. Tribeworks called their authoring tool iShell and it too became commercially successful. As was the case with AMT before it, iShell holds second place behind Macromedia Director in the multimedia authoring market.
Multimedia authors can use iShell to produce their titles by working at different levels. They can code directly in the Key Language, or can do everything through the GUI interface. The interface appears (from the screenshots) to be rather nicely done - it's a combination of drag-and-drop assembly of visual elements with procedural coding (loops, conditionals etc) done visually in a notation similar to Nasi-Schneiderman diagrams.

It seems that the Eiffel-inspired Key Language has a long and successful future ahead of it. It is now as healthy as ever, both commercially and technically, within iShell.
Tribeworks felt that they could do for the web what they had done for CD-ROM authoring. To do that, they needed a high performance application server, so they wrote one called "Webkool" that would allow websites backed by MySQL or Oracle or SQL Server to serve high-performance multimedia content. In 2001, Tribeworks issued a press release stating:
The new server is programmed in Key, a computer language developed by Tribeworks co-founder Patrick Soquet that allows both class abstraction and object description. The language is celebrating its 10th anniversary.
Furthermore, in 2002 they released both Webkool and a multithreaded version of the Key 4 programming language compiler, libraries and tools under the GPL.
It seems, however, that Webkool and the open source version of Key 4 weren't as popular as iShell, and www.webkool.net doesn't include much recent content. (As at 11th March 2006 the website is inaccessible - but as the Google Cache shows that it was successfully crawled on 5th March 2006 this may be just a temporary outage.)
How did the Eiffel community miss the open source release of this language and toolset? If anyone finds a copy floating around, please let others know... In the meantime, free evaluation copies of iShell are available for Windows and Mac, and development continues with a Mac-x86 version about to be released.
From the wayback machine:
Live sites (as at March 2006):
Here's a quote from Kate Adams of Apple, about AML (and, indirectly, about Eiffel):
"You may find, as I did, that you can be a mediocre Hypertalk programmer, a poor C programmer and completely incapable of even thinking about programming your VCR but still be a darned good cross-platform object-oriented programmer because you don't have to worry about all the nit-picky stuff at the bottom"
And here's a quote from the "Lina" project, which wrote and shared AMT software:
"AMT [software] ... is written mostly in a peculiar language ... conceved after an experimental language called Eiffel."
So there you have it! That's what people think of Eiffel from the "other side of the fence"!