Go to the first, previous, next, last section, table of contents.


TOM is an object oriented programming language. The following example shows the famous `hello world' program, this time written in TOM.

 1  implementation class HelloWorld: stdio
 3  int
 4    main Array arguments
 5  {
 6    [[out print "Hello, world!"] nl];
 8    = 0;
 9  }
11  end;
13 implementation instance HelloWorld end;

In line 1, a class is defined with the name HelloWorld. It inherits from stdio, implying that anything defined by the stdio class is directly available.

Line 2 is empty. That's ok, as empty lines have no significance.

From line 3 to 9, a method is defined. This method is named main; it accepts one argument, named arguments, the type of which is Array; it returns an int.

The main method, when implemented by a class, is special as it is the method invoked when the program is started. The arguments argument is an array of strings holding the command line arguments to the program. main returns an int which will be the exit value of the program.

In line 6, two methods are invoked. Invoking a method is the same as sending a message. The first invocation send a message print to the object known as out. out is a variable inherited from stdio; it is the `standard output' stream of the program, known as stdout in C. The print message has one argument, a string containing `Hello, world!'.

By convention, every print method implemented by a stream returns the receiver, so that the invocation itself can be used as the receiver of another message to the stream. In this case, the argument-less message nl is sent. This causes a new line to be output to the standard output stream, and that stream to be flushed to make sure any buffered contents will be displayed on the user's terminal. nl also returns the receiver, but that value is ignored.

In line 8, the assignment of 0 with an empty left-hand-side sets the value to be returned from this method. It returns 0, a value which indicates success. Note that this form of the return value assignment does not actually cause an immediate return from this method (it would if the = were replaced by return).

By the end in line 11, the definition of the HelloWorld class is finished. In line 13, the instances of the HelloWorld class are defined. Since we never allocate HelloWorld instances, this definition is rather empty.

So much for an easy introduction. The rest of this document will be more of a reference manual, with not that many elaborate examples.

Go to the first, previous, next, last section, table of contents.