Sending messages to objects
Program control flow is mostly based on sending messages to objects and executing functions.
Statement of sending message has a typical receiver-dot-message-parameters syntax. For example:
is a sending message println to the object host
with a vector of parameters ("Hello").
It is also possible to send message by name, by giving the string of the message name in the brackets
[ ... ].
which is equivalent to above example.
fun f = host.println;
f("Hello"); // sending message
f("Second time Hello!"); // sending another message
Any sent message will returns a value in response or throws an exception, just like executed function.
Object with assigned message to send, may be treated together as a function,
that is, as a value of fun type.
For more about executing functions see Functions and Function execution.
Messages sent to the object are intercepted depending on the type of the object.
In case of objects of basic class or monitor class, appropriate class method is selected to be executed,
and if there is none, then default message catcher will be executed
In case of object of selector class, sended message will be hold until some selector thread
calls corresponding accept instruction
(see Selector class).
In case of system object, a sent message (if it was not optimized by the compiler)
will execute internal built-in function,
and that mostly depends on the execution software version.
When class of the object has no appropriate method and default message catcher is not defined,
then uncatched message will be passed down in inheritance chain,
to be catched by the next object in chain (see Class inheritance).
When inheritance chain has cycle, and none of its objects catches the message, then execution software
will throw an exception.