Orc configures 'site calls', each with an input (potentially a tuple)
and an output. It provides three site combinators: sequence, parallel,
and prune. I must admit to some confusion, raould. Your above question
is preceded by a statement ("I'm not sure that means the language has
to include operations to implement object config") from which I infer
that you believe the Orc language does not provide operations for
describing its site configurations. Are you making a strong
distinction
In any case, it is difficult for me to offer my thoughts on Orc's site-
combinator language independently of its context.
Orc is clearly designed for transient one-off programs and "shallow",
centralized composition of distributed systems. In its purpose, Orc is
certainly an adequate language. It assumes very little about site
calls, and can readily abstract independent external systems that
'reply' to messages.
But it is my impression that the apparent advantages of Orc are due
more to deficiencies in other languages than to the virtues of Orc.
Orc is a simple language bordering on simplistic. It's easy to
implement, and does a lot to aide in some difficult problems, and is a
wonderful proof-of-concept, but is ultimately incomplete in ways that
keep it from a broad range of applications as a general-purpose
programming language. I would not use Orc for interacting with
strongly *inter*dependent systems. I would not use Orc if I needed
long-running programs (i.e. object graphs that might continue sending
messages for days on end). I would not use Orc to construct large
programs (requiring 'deep' composition) or if I desired cross-
combinator optimizations, or if I wished any sort of protocol
(precondition+postcondition and expectations) analysis. I would not
use Orc for true distributed programming.
It might be more accurate to say: Orc and object languages that lack
configuration support complete one another excepting in various
critical ways concerning type-safety, tight integration, safety and
failure issues involving site interdependence, optimizations, and the
various other benefits of first-class language support.
The ability to limit side-effects of constructors is exactly about
achieving a few of those features missing from Orc. It supports
interdependent systems and larger composition (especially allowing for
cyclic interdependent systems and eliminating order-of-construction
concerns for large programs and potentially black-box abstract
configurations). It also supports some powerful optimizations,
including static compilation, and should make regeneration after
partial failure easier to perform.
The other points about 'useful properties' for object configuration
languages are along the same lines. They're useful properties of the
object configuration language that improve the gestalt programming
language. One can get by without those constraints but the result is
(to my analysis) rarely going to offer a justifiable benefit for ease-
of-use, reliability, safety, security, or optimization.