The Sonnet Environment
With the design of Imager, we are interested in
providing artists with the ability to define instruments that
can be used to play with color and form as musicians play
with sounds. Artists will wish to bring ideas and forms of
their own to this process. Enabling that is achieved by
embedding Imager’s facilities in a programming
environment.
Sonnet was originally designed as a visual
environment for associating runtime actions with running
programs. It has since evolved into a visual programming
language for the rapid development of real-time
applications [6]. Sonnet uses a circuit metaphor, and
embodies event-flow semantics. Sonnet behavior is
expressed in two forms: as primitive “components”, and
as “circuits”, which are interconnections of components.
We often refer to Sonnet programs and Sonnet circuits
interchangeably. The programming activity in Sonnet
consists in constructing different arrangements of
components into circuits that perform some computation.
Components are entities that have 1) a set of stronglytyped
input and output “ports” through which data
packets flow, and 2) an Execute() method. An input
port may be designated a “trigger”; it then causes the
Execute() method to be invoked whenever a data
packet arrives on that input.
As shown in Figure 2, components are interconnected
using “wires” which attach one output port to one or more
input ports. It is permissible for a component to have no
inputs or to have no outputs (as is often the case with
interface components).
A circuit can be collapsed into a single component,
known as a “chip”, and used in the same manner as a
primitive component. Chips allow the designer to
structure Sonnet programs hierarchically.
Sonnet is a strongly typed language. That is, all ports
accept or produce a well-defined type of data packet