Ideas about formalizing and tooling for composition primitives

Dear RTT&BRIDE experts,

in a private email conversation with Herman I have discussed some ideas
about possible contributions to (1) formalizing the "best practices" of
RTT/Composition and (2) the accompanied tooling. I hope, that my great
fascination and some limited experience with the explicit modelling and
model-driven tooling will be useful for the community (?). However,
I would like to ask you for comments/suggestions/improvements
before actually getting to work.

The need of both composition primitives and tools has been already
discussed on the orocos-dev mailing list. Thus, the goal of this email
is not to ask "if", but "how" to do this.

To some extent Sylvian is right - a lot of what we need may be already
there (in ROCK). But to stress the point: we want the models to be
*explicit* and tools, which are derived from these models.

At this moment, there are at least two already identified scenarios: (A)
"ROCK-like" composition (i.e. as supported by the implicit ROCK
meta-model and Ruby-based tools) and (B) "Simulink-like" composition
(i.e. as discussed few days ago and partially implemented in FBSched).
These are by no means exhaustive, but they seem to cover a fairly large
number of use-cases and that's why they deserve some special attention.
I can also think about (C) "plan-like" scenario, with the focus on the
control-flow instead of data-flow composition like in (B). However, this
is even more difficult and I guess, that for any non-trivial use-case it
requires manual coding/scripting (so let's skip it at this moment).
I would like to propose/discuss the following road-map.

For the (A) scenario I would prefer to not reinvent the wheel, but
rather make the ROCK's composition meta-model explicit. I have noted the
following check-list of issues, which need to be addressed by the
meta-model: aggregation of components and connections, promotion and
renaming of ports (and operations). Next step is to derive at least
2 tools from the meta-model: textual (preferable with ROCK-compatible
syntax) and graphical (with the notation aligned with conventions of
diagrams in the RTT manuals). The goal is to reuse/refine what's already
in ROCK and extend its capabilities with graphical tooling.

For the (B) scenario the main problem I see is not in the composition
primitives (i.e. data-flow connections of ports with the DAG/Polytree
restrictions applied), but in specification of the order of
activation/evaluation (the data-flow computation model is not precise
enough here). Identified "best practices" include: "hidden"
semantics/heuristics of Simulink [1], similar solution by Scicos [2] and
guard expressions of Erlang [3]. For me it is still not clear how these
approaches can be glued with the existing 'connection policy' mechanism
and which of them is "the way to go". One idea is not to stick with just
one of them, but to introduce an abstract 'activation policy'
concept/enumeration into meta-model (but I would still really want to
find "the way to go"!).

As soon, as we formalize some composition/activation primitives for (B),
we should evaluate them with some of the "reference use-cases" (and we
need to find them anyway!). Yes, evaluate, because the question is not
what information to get from the designer, but how he/she wants to
express it.

Ideally, I would like to integrate both (A) and (B) scenarios into a
common formal model. However, I do not think that it is possible with
the current state of research/development.

Regarding the technology: my idea is to use XText for textual and GMF
for graphical notations respectively. EMFText, was the second candidate
after XText. However, it imposes some limitations on syntax related to
unordered grouping of attributes. Motivation for GMF is that all the
other "easy to use" frameworks make customization of the graphical
notation much more difficult. Besides, GMF is already used in BRIDE,
which makes the integration somehow easier.

Please do not hesitate to blame/comment/discuss! Also, please note, that
all the above is based on my current vision about the BRIDE/Composition
development status. Excuse me if I have missed some functionality, which
is already there!

[1] MATLAB/Simulink Documentation, Working with Sample Times:
http://www.mathworks.com/help/toolbox/simulink/ug/br09i6c.html

[2] "Modeling and Simulation in Scilab/Scicos with ScicosLab 4.4",
Chapt.8, "Scicos Formalism", Springer 2010.

[3] Erlang Reference Manual User's Guide, Function Declaration Syntax:
http://www.erlang.org/doc/reference_manual/functions.html#id74368

--
Piotr Trojanek

Ideas about formalizing and tooling for composition primitives

Another thing that you might want to consider: the "property" part of
the configuration, i.e. the assignment of property values in tasks.

This is currently handled in Rock by defining so-called "named
configurations" which are partial assignments of values to a set of task
properties. Configurations can then be defined at the composition level
by "forwarding" these sections.

For instance:

composition "Eslam" do
add Eslam::Task, :role => 'main'
config "localization",
main => ['default', 'localization']
end

Were selecting the 'localization' configuration on the composition will
apply the default and localization (overlaid) property assignments on
the task.

Sylvain

Ideas about formalizing and tooling for composition primitives

On 04/12/2012 05:32 PM, Piotr Trojanek wrote:
> For the (A) scenario I would prefer to not reinvent the wheel, but
> rather make the ROCK's composition meta-model explicit. I have noted the
> following check-list of issues, which need to be addressed by the
> meta-model: aggregation of components and connections, promotion and
> renaming of ports (and operations).
There is much more in the Rock model:

- component abstractions (a.k.a services)
- port mappings from services to concrete components (i.e. cases
where services and components have different port names)
- Rock does not support promotion of operations, and I currently
don't plan to include that. Operations are neither used nor needed at
the modelling level so far in our use cases. Note, however, that in the
Roby plan model the operations (and their promotions) could be
represented easily using events. So, if you do decide to go on with it
we could support it easily in Rock.
- specializations (ability to "mixin" composition model
transformations based on the concrete components selected to instanciate
the composition)
- refinement of compositions (ability to create composition models
that are submodels, or "subclass" of more generic ones)

I don't know how far you want to go with your model, though.
> Next step is to derive at least
> 2 tools from the meta-model: textual (preferable with ROCK-compatible
> syntax) and graphical (with the notation aligned with conventions of
> diagrams in the RTT manuals). The goal is to reuse/refine what's already
> in ROCK and extend its capabilities with graphical tooling.
I'm obviously all for it ;-)

FYI, Rock's underlying data structure is a plan, and therefore also
supports sequencing of start / stop -- and in principle much more.
Unfortunately, the current model chain is (1) model compositions and (2)
transform that model into a plan. In the long run, I want to represent
everything inside an (extended) plan model so that one could use every
Roby plan primitive to describe compositions, and therefore, in
principle, represent sequencing of the updates as well.

Sylvain

Ideas about formalizing and tooling for composition primitives

On Fri, Apr 13, 2012 at 10:43:01AM +0200, Sylvain Joyeux wrote:
> On 04/12/2012 05:32 PM, Piotr Trojanek wrote:
> >For the (A) scenario I would prefer to not reinvent the wheel, but
> >rather make the ROCK's composition meta-model explicit. I have noted the
> >following check-list of issues, which need to be addressed by the
> >meta-model: aggregation of components and connections, promotion and
> >renaming of ports (and operations).
> There is much more in the Rock model:
>
> - component abstractions (a.k.a services)
> - port mappings from services to concrete components (i.e. cases
> where services and components have different port names)
> - Rock does not support promotion of operations, and I currently
> don't plan to include that. Operations are neither used nor needed
> at the modelling level so far in our use cases. Note, however, that
> in the Roby plan model the operations (and their promotions) could
> be represented easily using events. So, if you do decide to go on
> with it we could support it easily in Rock.
> - specializations (ability to "mixin" composition model
> transformations based on the concrete components selected to
> instanciate the composition)
> - refinement of compositions (ability to create composition models
> that are submodels, or "subclass" of more generic ones)

Indeed, there is a lot! And that's why it is important to formalize it
explicitly and also provide some fancy tools for all those features :-)

Conceptually all of the above inheritance-related assembly-primitives resembles
what is already there in object-oriented languages. Thus, there is no really
much to (re-)invent and it is also easy to find some use-case for all those
features. Of course, there are some subtle issues (e.g. name clashes), but it
is just a design decision how to deal with them.

> FYI, Rock's underlying data structure is a plan, and therefore also supports
> sequencing of start / stop -- and in principle much more. Unfortunately, the
> current model chain is (1) model compositions and (2) transform that model
> into a plan. In the long run, I want to represent everything inside an
> (extended) plan model so that one could use every Roby plan primitive to
> describe compositions, and therefore, in principle, represent sequencing of
> the updates as well.

I think, that there is something more fundamental with this issue. What
ROCK/Roby is doing (and what we are talking about in the context of
"Simulink-like" composition) is to couple the "operational" and "architectural"
aspects within a single module in order to reuse it. Constructing and using of
such a compounds makes all of this (at least for me) closer and closer to a
full-featured DSL (at least conceptually).

Ideas about formalizing and tooling for composition primitives

On Sat, 14 Apr 2012, Piotr Trojanek wrote:

> On Fri, Apr 13, 2012 at 10:43:01AM +0200, Sylvain Joyeux wrote:
>> On 04/12/2012 05:32 PM, Piotr Trojanek wrote:
>>> For the (A) scenario I would prefer to not reinvent the wheel, but
>>> rather make the ROCK's composition meta-model explicit. I have noted the
>>> following check-list of issues, which need to be addressed by the
>>> meta-model: aggregation of components and connections, promotion and
>>> renaming of ports (and operations).
>> There is much more in the Rock model:
>>
>> - component abstractions (a.k.a services)
>> - port mappings from services to concrete components (i.e. cases
>> where services and components have different port names)
>> - Rock does not support promotion of operations, and I currently
>> don't plan to include that. Operations are neither used nor needed
>> at the modelling level so far in our use cases. Note, however, that
>> in the Roby plan model the operations (and their promotions) could
>> be represented easily using events. So, if you do decide to go on
>> with it we could support it easily in Rock.
>> - specializations (ability to "mixin" composition model
>> transformations based on the concrete components selected to
>> instanciate the composition)
>> - refinement of compositions (ability to create composition models
>> that are submodels, or "subclass" of more generic ones)
>
> Indeed, there is a lot! And that's why it is important to formalize it
> explicitly and also provide some fancy tools for all those features :-)
>
> Conceptually all of the above inheritance-related assembly-primitives resembles
> what is already there in object-oriented languages. Thus, there is no really
> much to (re-)invent and it is also easy to find some use-case for all those
> features. Of course, there are some subtle issues (e.g. name clashes), but it
> is just a design decision how to deal with them.

I do not agree that what we need for _component-based_ systems is already
there in _object oriented_ tooling! There is a fundamental difference
between both, with respect to composition: OO relies on the "is-a"
relationship, while CB uses "conforms to" and "is represented by". The
following paper explains this essential difference (which should also be
reflected in the tooling):
<http://atlanmod.emn.fr/www/papers/OnTheUnificationPowerOfModels.pdf>

>> FYI, Rock's underlying data structure is a plan, and therefore also supports
>> sequencing of start / stop -- and in principle much more. Unfortunately, the
>> current model chain is (1) model compositions and (2) transform that model
>> into a plan. In the long run, I want to represent everything inside an
>> (extended) plan model so that one could use every Roby plan primitive to
>> describe compositions, and therefore, in principle, represent sequencing of
>> the updates as well.
>
> I think, that there is something more fundamental with this issue. What
> ROCK/Roby is doing (and what we are talking about in the context of
> "Simulink-like" composition) is to couple the "operational" and "architectural"
> aspects within a single module in order to reuse it.

Such coupling is a very fine feature for efficiency reasons, but it should
not be _hard-coded_ into tools and models.

> Constructing and using of
> such a compounds makes all of this (at least for me) closer and closer to a
> full-featured DSL (at least conceptually).
>

Ideas about formalizing and tooling for composition primitives

> I do not agree that what we need for _component-based_ systems is already
> there in _object oriented_ tooling! There is a fundamental difference
> between both, with respect to composition: OO relies on the "is-a"
> relationship, while CB uses "conforms to" and "is represented by". The
> following paper explains this essential difference (which should also be
> reflected in the tooling):
> <http://atlanmod.emn.fr/www/papers/OnTheUnificationPowerOfModels.pdf>

This is not true anymore with dynamically typed languages (which rely very much
on the conforms to relationship) and constructs like Java interfaces.

> > I think, that there is something more fundamental with this issue. What
> > ROCK/Roby is doing (and what we are talking about in the context of
> > "Simulink-like" composition) is to couple the "operational" and
> > "architectural"
> > aspects within a single module in order to reuse it.
>
> Such coupling is a very fine feature for efficiency reasons, but it should
> not be _hard-coded_ into tools and models.

I don't understand that statement.

Sylvain

Ideas about formalizing and tooling for composition primitives

On Sun, Apr 15, 2012 at 03:30:24PM +0200, Sylvain Joyeux wrote:
> > I do not agree that what we need for _component-based_ systems is already
> > there in _object oriented_ tooling! There is a fundamental difference
> > between both, with respect to composition: OO relies on the "is-a"
> > relationship, while CB uses "conforms to" and "is represented by". The
> > following paper explains this essential difference (which should also be
> > reflected in the tooling):
> > <http://atlanmod.emn.fr/www/papers/OnTheUnificationPowerOfModels.pdf>

Hmm... I do not really get the idea of "the map conforms to its legend" (quote
from the paper above). Not to mention confusion with the <<semantics>>, as "It
is a <<legend>> indicating how to interpret the map itself."

So I do not really understand your point... Let's take a look at the
'specialization' and 'mixin'. They are "patterns" (?) of composition, which
originate in OO-design, but it is also easy to find use-cases for them in
CB-design.

Szyperski refers to the difference between CB and OO as "object versus class
composition." Maybe this is somehow closer to what we are talking about?

> This is not true anymore with dynamically typed languages (which rely very
> much on the conforms to relationship) and constructs like Java interfaces.

Once again, Szyperski refers to this construct as "interface inheritance"
("subtyping") and it is already there in OO languages (with better support like
in Java or just mimicking the support like in C++).

Ideas about formalizing and tooling for composition primitives

On Sun, 15 Apr 2012, Piotr Trojanek wrote:

> On Sun, Apr 15, 2012 at 03:30:24PM +0200, Sylvain Joyeux wrote:
>>> I do not agree that what we need for _component-based_ systems is already
>>> there in _object oriented_ tooling! There is a fundamental difference
>>> between both, with respect to composition: OO relies on the "is-a"
>>> relationship, while CB uses "conforms to" and "is represented by". The
>>> following paper explains this essential difference (which should also be
>>> reflected in the tooling):
>>> <http://atlanmod.emn.fr/www/papers/OnTheUnificationPowerOfModels.pdf>
>
> Hmm... I do not really get the idea of "the map conforms to its legend" (quote
> from the paper above). Not to mention confusion with the <<semantics>>, as "It
> is a <<legend>> indicating how to interpret the map itself."
>
> So I do not really understand your point...

Getting the difference is indeed difficult, but essential.

A map is _not_ an "instance of" a legend, but all the "compositions" that
you see on a map (specific roads, crossings, buildings,...) "conform to"
the primitives that are in the legend, and to the (most often implicitly
defined) composition rules for these primitives.

> Let's take a look at the
> 'specialization' and 'mixin'. They are "patterns" (?) of composition, which
> originate in OO-design, but it is also easy to find use-cases for them in
> CB-design.

> Szyperski refers to the difference between CB and OO as "object versus class
> composition." Maybe this is somehow closer to what we are talking about?

The MDE M3-M0 paradigm makes these "object vs class composition" a lot more
concrete, and introduces "conforms to", in addition to "instance of".

>> This is not true anymore with dynamically typed languages (which rely very
>> much on the conforms to relationship) and constructs like Java interfaces.
>
> Once again, Szyperski refers to this construct as "interface inheritance"
> in Java or just mimicking the support like in C++).

Interface inheritance does not reflect the relationship between a map and
its legend. Or between the definition of a programming language and a
particular program in that language. Or between C++ and the concept of an
object-oriented programming language.

> Piotr Trojanek

Herman

Ideas about formalizing and tooling for composition primitives

On Mon, Apr 16, 2012 at 05:11:11AM +0200, Herman Bruyninckx wrote:
> [...]
>
> Getting the difference is indeed difficult, but essential.
>
> A map is _not_ an "instance of" a legend, but all the "compositions" that
> you see on a map (specific roads, crossings, buildings,...) "conform to"
> the primitives that are in the legend, and to the (most often implicitly
> defined) composition rules for these primitives.
>
> >Let's take a look at the
> >'specialization' and 'mixin'. They are "patterns" (?) of composition, which
> >originate in OO-design, but it is also easy to find use-cases for them in
> >CB-design.
>
> >Szyperski refers to the difference between CB and OO as "object versus class
> >composition." Maybe this is somehow closer to what we are talking about?
>
> The MDE M3-M0 paradigm makes these "object vs class composition" a lot more
> concrete, and introduces "conforms to", in addition to "instance of".

Agreed. MDE is definitely better for this. But in my opinion you can still
mimic some "conforms to" with OO-techniques (and template meta-programming in
particular).

To be more specific - I mentioned about similarities between the OO-design and
some of the ROCK-features (as explained by Sylvian): templates is is how I
think about the 'specializations'. Inheritance is how I think about the
'refinement of compositions', while 'port mappings' (or delegation) for me is
not really different from promoting visibility to "public" (at least for the
incoming data).

For all the more difficult compositions it is rather difficult to find
corresponding OO-constructs and one needs to recourse to a true "conforms to"
as in MDE.

Ideas about formalizing and tooling for composition primitives

On Mon, 16 Apr 2012, Piotr Trojanek wrote:

> On Mon, Apr 16, 2012 at 05:11:11AM +0200, Herman Bruyninckx wrote:
>> [...]
>>
>> Getting the difference is indeed difficult, but essential.
>>
>> A map is _not_ an "instance of" a legend, but all the "compositions" that
>> you see on a map (specific roads, crossings, buildings,...) "conform to"
>> the primitives that are in the legend, and to the (most often implicitly
>> defined) composition rules for these primitives.
>>
>>> Let's take a look at the
>>> 'specialization' and 'mixin'. They are "patterns" (?) of composition, which
>>> originate in OO-design, but it is also easy to find use-cases for them in
>>> CB-design.
>>
>>> Szyperski refers to the difference between CB and OO as "object versus class
>>> composition." Maybe this is somehow closer to what we are talking about?
>>
>> The MDE M3-M0 paradigm makes these "object vs class composition" a lot more
>> concrete, and introduces "conforms to", in addition to "instance of".
>
> Agreed. MDE is definitely better for this. But in my opinion you can still
> mimic some "conforms to" with OO-techniques (and template meta-programming in
> particular).

Mmm... you are now equating the definition of "OO" to UML2? Because UML2 is
the result of putting every possible useful concept in one big standard, so
that, indeed, about everything _could_ be done with it, but I am less and
less convinced that one _should_. I am more in favour of many small DSLs,
with very limited but 100% consistent semantics.

And, BTW, templates are a primitive that assumes a "conforms to" set of
relationships to be defined, unless you limit yourself to a template in
which you can only fill in values for all keywords. And not, for example,
select a subset, or combine multiple templates, etc.; because these
"composition operations" require conformance to the composition rules.

> To be more specific - I mentioned about similarities between the OO-design and
> some of the ROCK-features (as explained by Sylvian): templates is is how I
> think about the 'specializations'. Inheritance is how I think about the
> 'refinement of compositions', while 'port mappings' (or delegation) for me is
> not really different from promoting visibility to "public" (at least for the
> incoming data).
>
> For all the more difficult compositions it is rather difficult to find
> corresponding OO-constructs and one needs to recourse to a true "conforms to"
> as in MDE.

Indeed. So, why do you want to start from OO by all means?

Ideas about formalizing and tooling for composition primitives

On Mon, Apr 16, 2012 at 07:38:55PM +0200, Herman Bruyninckx wrote:
> >>The MDE M3-M0 paradigm makes these "object vs class composition" a lot more
> >>concrete, and introduces "conforms to", in addition to "instance of".
> >
> >Agreed. MDE is definitely better for this. But in my opinion you can still
> >mimic some "conforms to" with OO-techniques (and template meta-programming in
> >particular).
>
> Mmm... you are now equating the definition of "OO" to UML2? Because UML2 is
> the result of putting every possible useful concept in one big standard, so
> that, indeed, about everything _could_ be done with it, but I am less and
> less convinced that one _should_. I am more in favour of many small DSLs,
> with very limited but 100% consistent semantics.

My intention was only to show some analogies (as named by Sylvian) between some
of the ROCK's composition primitives and OO-design/programming. I do not say,
that one should use OO/UML for composition. These 'analogies' should be
captured in the meta-model together with all the other composition primitives,
which do not have a corresponding 'concepts' in OO world.

Rather, the OO-concepts can be useful to communicate semantics of some of the
composition primitives. And this already done by ROCK: 'inheritance' or
'specialization' is difficult to explain to users, which are not familiar with
OO-meaning of these concepts. I guess, that most of the audience already know
these terms together with a corresponding use-cases in OO-design - probably it
is why Sylvian has picked these terms for ROCK and not any other.

It is no much easier to communicate details of the "data-flow
scheduling"-related primitives to someone, who is not familiar with
Simulink/Scicos (or at least data-flow diagrams).

> And, BTW, templates are a primitive that assumes a "conforms to" set of
> relationships to be defined, unless you limit yourself to a template in which
> you can only fill in values for all keywords. And not, for example, select a
> subset, or combine multiple templates, etc.; because these "composition
> operations" require conformance to the composition rules.
>
> >To be more specific - I mentioned about similarities between the OO-design and
> >some of the ROCK-features (as explained by Sylvian): templates is is how I
> >think about the 'specializations'. Inheritance is how I think about the
> >'refinement of compositions', while 'port mappings' (or delegation) for me is
> >not really different from promoting visibility to "public" (at least for the
> >incoming data).
> >
> >For all the more difficult compositions it is rather difficult to find
> >corresponding OO-constructs and one needs to recourse to a true "conforms to"
> >as in MDE.
>
> Indeed. So, why do you want to start from OO by all means?

I do not! :)

You have mention about "metametamodel of the semantic meaning", which was not
really clear to me. If I understand you correctly, this is where we need to map
all the concepts related to components&composition (i.e. provide translational
semantics for all of them). So my point was, that if there are OO-concepts
(e.g. inheritance) in this target domain, it is easy to capture meaning of some
of the ROCK's composition primitives.

--
Piotr Trojanek

Ideas about formalizing and tooling for composition primitives

> On Mon, 16 Apr 2012, Piotr Trojanek wrote:
>
>> On Mon, Apr 16, 2012 at 05:11:11AM +0200, Herman Bruyninckx wrote:
>>> [...]
>>>
>>> Getting the difference is indeed difficult, but essential.
>>>
>>> A map is _not_ an "instance of" a legend, but all the "compositions" that
>>> you see on a map (specific roads, crossings, buildings,...) "conform to"
>>> the primitives that are in the legend, and to the (most often implicitly
>>> defined) composition rules for these primitives.
>>>
>>>> Let's take a look at the
>>>> 'specialization' and 'mixin'. They are "patterns" (?) of
>>>> composition, which
>>>> originate in OO-design, but it is also easy to find use-cases for them in
>>>> CB-design.
>>>
>>>> Szyperski refers to the difference between CB and OO as "object
>>>> versus class
>>>> composition." Maybe this is somehow closer to what we are talking about?
>>>
>>> The MDE M3-M0 paradigm makes these "object vs class composition" a lot more
>>> concrete, and introduces "conforms to", in addition to "instance of".
>>
>> Agreed. MDE is definitely better for this. But in my opinion you can still
>> mimic some "conforms to" with OO-techniques (and template
>> meta-programming in
>> particular).
>
> Mmm... you are now equating the definition of "OO" to UML2? Because UML2 is
> the result of putting every possible useful concept in one big standard, so
> that, indeed, about everything _could_ be done with it, but I am less and
> less convinced that one _should_. I am more in favour of many small DSLs,
> with very limited but 100% consistent semantics.

I agree with that. However, we really should clarify what does the
term semantics in our context mean. I do not think that we are talking
about semantics in the way CS-educated people think (aka operational
semantics etc.).

Or do we?

Nico

>
> And, BTW, templates are a primitive that assumes a "conforms to" set of
> relationships to be defined, unless you limit yourself to a template in
> which you can only fill in values for all keywords. And not, for example,
> select a subset, or combine multiple templates, etc.; because these
> "composition operations" require conformance to the composition rules.
>
>> To be more specific - I mentioned about similarities between the
>> OO-design and
>> some of the ROCK-features (as explained by Sylvian): templates is is how I
>> think about the 'specializations'. Inheritance is how I think about the
>> 'refinement of compositions', while 'port mappings' (or delegation)
>> for me is
>> not really different from promoting visibility to "public" (at least for the
>> incoming data).
>>
>> For all the more difficult compositions it is rather difficult to find
>> corresponding OO-constructs and one needs to recourse to a true
>> "conforms to"
>> as in MDE.
>
> Indeed. So, why do you want to start from OO by all means?
>
>> --
>> Piotr Trojanek
>
> Herman
> --
> Orocos-Dev mailing list
> Orocos-Dev [..] ...
> http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
>

Ideas about formalizing and tooling for composition primitives

> To be more specific - I mentioned about similarities between the OO-design and
> some of the ROCK-features (as explained by Sylvian): templates is is how I
> think about the 'specializations'. Inheritance is how I think about the
> 'refinement of compositions', while 'port mappings' (or delegation) for me is
> not really different from promoting visibility to "public" (at least for the
> incoming data).

I agree with this analysis. To avoid a flaming Hermann: these are analogies.
They different things are not the same, but serve equivalent purposes in the OO
programming and CB design worlds.

However, I don't understand how specializations can go with templates.
Specializations are basically conditional mixins (i.e. "apply this mixin if
conditions X and Y are met")

Sylvain

Ideas about formalizing and tooling for composition primitives

On Mon, 16 Apr 2012, Sylvain Joyeux wrote:

>
>  
>
> > To be more specific - I mentioned about similarities between the OO-design and
> > some of the ROCK-features (as explained by Sylvian): templates is is how I
> > think about the 'specializations'. Inheritance is how I think about the
> > 'refinement of compositions', while 'port mappings' (or delegation) for me is
> > not really different from promoting visibility to "public" (at least for the
> > incoming data).
>
> I agree with this analysis. To avoid a flaming Hermann: these are analogies. They different
> things are not the same, but serve equivalent purposes in the OO programming and CB design
> worlds.

"flaming" -> "trying to bring structure" :-)

> However, I don't understand how specializations can go with templates. Specializations are
> basically conditional mixins (i.e. "apply this mixin if conditions X and Y are met")
>
The latter name ("conditional mixin") to me seems more discriminative
(hence better) than the former ("specialisation"). And the
conditionalization fits nice with the "meta modeling" aspect, that is, the
information/knowledge representing the constraints under which "models" can
be valid.

Now, "mixin" still has to be formalised :-)

> Sylvain 

Herman

Ideas about formalizing and tooling for composition primitives

Herman Bruyninckx <Herman [dot] Bruyninckx [..] ...> hat am 16. April 2012 um
19:31 geschrieben:

> On Mon, 16 Apr 2012, Sylvain Joyeux wrote:
>
> >
> >
> >
> > > To be more specific - I mentioned about similarities between the OO-design
> > > and
> > > some of the ROCK-features (as explained by Sylvian): templates is is how I
> > > think about the 'specializations'. Inheritance is how I think about the
> > > 'refinement of compositions', while 'port mappings' (or delegation) for me
> > > is
> > > not really different from promoting visibility to "public" (at least for
> > > the
> > > incoming data).
> >
> > I agree with this analysis. To avoid a flaming Hermann: these are analogies.
> > They different
> > things are not the same, but serve equivalent purposes in the OO programming
> > and CB design
> > worlds.
>
> "flaming" -> "trying to bring structure" :-)

Of course ;-)

>
> > However, I don't understand how specializations can go with templates.
> > Specializations are
> > basically conditional mixins (i.e. "apply this mixin if conditions X and Y
> > are met")
> >
> The latter name ("conditional mixin") to me seems more discriminative
> (hence better) than the former ("specialisation"). And the
> conditionalization fits nice with the "meta modeling" aspect, that is, the
> information/knowledge representing the constraints under which "models" can
> be valid.
>
> Now, "mixin" still has to be formalised :-)

The issue here is the semantic from a user point of view and the semantic from a
Herman point of view.

Calling this a "conditional mixin" is not describing what it does, but how it is
done, which I dislike tremendously. "specialization" says what it does: it
transforms the model in a way tailored to a less generic group of instances (as
e.g. "ControlLoop when actuators are driven by Hbridge::Task should look this
way".

Sylvain

Ideas about formalizing and tooling for composition primitives

On Mon, Apr 16, 2012 at 07:46:56PM +0200, Sylvain Joyeux wrote:
> > > However, I don't understand how specializations can go with templates.
> > > Specializations are basically conditional mixins (i.e. "apply this mixin
> > > if conditions X and Y are met")
> > >
> > The latter name ("conditional mixin") to me seems more discriminative
> > (hence better) than the former ("specialisation"). And the
> > conditionalization fits nice with the "meta modeling" aspect, that is, the
> > information/knowledge representing the constraints under which "models" can
> > be valid.
> >
> > Now, "mixin" still has to be formalised :-)
>
> The issue here is the semantic from a user point of view and the semantic from a
> Herman point of view.
>
> Calling this a "conditional mixin" is not describing what it does, but how it is
> done, which I dislike tremendously. "specialization" says what it does: it
> transforms the model in a way tailored to a less generic group of instances (as
> e.g. "ControlLoop when actuators are driven by Hbridge::Task should look this
> way".

Sorry, my fault. I did not get your explanation of the 'specialization' concept
correctly...

I was trying to find more details about this concept in the CORE section of the
ROCK website, but without success. Now I have found some hints in the TUTORIALS
section.

Ideas about formalizing and tooling for composition primitives

On 04/17/2012 01:15 AM, Piotr Trojanek wrote:
> On Mon, Apr 16, 2012 at 07:46:56PM +0200, Sylvain Joyeux wrote:
>>>> However, I don't understand how specializations can go with templates.
>>>> Specializations are basically conditional mixins (i.e. "apply this mixin
>>>> if conditions X and Y are met")
>>>>
>>> The latter name ("conditional mixin") to me seems more discriminative
>>> (hence better) than the former ("specialisation"). And the
>>> conditionalization fits nice with the "meta modeling" aspect, that is, the
>>> information/knowledge representing the constraints under which "models" can
>>> be valid.
>>>
>>> Now, "mixin" still has to be formalised :-)
>> The issue here is the semantic from a user point of view and the semantic from a
>> Herman point of view.
>>
>> Calling this a "conditional mixin" is not describing what it does, but how it is
>> done, which I dislike tremendously. "specialization" says what it does: it
>> transforms the model in a way tailored to a less generic group of instances (as
>> e.g. "ControlLoop when actuators are driven by Hbridge::Task should look this
>> way".
> Sorry, my fault. I did not get your explanation of the 'specialization' concept
> correctly...
>
> I was trying to find more details about this concept in the CORE section of the
> ROCK website, but without success. Now I have found some hints in the TUTORIALS
> section.
Well. Don't be sorry. There is a serious lack of documentation there.

I tried to publish this a few times, but got rejected because half of
the reviewers wanted me to explain basic OO concepts (and the other half
liked the paper a lot).

I can send that paper to you in private, though.

I'm currently seriously updating the Roby documentation. Next step is
the rock-roby stuff.

Sylvain

Ideas about formalizing and tooling for composition primitives

On 04/17/2012 10:22 AM, Sylvain Joyeux wrote:
> On 04/17/2012 01:15 AM, Piotr Trojanek wrote:
>> On Mon, Apr 16, 2012 at 07:46:56PM +0200, Sylvain Joyeux wrote:
>>>>> However, I don't understand how specializations can go with templates.
>>>>> Specializations are basically conditional mixins (i.e. "apply this mixin
>>>>> if conditions X and Y are met")
>>>>>
>>>> The latter name ("conditional mixin") to me seems more discriminative
>>>> (hence better) than the former ("specialisation"). And the
>>>> conditionalization fits nice with the "meta modeling" aspect, that is, the
>>>> information/knowledge representing the constraints under which "models" can
>>>> be valid.
>>>>
>>>> Now, "mixin" still has to be formalised :-)
>>> The issue here is the semantic from a user point of view and the semantic from a
>>> Herman point of view.
>>>
>>> Calling this a "conditional mixin" is not describing what it does, but how it is
>>> done, which I dislike tremendously. "specialization" says what it does: it
>>> transforms the model in a way tailored to a less generic group of instances (as
>>> e.g. "ControlLoop when actuators are driven by Hbridge::Task should look this
>>> way".
>> Sorry, my fault. I did not get your explanation of the 'specialization' concept
>> correctly...
>>
>> I was trying to find more details about this concept in the CORE section of the
>> ROCK website, but without success. Now I have found some hints in the TUTORIALS
>> section.
> Well. Don't be sorry. There is a serious lack of documentation there.
>
> I tried to publish this a few times, but got rejected because half of
> the reviewers wanted me to explain basic OO concepts (and the other half
> liked the paper a lot).
>
> I can send that paper to you in private, though.
Actually, here is a public paper that would give a bit more of an overview

http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5664350&tag=1

Sylvain

Ideas about formalizing and tooling for composition primitives

On Tue, Apr 17, 2012 at 10:47:03AM +0200, Sylvain Joyeux wrote:
> >> I was trying to find more details about this concept in the CORE section
> >> of the ROCK website, but without success. Now I have found some hints in
> >> the TUTORIALS section.
> > Well. Don't be sorry. There is a serious lack of documentation there.
> >
> > I tried to publish this a few times, but got rejected because half of
> > the reviewers wanted me to explain basic OO concepts (and the other half
> > liked the paper a lot).
> >
> > I can send that paper to you in private, though.
> Actually, here is a public paper that would give a bit more of an overview
>
> http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5664350&tag=1

Thanks, indeed it shed some light on the 'specialization' concept. My
understanding was clearing wrong.

Ideas about formalizing and tooling for composition primitives

On Sun, 15 Apr 2012, Sylvain Joyeux wrote:

>
> > I do not agree that what we need for _component-based_ systems is already
> > there in _object oriented_ tooling! There is a fundamental difference
> > between both, with respect to composition: OO relies on the "is-a"
> > relationship, while CB uses "conforms to" and "is represented by". The
> > following paper explains this essential difference (which should also be
> > reflected in the tooling):
> > <http://atlanmod.emn.fr/www/papers/OnTheUnificationPowerOfModels.pdf>
>
> This is not true anymore with dynamically typed languages (which rely very much on the conforms
> to relationship) and constructs like Java interfaces.

> > > I think, that there is something more fundamental with this issue. What
> > > ROCK/Roby is doing (and what we are talking about in the context of
> > > "Simulink-like" composition) is to couple the "operational" and "architectural"
> > > aspects within a single module in order to reuse it.
> >
> > Such coupling is a very fine feature for efficiency reasons, but it should
> > not be _hard-coded_ into tools and models.
>
> I don't understand that statement.

There is _in general_ no unique link between "structure" ("architecture") with
"execution semantics" ("operation"). Many domains do (most often
implicitly) use such a link, but that is then a specific semantic of that
specific domain; e.g., the Simulink example.

> Sylvain 

Herman

[bride-users] Ideas about formalizing and tooling for compositio

On Fri, 13 Apr 2012, Sylvain Joyeux wrote:

> On 04/12/2012 05:32 PM, Piotr Trojanek wrote:
>> For the (A) scenario I would prefer to not reinvent the wheel, but
>> rather make the ROCK's composition meta-model explicit. I have noted the
>> following check-list of issues, which need to be addressed by the
>> meta-model: aggregation of components and connections, promotion and
>> renaming of ports (and operations).
> There is much more in the Rock model:
>
> - component abstractions (a.k.a services)

I am somewhat puzzled by this terminology, so I would welcome more details :-)
I guess that the "service" is what the "end users" see, and the "component"
is what provides the services?

> - port mappings from services to concrete components (i.e. cases
> where services and components have different port names)

This is (a necessary) part of the "port promotion" semantics, in my view on
things.

> - Rock does not support promotion of operations, and I currently
> don't plan to include that. Operations are neither used nor needed at
> the modelling level so far in our use cases.

I am not at all against this "simplification". On the contrary.

> Note, however, that in the
> Roby plan model the operations (and their promotions) could be
> represented easily using events. So, if you do decide to go on with it
> we could support it easily in Rock.

> - specializations (ability to "mixin" composition model
> transformations based on the concrete components selected to instanciate
> the composition)
> - refinement of compositions (ability to create composition models
> that are submodels, or "subclass" of more generic ones)

OK!

> I don't know how far you want to go with your model, though.
>> Next step is to derive at least
>> 2 tools from the meta-model: textual (preferable with ROCK-compatible
>> syntax) and graphical (with the notation aligned with conventions of
>> diagrams in the RTT manuals). The goal is to reuse/refine what's already
>> in ROCK and extend its capabilities with graphical tooling.
> I'm obviously all for it ;-)
>
> FYI, Rock's underlying data structure is a plan, and therefore also
> supports sequencing of start / stop -- and in principle much more.
> Unfortunately, the current model chain is (1) model compositions and (2)
> transform that model into a plan. In the long run, I want to represent
> everything inside an (extended) plan model so that one could use every
> Roby plan primitive to describe compositions, and therefore, in
> principle, represent sequencing of the updates as well.

You lost me a bit here... But since you are talking about "the long run",
that is probably not a problem :-)

> Sylvain

Herman

[bride-users] Ideas about formalizing and tooling for compositio

On Sat, Apr 14, 2012 at 03:59:42PM +0200, Herman Bruyninckx wrote:
> >There is much more in the Rock model:
> >
> > - component abstractions (a.k.a services)
>
> I am somewhat puzzled by this terminology, so I would welcome more details :-)
> I guess that the "service" is what the "end users" see, and the "component"
> is what provides the services?

The concept of "service" seems to be already in RTT (it is not ROCK-specific).
However it is not reflected in the meta-model of BRIDE (why?).

--
Piotr Trojanek

[bride-users] Ideas about formalizing and tooling for compositio

Piotr Trojanek <piotr [dot] trojanek [..] ...> hat am 14. April 2012 um 21:45
geschrieben:

> On Sat, Apr 14, 2012 at 03:59:42PM +0200, Herman Bruyninckx wrote:
> > >There is much more in the Rock model:
> > >
> > > - component abstractions (a.k.a services)
> >
> > I am somewhat puzzled by this terminology, so I would welcome more details
> > :-)
> > I guess that the "service" is what the "end users" see, and the "component"
> > is what provides the services?
>
> The concept of "service" seems to be already in RTT (it is not ROCK-specific).
> However it is not reflected in the meta-model of BRIDE (why?).*

Nope. And it is unfortunate that I called them "services" while they are
actually called "data services" in Rock/Roby.

They are abstract descriptions of components (which are what services are in a
dataflow-oriented architectures). I.e. component interface + semantic. In a way,
they are part of a type system (as Herman pointed out).

Sylvain

[bride-users] Ideas about formalizing and tooling for compositio

On Sat, 14 Apr 2012, Piotr Trojanek wrote:

> On Sat, Apr 14, 2012 at 03:59:42PM +0200, Herman Bruyninckx wrote:
>>> There is much more in the Rock model:
>>>
>>> - component abstractions (a.k.a services)
>>
>> I am somewhat puzzled by this terminology, so I would welcome more details :-)
>> I guess that the "service" is what the "end users" see, and the "component"
>> is what provides the services?
>
> The concept of "service" seems to be already in RTT (it is not ROCK-specific).
> However it is not reflected in the meta-model of BRIDE (why?).

I think the major reason is the semantic ambiguity about what exactly a
"service" is...

> Piotr Trojanek

Herman

[bride-users] Ideas about formalizing and tooling for compositio

On 04/14/2012 03:59 PM, Herman Bruyninckx wrote:
> On Fri, 13 Apr 2012, Sylvain Joyeux wrote:
>
>> On 04/12/2012 05:32 PM, Piotr Trojanek wrote:
>>> For the (A) scenario I would prefer to not reinvent the wheel, but
>>> rather make the ROCK's composition meta-model explicit. I have noted the
>>> following check-list of issues, which need to be addressed by the
>>> meta-model: aggregation of components and connections, promotion and
>>> renaming of ports (and operations).
>> There is much more in the Rock model:
>>
>> - component abstractions (a.k.a services)
>
> I am somewhat puzzled by this terminology, so I would welcome more
> details :-)
> I guess that the "service" is what the "end users" see, and the "component"
> is what provides the services?
The "data services" are abstract component models, i.e. an
ImageProvider, or a DenseImageProvider. I don't know what you mean by
"end users", though, as the end users of these modelling tools usually
understands the actual components better than these abstractions.

>> - port mappings from services to concrete components (i.e. cases
>> where services and components have different port names)
>
> This is (a necessary) part of the "port promotion" semantics, in my view on
> things.
I am, for my side, puzzled by the "Port promotion" terminology. It was
used, so far, in the context of creating ports on compositions by
"exporting" ports (that's the Rock terminology) from components from
within that composition. What I was talking about here does not fit this
definition.

>> I don't know how far you want to go with your model, though.
>>> Next step is to derive at least
>>> 2 tools from the meta-model: textual (preferable with ROCK-compatible
>>> syntax) and graphical (with the notation aligned with conventions of
>>> diagrams in the RTT manuals). The goal is to reuse/refine what's already
>>> in ROCK and extend its capabilities with graphical tooling.
>> I'm obviously all for it ;-)
>>
>> FYI, Rock's underlying data structure is a plan, and therefore also
>> supports sequencing of start / stop -- and in principle much more.
>> Unfortunately, the current model chain is (1) model compositions and (2)
>> transform that model into a plan. In the long run, I want to represent
>> everything inside an (extended) plan model so that one could use every
>> Roby plan primitive to describe compositions, and therefore, in
>> principle, represent sequencing of the updates as well.
>
> You lost me a bit here... But since you are talking about "the long run",
> that is probably not a problem :-)
Well. The underlying plan structure includes synchronization primitives
that are built around event systems, such as: temporal constraints,
event generalization, rendez vous and so on. The current issue *at the
implementation level* is that there is (1) a composition model that is
in step (2) translated into the plan model. Which makes these
synchronization primitives unavailable when modelling the compositions.

In the long run, I plan to directly express the composition model as an
extension of the plan model, allowing to mix both freely. It is actually
a pretty straightforward extension of the current system.

[bride-users] Ideas about formalizing and tooling for compositio

On Sat, 14 Apr 2012, Sylvain Joyeux wrote:

> On 04/14/2012 03:59 PM, Herman Bruyninckx wrote:
>> On Fri, 13 Apr 2012, Sylvain Joyeux wrote:
>>
>>> On 04/12/2012 05:32 PM, Piotr Trojanek wrote:
>>>> For the (A) scenario I would prefer to not reinvent the wheel, but
>>>> rather make the ROCK's composition meta-model explicit. I have noted the
>>>> following check-list of issues, which need to be addressed by the
>>>> meta-model: aggregation of components and connections, promotion and
>>>> renaming of ports (and operations).
>>> There is much more in the Rock model:
>>>
>>> - component abstractions (a.k.a services)
>>
>> I am somewhat puzzled by this terminology, so I would welcome more
>> details :-)
>> I guess that the "service" is what the "end users" see, and the "component"
>> is what provides the services?
> The "data services" are abstract component models,

A "model" that is "abstract"... I thought that was always the case.

> i.e. an ImageProvider, or a DenseImageProvider.

Maybe your "abstract" model is the model of a "type", and not about an
"instance" of that type?

> I don't know what you mean by "end users", though, as
> the end users of these modelling tools usually understands the actual
> components better than these abstractions.

My "end user" was whoever/whatever uses the services; it was an unfortunate
choice indeed, since I did not want to refer to people.

>>> - port mappings from services to concrete components (i.e. cases
>>> where services and components have different port names)
>>
>> This is (a necessary) part of the "port promotion" semantics, in my view on
>> things.

> I am, for my side, puzzled by the "Port promotion" terminology. It was used,
> so far, in the context of creating ports on compositions by "exporting" ports
> (that's the Rock terminology) from components from within that composition.

The export stuff is part of the "promotion" indeed. The other parts can be
things like: data format transfer, buffering policy, execution triggering
policy, scope/closure definition, etc. I have not clear idea yet which of
these aspects are fundamental for port "promotion"; export, renaming and
closure are, that's already sure in my mind.

> What I was talking about here does not fit this definition.

I now understand your original explanations, thanks!

>>> I don't know how far you want to go with your model, though.
>>>> Next step is to derive at least
>>>> 2 tools from the meta-model: textual (preferable with ROCK-compatible
>>>> syntax) and graphical (with the notation aligned with conventions of
>>>> diagrams in the RTT manuals). The goal is to reuse/refine what's already
>>>> in ROCK and extend its capabilities with graphical tooling.
>>> I'm obviously all for it ;-)
>>>
>>> FYI, Rock's underlying data structure is a plan, and therefore also
>>> supports sequencing of start / stop -- and in principle much more.
>>> Unfortunately, the current model chain is (1) model compositions and (2)
>>> transform that model into a plan. In the long run, I want to represent
>>> everything inside an (extended) plan model so that one could use every
>>> Roby plan primitive to describe compositions, and therefore, in
>>> principle, represent sequencing of the updates as well.
>>
>> You lost me a bit here... But since you are talking about "the long run",
>> that is probably not a problem :-)
> Well. The underlying plan structure includes synchronization primitives that
> are built around event systems, such as: temporal constraints, event
> generalization, rendez vous and so on.

Ok, I understand.

> The current issue *at the
> implementation level* is that there is (1) a composition model that is in
> step (2) translated into the plan model. Which makes these synchronization
> primitives unavailable when modelling the compositions.
>
> In the long run, I plan to directly express the composition model as an
> extension of the plan model, allowing to mix both freely.

I see a lot of potential couplings that need not be there, I guess. For
example, the structural part of composition should not be coupled with the
synchronization part. (However, there is a dependency: the latter can only
be specified when the structural part is known.)

> It is actually a
> pretty straightforward extension of the current system.

Ideas about formalizing and tooling for composition primitives

On 04/13/2012 10:43 AM, Sylvain Joyeux wrote:
> On 04/12/2012 05:32 PM, Piotr Trojanek wrote:
>> For the (A) scenario I would prefer to not reinvent the wheel, but
>> rather make the ROCK's composition meta-model explicit. I have noted the
>> following check-list of issues, which need to be addressed by the
>> meta-model: aggregation of components and connections, promotion and
>> renaming of ports (and operations).
> There is much more in the Rock model:
>
> - component abstractions (a.k.a services)
> - port mappings from services to concrete components (i.e. cases
> where services and components have different port names)
To be fair, this last point is more part of the instanciation of
compositions, not so much about the composition model itself.
> - Rock does not support promotion of operations, and I currently
> don't plan to include that. Operations are neither used nor needed at
> the modelling level so far in our use cases. Note, however, that in the
> Roby plan model the operations (and their promotions) could be
> represented easily using events. So, if you do decide to go on with it
> we could support it easily in Rock.
> - specializations (ability to "mixin" composition model
> transformations based on the concrete components selected to instanciate
> the composition)
> - refinement of compositions (ability to create composition models
> that are submodels, or "subclass" of more generic ones)
Sylvain

Ideas about formalizing and tooling for composition primitives

On Thu, 12 Apr 2012, Piotr Trojanek wrote:

> Dear RTT&BRIDE experts,
>
> in a private email conversation with Herman I have discussed some ideas
> about possible contributions to (1) formalizing the "best practices" of
> RTT/Composition and (2) the accompanied tooling. I hope, that my great
> fascination and some limited experience with the explicit modelling and
> model-driven tooling will be useful for the community (?). However,
> I would like to ask you for comments/suggestions/improvements
> before actually getting to work.
>
> The need of both composition primitives and tools has been already
> discussed on the orocos-dev mailing list. Thus, the goal of this email
> is not to ask "if", but "how" to do this.
>
> To some extent Sylvian is right - a lot of what we need may be already
> there (in ROCK). But to stress the point: we want the models to be
> *explicit* and tools, which are derived from these models.

"derived from" is not the most correct expression, I think. The tools must
support the operations (transformations, aggregations,...) that are
defined formally on the model level.

> At this moment, there are at least two already identified scenarios: (A)
> "ROCK-like" composition (i.e. as supported by the implicit ROCK
> meta-model and Ruby-based tools) and (B) "Simulink-like" composition
> (i.e. as discussed few days ago and partially implemented in FBSched).
> These are by no means exhaustive, but they seem to cover a fairly large
> number of use-cases and that's why they deserve some special attention.

Maybe a good start is to try to make both of them formally explicit?

> I can also think about (C) "plan-like" scenario, with the focus on the
> control-flow instead of data-flow composition like in (B). However, this
> is even more difficult and I guess, that for any non-trivial use-case it
> requires manual coding/scripting (so let's skip it at this moment).

Wait, not so fast: I am interested in getting to know one or more use cases
for which "class C" is the best solution.

> I would like to propose/discuss the following road-map.
>
> For the (A) scenario I would prefer to not reinvent the wheel, but
> rather make the ROCK's composition meta-model explicit.

You have my support for this suggestion. I expect that we will all learn
from this effort, in the worst case.

> I have noted the
> following check-list of issues, which need to be addressed by the
> meta-model: aggregation of components and connections, promotion and
> renaming of ports (and operations).

While being active on this job anyway, it would also be useful to make an
"ontology" of terminology: "what term means what in which context?".
For example: do we make a distinction between "composition" and
"aggregation"? (I do not, and prefer composition, because of the shared
semantic origin with "component". Hence, my preference for the terms
"composability" and "compositionality".)

I consider 'port renaming' as one of the concepts that belong to the
semantics of "composition", as one particular example of the "namespace
scoping" that a composite provides. And this, in turn, is one part of the
"closure" concept that belongs naturally at the composition level; that is,
the scope until which more internal components can 'export' names as
'global' to their own scope.

There are more semantic primitives that naturally belong to the composition
context; but what is the minimum?

> Next step is to derive at least
> 2 tools from the meta-model: textual (preferable with ROCK-compatible
> syntax)

A metametamodel of the semantic meaning of that syntax will allow
model-to-model transformations to other "DSLs".

> and graphical (with the notation aligned with conventions of
> diagrams in the RTT manuals). The goal is to reuse/refine what's already
> in ROCK and extend its capabilities with graphical tooling.

> For the (B) scenario the main problem I see is not in the composition
> primitives (i.e. data-flow connections of ports with the DAG/Polytree
> restrictions applied),

I see no reasons to limit the _topology_ of the composition to DAGs or
Polytrees; the 'serialization' can be done on graphs, via (possibly multiple
alternative) scheduling data structures at the composite level. Each of
these _will_ superimpose a DAG/Polytree on top of the graph topology.

> but in specification of the order of
> activation/evaluation (the data-flow computation model is not precise
> enough here).

I think you implicitly refer to the _topological_ part of the "data flow
computation model"; I indeed see the "schedulers" as a minimum extra part
of that model. (Other extras are: data 'forgetting' policies, execution
triggering, ...)

> Identified "best practices" include: "hidden"
> semantics/heuristics of Simulink [1], similar solution by Scicos [2] and
> guard expressions of Erlang [3]. For me it is still not clear how these
> approaches can be glued with the existing 'connection policy' mechanism
> and which of them is "the way to go". One idea is not to stick with just
> one of them, but to introduce an abstract 'activation policy'
> concept/enumeration into meta-model (but I would still really want to
> find "the way to go"!).

I am not completely sure I understand the last sentences above...

> As soon, as we formalize some composition/activation primitives for (B),
> we should evaluate them with some of the "reference use-cases" (and we
> need to find them anyway!).

Absolutely. I would even suggest to start with categorizing them: control
diagrams, Bayesian networks, FSMs, kin&dyn solvers,...

> Yes, evaluate, because the question is not what information to get from
> the designer, but how he/she wants to express it.
>
> Ideally, I would like to integrate both (A) and (B) scenarios into a
> common formal model. However, I do not think that it is possible with
> the current state of research/development.

Why not...? I see not a single fundamental showstopper.

> Regarding the technology: my idea is to use XText for textual and GMF
> for graphical notations respectively. EMFText, was the second candidate
> after XText. However, it imposes some limitations on syntax related to
> unordered grouping of attributes. Motivation for GMF is that all the
> other "easy to use" frameworks make customization of the graphical
> notation much more difficult. Besides, GMF is already used in BRIDE,
> which makes the integration somehow easier.

The big lack in all these examples is a (set of) formal constraint
languages...

> Please do not hesitate to blame/comment/discuss! Also, please note, that
> all the above is based on my current vision about the BRIDE/Composition
> development status. Excuse me if I have missed some functionality, which
> is already there!
>
> [1] MATLAB/Simulink Documentation, Working with Sample Times:
> http://www.mathworks.com/help/toolbox/simulink/ug/br09i6c.html
>
> [2] "Modeling and Simulation in Scilab/Scicos with ScicosLab 4.4",
> Chapt.8, "Scicos Formalism", Springer 2010.
>
> [3] Erlang Reference Manual User's Guide, Function Declaration Syntax:
> http://www.erlang.org/doc/reference_manual/functions.html#id74368
>
> --
> Piotr Trojanek

Thanks for the very nice roadmap kickoff! :-)

Herman

Ideas about formalizing and tooling for composition primitives

On Thu, Apr 12, 2012 at 08:44:27PM +0200, Herman Bruyninckx wrote:
> > [...]
> >To some extent Sylvian is right - a lot of what we need may be already
> >there (in ROCK). But to stress the point: we want the models to be
> >*explicit* and tools, which are derived from these models.
>
> "derived from" is not the most correct expression, I think. The tools must
> support the operations (transformations, aggregations,...) that are
> defined formally on the model level.

When saying "derived from" I am thinking mostly about model editors. I agree,
that this term is not really fortunate for all the rest. I just wanted
to avoid "model-driven", which is already over-used :-)

> >At this moment, there are at least two already identified scenarios: (A)
> >"ROCK-like" composition (i.e. as supported by the implicit ROCK
> >meta-model and Ruby-based tools) and (B) "Simulink-like" composition
> >(i.e. as discussed few days ago and partially implemented in FBSched).
> >These are by no means exhaustive, but they seem to cover a fairly large
> >number of use-cases and that's why they deserve some special attention.
>
> Maybe a good start is to try to make both of them formally explicit?

I was also thinking about this. This is not so difficult for (A) and
after getting some grips with Ruby I am already able to dig most of them
out from the ROCK. With (B) there are at least 3 options identified
(with references included in my previous email), so the only question is
"which one to choose?" (see below).

> >I can also think about (C) "plan-like" scenario, with the focus on the
> >control-flow instead of data-flow composition like in (B). However, this
> >is even more difficult and I guess, that for any non-trivial use-case it
> >requires manual coding/scripting (so let's skip it at this moment).
>
> Wait, not so fast: I am interested in getting to know one or more use cases
> for which "class C" is the best solution.

With (C) I was thinking of composition like in languages, which traditionally
belong to the sequencer/executive layer (e.g. TDL, PLEXIL). I am not even
really sure how do they fit into component-based design... However, my
intuition tells me, that there are use-cases where it makes sense to "compose"
(or maybe "coordinate"?) operations of two components into a single piece.
Doing it with the general purpose programming language (e.g. C++ or Lua) is
extremely error-prone. This is why I think, that DSMLs can be useful here.

What Sylvian said is that "Rock's underlying data structure is a plan".
I guess, that we may be talking about similar kind of composition (?).

> >I would like to propose/discuss the following road-map.
> >
> >For the (A) scenario I would prefer to not reinvent the wheel, but
> >rather make the ROCK's composition meta-model explicit.
>
> You have my support for this suggestion. I expect that we will all learn
> from this effort, in the worst case.
>
> >I have noted the
> >following check-list of issues, which need to be addressed by the
> >meta-model: aggregation of components and connections, promotion and
> >renaming of ports (and operations).
>
> While being active on this job anyway, it would also be useful to make an
> "ontology" of terminology: "what term means what in which context?".
> For example: do we make a distinction between "composition" and
> "aggregation"? (I do not, and prefer composition, because of the shared
> semantic origin with "component". Hence, my preference for the terms
> "composability" and "compositionality".)

Definitely all those names should be clarified, but what I prefer is to
look for already established "ontology" instead of defining a new one.

I was trying to locate some "reference" terms for what we are speaking
about. What Szyperski and OMG use is the 'component assembly' and
'composite components'. To be more specific [1]:

``Component instances may be composed together to form new component
types; these latter are called <<composite component types>> or
sometimes <<component assemblies>>. The component instances that
comprise the internal structure of a composite component are referred to
as its <<parts>>. Those parts are connected to one another and to their
containing composite component via <<connectors>> between their
respective ports.''

I did not found any references to "aggregation", so please excuse me and
let's forget about this term :-)

> I consider 'port renaming' as one of the concepts that belong to the
> semantics of "composition", as one particular example of the
> "namespace scoping" that a composite provides. And this, in turn, is
> one part of the "closure" concept that belongs naturally at the
> composition level; that is, the scope until which more internal
> components can 'export' names as 'global' to their own scope.

Regarding the "promotion" both Szyperski and OMG use 'delegation' for
the incoming requests/data. OMG use also 'propagation' for the outgoing
data [2]. I have not found any reference to "renaming" and I think, that
this term is not really necessary in the presence of the former two.

> There are more semantic primitives that naturally belong to the
> composition context; but what is the minimum?

I like this question but I am not ready to answer it (yet!) :(

> >Next step is to derive at least
> >2 tools from the meta-model: textual (preferable with ROCK-compatible
> >syntax)
>
> A metametamodel of the semantic meaning of that syntax will allow
> model-to-model transformations to other "DSLs".

I am not sure if I understand what is the "metametamodel of the semantic
meaning". Do you mean "a semantic domain" for the component/composition
meta-model?

> >and graphical (with the notation aligned with conventions of
> >diagrams in the RTT manuals). The goal is to reuse/refine what's already
> >in ROCK and extend its capabilities with graphical tooling.
>
> >For the (B) scenario the main problem I see is not in the composition
> >primitives (i.e. data-flow connections of ports with the DAG/Polytree
> >restrictions applied),
>
> I see no reasons to limit the _topology_ of the composition to DAGs or
> Polytrees; the 'serialization' can be done on graphs, via (possibly multiple
> alternative) scheduling data structures at the composite level. Each of
> these _will_ superimpose a DAG/Polytree on top of the graph topology.

Yes, but for DAG/Polytree is it clear how to 'serialize' just from their
topology.

> >but in specification of the order of
> >activation/evaluation (the data-flow computation model is not precise
> >enough here).
>
> I think you implicitly refer to the _topological_ part of the "data flow
> computation model"; I indeed see the "schedulers" as a minimum extra part
> of that model. (Other extras are: data 'forgetting' policies, execution
> triggering, ...)

Yes, I refer only to topological part of the data flow. In case of
graphs one needs some 'hint' primitives or heuristics to
choose/calculate one of the many possible alternatives.

> >Identified "best practices" include: "hidden"
> >semantics/heuristics of Simulink [1], similar solution by Scicos [2] and
> >guard expressions of Erlang [3]. For me it is still not clear how these
> >approaches can be glued with the existing 'connection policy' mechanism
> >and which of them is "the way to go". One idea is not to stick with just
> >one of them, but to introduce an abstract 'activation policy'
> >concept/enumeration into meta-model (but I would still really want to
> >find "the way to go"!).
>
> I am not completely sure I understand the last sentences above...

Sorry, I was not clear here... What I meant was to include more than one
alternative set of primitives for the "Simulink-like" composition.

> >As soon, as we formalize some composition/activation primitives for (B),
> >we should evaluate them with some of the "reference use-cases" (and we
> >need to find them anyway!).
>
> Absolutely. I would even suggest to start with categorizing them: control
> diagrams, Bayesian networks, FSMs, kin&dyn solvers,...
>
> >Yes, evaluate, because the question is not what information to get from
> >the designer, but how he/she wants to express it.
> >
> >Ideally, I would like to integrate both (A) and (B) scenarios into a
> >common formal model. However, I do not think that it is possible with
> >the current state of research/development.
>
> Why not...? I see not a single fundamental showstopper.

Sorry once again... I was thinking about finding a common semantical domain for
assigning the meaning to all the "composition primitives", e.g. 'port
promotion' and 'guard expression'. In fact, the meanings will be defined by the
model-to-code transformations into the RTT/C++ domain.

> >Regarding the technology: my idea is to use XText for textual and GMF
> >for graphical notations respectively. EMFText, was the second candidate
> >after XText. However, it imposes some limitations on syntax related to
> >unordered grouping of attributes. Motivation for GMF is that all the
> >other "easy to use" frameworks make customization of the graphical
> >notation much more difficult. Besides, GMF is already used in BRIDE,
> >which makes the integration somehow easier.
>
> The big lack in all these examples is a (set of) formal constraint
> languages...

Indeed, but I had some intentions for that. I already had some "clash" about
constraint languages on this mailing list (at the time of the alpha-release of
BRIDE). Now I decided to not mention about them just to avoid disturbance of
the essential part of the discussion (sorry, I should be more explicit about
this).

Constraints are complementary to the meta-models and when I say "meta-model",
then what I really mean is "Ecore+constraint annotations". AFAIK the only
constraint language capable of annotating the meta-model itself is the OCL.
However, there are other languages, which are better/easier to integrate with
the textual/graphical editors (e.g. EVL, which is already used in BRIDE)...

I am afraid, that it is not possible to stick with a single constraint language
for the whole toolchain at this moment. This is not good, as some helper
functions can/should be reused within different contexts (e.g. in graphical and
textual editors, code generators, ...). This means a violation of the 'Don't
Repeat Yourself' rule, but I see no way to avoid this.

In short, I prefer to use OCL where it is possible. If something can not be
done with OCL, then I prefer to use some other language than not applying
constraint at all or hacking with Java.

[1] OMG, "Robotic Technology Component Specification", Version 1.0,
April 2008.

[2] OMG, "Deployment and Configuration of Component-based Distributed
Applications Specification", Version 4.0, April 2006.

--
Piotr Trojanek

Ideas about formalizing and tooling for composition primitives

On Sat, 14 Apr 2012, Piotr Trojanek wrote:

> On Thu, Apr 12, 2012 at 08:44:27PM +0200, Herman Bruyninckx wrote:
>>> [...]
>>> To some extent Sylvian is right - a lot of what we need may be already
>>> there (in ROCK). But to stress the point: we want the models to be
>>> *explicit* and tools, which are derived from these models.
>>
>> "derived from" is not the most correct expression, I think. The tools must
>> support the operations (transformations, aggregations,...) that are
>> defined formally on the model level.
>
> When saying "derived from" I am thinking mostly about model editors. I agree,
> that this term is not really fortunate for all the rest. I just wanted
> to avoid "model-driven", which is already over-used :-)
>
>>> At this moment, there are at least two already identified scenarios: (A)
>>> "ROCK-like" composition (i.e. as supported by the implicit ROCK
>>> meta-model and Ruby-based tools) and (B) "Simulink-like" composition
>>> (i.e. as discussed few days ago and partially implemented in FBSched).
>>> These are by no means exhaustive, but they seem to cover a fairly large
>>> number of use-cases and that's why they deserve some special attention.
>>
>> Maybe a good start is to try to make both of them formally explicit?
>
> I was also thinking about this. This is not so difficult for (A) and
> after getting some grips with Ruby I am already able to dig most of them
> out from the ROCK. With (B) there are at least 3 options identified
> (with references included in my previous email), so the only question is
> "which one to choose?" (see below).
>
>>> I can also think about (C) "plan-like" scenario, with the focus on the
>>> control-flow instead of data-flow composition like in (B). However, this
>>> is even more difficult and I guess, that for any non-trivial use-case it
>>> requires manual coding/scripting (so let's skip it at this moment).
>>
>> Wait, not so fast: I am interested in getting to know one or more use cases
>> for which "class C" is the best solution.
>
> With (C) I was thinking of composition like in languages, which traditionally
> belong to the sequencer/executive layer (e.g. TDL, PLEXIL). I am not even
> really sure how do they fit into component-based design...

that's also my intuition for now. That does not mean that these aspects
need not be modelled, but not inside of a "Component Model".

> However, my
> intuition tells me, that there are use-cases where it makes sense to "compose"
> (or maybe "coordinate"?) operations of two components into a single piece.

Sure.

> Doing it with the general purpose programming language (e.g. C++ or Lua) is
> extremely error-prone. This is why I think, that DSMLs can be useful here.
>
> What Sylvian said is that "Rock's underlying data structure is a plan".
> I guess, that we may be talking about similar kind of composition (?).
>
>>> I would like to propose/discuss the following road-map.
>>>
>>> For the (A) scenario I would prefer to not reinvent the wheel, but
>>> rather make the ROCK's composition meta-model explicit.
>>
>> You have my support for this suggestion. I expect that we will all learn
>> from this effort, in the worst case.
>>
>>> I have noted the
>>> following check-list of issues, which need to be addressed by the
>>> meta-model: aggregation of components and connections, promotion and
>>> renaming of ports (and operations).
>>
>> While being active on this job anyway, it would also be useful to make an
>> "ontology" of terminology: "what term means what in which context?".
>> For example: do we make a distinction between "composition" and
>> "aggregation"? (I do not, and prefer composition, because of the shared
>> semantic origin with "component". Hence, my preference for the terms
>> "composability" and "compositionality".)
>
> Definitely all those names should be clarified, but what I prefer is to
> look for already established "ontology" instead of defining a new one.
>
> I was trying to locate some "reference" terms for what we are speaking
> about. What Szyperski and OMG use is the 'component assembly' and
> 'composite components'. To be more specific [1]:
>
> ``Component instances may be composed together to form new component
> types; these latter are called <<composite component types>> or
> sometimes <<component assemblies>>. The component instances that
> comprise the internal structure of a composite component are referred to
> as its <<parts>>. Those parts are connected to one another and to their
> containing composite component via <<connectors>> between their
> respective ports.''
>
> I did not found any references to "aggregation", so please excuse me and
> let's forget about this term :-)

One should not forget about it, but say explicitly that it is a 100%
synonym for composition (in our model context). Unless someone finds a
reason to make a semantic differentiation between both.
The one that is used in OO, if I am not mistaken is the following:
aggregation takes parts together and makes them available as one new part,
but the parts themselves do not depend on each other, or rather, they can
exist by themselves; in composition, that is not the case: the parts loose
their "life" as soon as the composite is removed.

>> I consider 'port renaming' as one of the concepts that belong to the
>> semantics of "composition", as one particular example of the
>> "namespace scoping" that a composite provides. And this, in turn, is
>> one part of the "closure" concept that belongs naturally at the
>> composition level; that is, the scope until which more internal
>> components can 'export' names as 'global' to their own scope.
>
> Regarding the "promotion" both Szyperski and OMG use 'delegation' for
> the incoming requests/data. OMG use also 'propagation' for the outgoing
> data [2]. I have not found any reference to "renaming" and I think, that
> this term is not really necessary in the presence of the former two.
>
>> There are more semantic primitives that naturally belong to the
>> composition context; but what is the minimum?
>
> I like this question but I am not ready to answer it (yet!) :(

This discussion is a common effort to try to get that far :-)

>>> Next step is to derive at least
>>> 2 tools from the meta-model: textual (preferable with ROCK-compatible
>>> syntax)
>>
>> A metametamodel of the semantic meaning of that syntax will allow
>> model-to-model transformations to other "DSLs".
>
> I am not sure if I understand what is the "metametamodel of the semantic
> meaning". Do you mean "a semantic domain" for the component/composition
> meta-model?

>
>>> and graphical (with the notation aligned with conventions of
>>> diagrams in the RTT manuals). The goal is to reuse/refine what's already
>>> in ROCK and extend its capabilities with graphical tooling.
>>
>>> For the (B) scenario the main problem I see is not in the composition
>>> primitives (i.e. data-flow connections of ports with the DAG/Polytree
>>> restrictions applied),
>>
>> I see no reasons to limit the _topology_ of the composition to DAGs or
>> Polytrees; the 'serialization' can be done on graphs, via (possibly multiple
>> alternative) scheduling data structures at the composite level. Each of
>> these _will_ superimpose a DAG/Polytree on top of the graph topology.
>
> Yes, but for DAG/Polytree is it clear how to 'serialize' just from their
> topology.
>
>>> but in specification of the order of
>>> activation/evaluation (the data-flow computation model is not precise
>>> enough here).
>>
>> I think you implicitly refer to the _topological_ part of the "data flow
>> computation model"; I indeed see the "schedulers" as a minimum extra part
>> of that model. (Other extras are: data 'forgetting' policies, execution
>> triggering, ...)
>
> Yes, I refer only to topological part of the data flow. In case of
> graphs one needs some 'hint' primitives or heuristics to
> choose/calculate one of the many possible alternatives.
>
>>> Identified "best practices" include: "hidden"
>>> semantics/heuristics of Simulink [1], similar solution by Scicos [2] and
>>> guard expressions of Erlang [3]. For me it is still not clear how these
>>> approaches can be glued with the existing 'connection policy' mechanism
>>> and which of them is "the way to go". One idea is not to stick with just
>>> one of them, but to introduce an abstract 'activation policy'
>>> concept/enumeration into meta-model (but I would still really want to
>>> find "the way to go"!).
>>
>> I am not completely sure I understand the last sentences above...
>
> Sorry, I was not clear here... What I meant was to include more than one
> alternative set of primitives for the "Simulink-like" composition.
>
>>> As soon, as we formalize some composition/activation primitives for (B),
>>> we should evaluate them with some of the "reference use-cases" (and we
>>> need to find them anyway!).
>>
>> Absolutely. I would even suggest to start with categorizing them: control
>> diagrams, Bayesian networks, FSMs, kin&dyn solvers,...
>>
>>> Yes, evaluate, because the question is not what information to get from
>>> the designer, but how he/she wants to express it.
>>>
>>> Ideally, I would like to integrate both (A) and (B) scenarios into a
>>> common formal model. However, I do not think that it is possible with
>>> the current state of research/development.
>>
>> Why not...? I see not a single fundamental showstopper.
>
> Sorry once again... I was thinking about finding a common semantical domain for
> assigning the meaning to all the "composition primitives", e.g. 'port
> promotion' and 'guard expression'. In fact, the meanings will be defined by the
> model-to-code transformations into the RTT/C++ domain.
>
>>> Regarding the technology: my idea is to use XText for textual and GMF
>>> for graphical notations respectively. EMFText, was the second candidate
>>> after XText. However, it imposes some limitations on syntax related to
>>> unordered grouping of attributes. Motivation for GMF is that all the
>>> other "easy to use" frameworks make customization of the graphical
>>> notation much more difficult. Besides, GMF is already used in BRIDE,
>>> which makes the integration somehow easier.
>>
>> The big lack in all these examples is a (set of) formal constraint
>> languages...
>
> Indeed, but I had some intentions for that. I already had some "clash" about
> constraint languages on this mailing list (at the time of the alpha-release of
> BRIDE). Now I decided to not mention about them just to avoid disturbance of
> the essential part of the discussion (sorry, I should be more explicit about
> this).
>
> Constraints are complementary to the meta-models and when I say "meta-model",
> then what I really mean is "Ecore+constraint annotations".

Oops, that is a too high lock-in as far as I am concerned.

> AFAIK the only
> constraint language capable of annotating the meta-model itself is the OCL.
> However, there are other languages, which are better/easier to integrate with
> the textual/graphical editors (e.g. EVL, which is already used in BRIDE)...

I think we will need lots of constraint languages, sooner or later.

> I am afraid, that it is not possible to stick with a single constraint language
> for the whole toolchain at this moment. This is not good, as some helper
> functions can/should be reused within different contexts (e.g. in graphical and
> textual editors, code generators, ...). This means a violation of the 'Don't
> Repeat Yourself' rule, but I see no way to avoid this.
>
> In short, I prefer to use OCL where it is possible. If something can not be
> done with OCL, then I prefer to use some other language than not applying
> constraint at all or hacking with Java.
>
> [1] OMG, "Robotic Technology Component Specification", Version 1.0,
> April 2008.
>
> [2] OMG, "Deployment and Configuration of Component-based Distributed
> Applications Specification", Version 4.0, April 2006.
>
> --
> Piotr Trojanek

Thanks for keeping this discussion alive! I hope you (or someone else) will
be able to make a useful summary out of it, that can be consolidated in a
tool roadmap and an "ontology" :-)

Herman

Ideas about formalizing and tooling for composition primitives

On 15/04/12 15:53, Herman Bruyninckx wrote:
> On Sat, 14 Apr 2012, Piotr Trojanek wrote:
>> I did not found any references to "aggregation", so please excuse me and
>> let's forget about this term :-)
>
> One should not forget about it, but say explicitly that it is a 100%
> synonym for composition (in our model context). Unless someone finds a
> reason to make a semantic differentiation between both.
> The one that is used in OO, if I am not mistaken is the following:
> aggregation takes parts together and makes them available as one new part,
> but the parts themselves do not depend on each other, or rather, they can
> exist by themselves; in composition, that is not the case: the parts loose
> their "life" as soon as the composite is removed.

The RTC model is not explicit about what sort of composition it means:
the semantics of composition and the semantics of component life time
are defined separately. However, because a component can be placed in
more than one execution context at the same time, the OO-style
aggregation is the most likely behaviour of a straight implementation of
the standard. OpenRTM does exactly this due to its dynamic nature:
compositions can be formed and broken at run time without affecting the
lifetime of the components themselves.

Geoff

Ideas about formalizing and tooling for composition primitives

On 04/16/2012 02:06 AM, Geoffrey Biggs wrote:
> On 15/04/12 15:53, Herman Bruyninckx wrote:
>> On Sat, 14 Apr 2012, Piotr Trojanek wrote:
>>> I did not found any references to "aggregation", so please excuse me and
>>> let's forget about this term :-)
>> One should not forget about it, but say explicitly that it is a 100%
>> synonym for composition (in our model context). Unless someone finds a
>> reason to make a semantic differentiation between both.
>> The one that is used in OO, if I am not mistaken is the following:
>> aggregation takes parts together and makes them available as one new part,
>> but the parts themselves do not depend on each other, or rather, they can
>> exist by themselves; in composition, that is not the case: the parts loose
>> their "life" as soon as the composite is removed.
> The RTC model is not explicit about what sort of composition it means:
> the semantics of composition and the semantics of component life time
> are defined separately. However, because a component can be placed in
> more than one execution context at the same time, the OO-style
> aggregation is the most likely behaviour of a straight implementation of
> the standard. OpenRTM does exactly this due to its dynamic nature:
> compositions can be formed and broken at run time without affecting the
> lifetime of the components themselves.
+1. Same in Rock: you can create or break compositions while keeping the
components running ... as long as other constraints are met.

Sylvain

Ideas about formalizing and tooling for composition primitives

On Sun, Apr 15, 2012 at 08:53:56AM +0200, Herman Bruyninckx wrote:
> >>The big lack in all these examples is a (set of) formal constraint
> >>languages...
> >
> >Indeed, but I had some intentions for that. I already had some "clash" about
> >constraint languages on this mailing list (at the time of the alpha-release of
> >BRIDE). Now I decided to not mention about them just to avoid disturbance of
> >the essential part of the discussion (sorry, I should be more explicit about
> >this).
> >
> >Constraints are complementary to the meta-models and when I say "meta-model",
> >then what I really mean is "Ecore+constraint annotations".
>
> Oops, that is a too high lock-in as far as I am concerned.

I mean, that for me the "meta-model" in the context of the Eclipse-ecosystem is
not the Ecore alone. (I did not mean that "meta-model" = only Ecore-based
stuff).

The goal of using constrain languages (in the form of annotations) at the
Ecore-level is to capture all those subtle issues, which are not possible to
express by the OO-like diagrams. Without them, the Ecore meta-models are seldom
complete.

A simple example is enforcing the C/C++-compatible naming convention for the
"id" attributes (to not delay the problem until the code-generation). Another
example is limiting the scope of reference relationships (e.g. to disallow
referring to instances from outside of the containment).

The OO-like diagrams are perfect for communicating/capturing the essential
parts of the meta-models. However, when it comes to details, they are not
enough.

Ideas about formalizing and tooling for composition primitives

On Sun, 15 Apr 2012, Piotr Trojanek wrote:

> On Sun, Apr 15, 2012 at 08:53:56AM +0200, Herman Bruyninckx wrote:
>>>> The big lack in all these examples is a (set of) formal constraint
>>>> languages...
>>>
>>> Indeed, but I had some intentions for that. I already had some "clash" about
>>> constraint languages on this mailing list (at the time of the alpha-release of
>>> BRIDE). Now I decided to not mention about them just to avoid disturbance of
>>> the essential part of the discussion (sorry, I should be more explicit about
>>> this).
>>>
>>> Constraints are complementary to the meta-models and when I say "meta-model",
>>> then what I really mean is "Ecore+constraint annotations".
>>
>> Oops, that is a too high lock-in as far as I am concerned.
>
> I mean, that for me the "meta-model" in the context of the Eclipse-ecosystem is
> not the Ecore alone. (I did not mean that "meta-model" = only Ecore-based
> stuff).
>
> The goal of using constrain languages (in the form of annotations) at the
> Ecore-level is to capture all those subtle issues, which are not possible to
> express by the OO-like diagrams. Without them, the Ecore meta-models are seldom
> complete.

Absolutely! Ecore has its origins in OO design only.

> A simple example is enforcing the C/C++-compatible naming convention for the
> "id" attributes (to not delay the problem until the code-generation). Another
> example is limiting the scope of reference relationships (e.g. to disallow
> referring to instances from outside of the containment).
>
> The OO-like diagrams are perfect for communicating/capturing the essential
> parts of the meta-models. However, when it comes to details, they are not
> enough.

You are preaching to the choir :-)

That's the reason why we introduced MDE's M3-M0 modeling into the BRICS
Component Model.

Ideas about formalizing and tooling for composition primitives

> One should not forget about it, but say explicitly that it is a 100%
> synonym for composition (in our model context). Unless someone finds a
> reason to make a semantic differentiation between both.
> The one that is used in OO, if I am not mistaken is the following:
> aggregation takes parts together and makes them available as one new part,
> but the parts themselves do not depend on each other, or rather, they can
> exist by themselves; in composition, that is not the case: the parts loose
> their "life" as soon as the composite is removed.

Could you elaborate on that ? I don't see why a component should loose its like
when the composition is removed anymore than an object that is used by another
object should.

Sylvain

Ideas about formalizing and tooling for composition primitives

On Sun, 15 Apr 2012, Sylvain Joyeux wrote:

>
> > One should not forget about it, but say explicitly that it is a 100%
> > synonym for composition (in our model context). Unless someone finds a
> > reason to make a semantic differentiation between both.
> > The one that is used in OO, if I am not mistaken is the following:
> > aggregation takes parts together and makes them available as one new part,
> > but the parts themselves do not depend on each other, or rather, they can
> > exist by themselves; in composition, that is not the case: the parts loose
> > their "life" as soon as the composite is removed.
>
> Could you elaborate on that ? I don't see why a component should loose its like when the
> composition is removed anymore than an object that is used by another object should.

I also do not see many such examples in robotics. What I was refering to
was not what _I_ think should be the semantic meaning, but what I have seen
the OO domain use as semantics; e.g.
<http://en.wikipedia.org/wiki/Object_composition#Aggregation>
"Aggregation differs from ordinary composition in that it does not imply
ownership. In composition, when the owning object is destroyed, so are the
contained objects. In aggregation, this is not necessarily true. For
example, a university owns various departments (e.g., chemistry), and each
department has a number of professors. If the university closes, the
departments will no longer exist, but the professors in those departments
will continue to exist. Therefore, a University can be seen as a
composition of departments, whereas departments have an aggregation of
professors. In addition, a Professor could work in more than one
department, but a department could not be part of more than one
university."

> Sylvain 

Herman

Ideas about formalizing and tooling for composition primitives

On 04/15/2012 03:57 PM, Herman Bruyninckx wrote:
> On Sun, 15 Apr 2012, Sylvain Joyeux wrote:
>
>>
>> > One should not forget about it, but say explicitly that it is a 100%
>> > synonym for composition (in our model context). Unless someone finds a
>> > reason to make a semantic differentiation between both.
>> > The one that is used in OO, if I am not mistaken is the following:
>> > aggregation takes parts together and makes them available as one
>> new part,
>> > but the parts themselves do not depend on each other, or rather,
>> they can
>> > exist by themselves; in composition, that is not the case: the
>> parts loose
>> > their "life" as soon as the composite is removed.
>>
>> Could you elaborate on that ? I don't see why a component should
>> loose its like when the
>> composition is removed anymore than an object that is used by another
>> object should.
>
> I also do not see many such examples in robotics. What I was refering to
> was not what _I_ think should be the semantic meaning, but what I have
> seen
> the OO domain use as semantics; e.g.
> <http://en.wikipedia.org/wiki/Object_composition#Aggregation>
> "Aggregation differs from ordinary composition in that it does not imply
> ownership. In composition, when the owning object is destroyed, so are
> the
> contained objects. In aggregation, this is not necessarily true. For
> example, a university owns various departments (e.g., chemistry), and
> each
> department has a number of professors. If the university closes, the
> departments will no longer exist, but the professors in those departments
> will continue to exist. Therefore, a University can be seen as a
> composition of departments, whereas departments have an aggregation of
> professors. In addition, a Professor could work in more than one
> department, but a department could not be part of more than one
> university."

So, you are here referring to the difference between the OO definition
of composition and the OO definition of aggregation, while I believed
that we were talking about the difference between the component-based
definition of composition and the OO definition of aggregation, which
IMO are quite related.

Sylvain

Ideas about formalizing and tooling for composition primitives

On Mon, 16 Apr 2012, Sylvain Joyeux wrote:

> On 04/15/2012 03:57 PM, Herman Bruyninckx wrote:
>> On Sun, 15 Apr 2012, Sylvain Joyeux wrote:
>>
>>>
>>> > One should not forget about it, but say explicitly that it is a 100%
>>> > synonym for composition (in our model context). Unless someone finds a
>>> > reason to make a semantic differentiation between both.
>>> > The one that is used in OO, if I am not mistaken is the following:
>>> > aggregation takes parts together and makes them available as one new
>>> part,
>>> > but the parts themselves do not depend on each other, or rather, they
>>> can
>>> > exist by themselves; in composition, that is not the case: the parts
>>> loose
>>> > their "life" as soon as the composite is removed.
>>>
>>> Could you elaborate on that ? I don't see why a component should loose its
>>> like when the
>>> composition is removed anymore than an object that is used by another
>>> object should.
>>
>> I also do not see many such examples in robotics. What I was refering to
>> was not what _I_ think should be the semantic meaning, but what I have seen
>> the OO domain use as semantics; e.g.
>> <http://en.wikipedia.org/wiki/Object_composition#Aggregation>
>> "Aggregation differs from ordinary composition in that it does not imply
>> ownership. In composition, when the owning object is destroyed, so are the
>> contained objects. In aggregation, this is not necessarily true. For
>> example, a university owns various departments (e.g., chemistry), and each
>> department has a number of professors. If the university closes, the
>> departments will no longer exist, but the professors in those departments
>> will continue to exist. Therefore, a University can be seen as a
>> composition of departments, whereas departments have an aggregation of
>> professors. In addition, a Professor could work in more than one
>> department, but a department could not be part of more than one
>> university."
>
> So, you are here referring to the difference between the OO definition of
> composition and the OO definition of aggregation,

yes, but just as a reference to what OO thinks about these concepts.

> while I believed that we
> were talking about the difference between the component-based definition of
> composition and the OO definition of aggregation, which IMO are quite
> related.

Agreed. But there _are_ major differences, which you, myself and others
have hinted at already in previous postings: when you compose components,
you have to come up with some "execution schedule" to trigger the different
components and their computations and data exchanges through various ports,
_at runtime_, while the aggregation in OO is a _compile time_ concept, and
results in an object with a "new API".

> Sylvain

Herman

Ideas about formalizing and tooling for composition primitives

On 04/16/2012 10:38 AM, Herman Bruyninckx wrote:
> On Mon, 16 Apr 2012, Sylvain Joyeux wrote:
>
>> On 04/15/2012 03:57 PM, Herman Bruyninckx wrote:
>>> On Sun, 15 Apr 2012, Sylvain Joyeux wrote:
>>>
>>>>
>>>> > One should not forget about it, but say explicitly that it is a 100%
>>>> > synonym for composition (in our model context). Unless someone
>>>> finds a
>>>> > reason to make a semantic differentiation between both.
>>>> > The one that is used in OO, if I am not mistaken is the following:
>>>> > aggregation takes parts together and makes them available as one
>>>> new part,
>>>> > but the parts themselves do not depend on each other, or rather,
>>>> they can
>>>> > exist by themselves; in composition, that is not the case: the
>>>> parts loose
>>>> > their "life" as soon as the composite is removed.
>>>>
>>>> Could you elaborate on that ? I don't see why a component should
>>>> loose its like when the
>>>> composition is removed anymore than an object that is used by
>>>> another object should.
>>>
>>> I also do not see many such examples in robotics. What I was
>>> refering to
>>> was not what _I_ think should be the semantic meaning, but what I
>>> have seen
>>> the OO domain use as semantics; e.g.
>>> <http://en.wikipedia.org/wiki/Object_composition#Aggregation>
>>> "Aggregation differs from ordinary composition in that it does not
>>> imply
>>> ownership. In composition, when the owning object is destroyed, so
>>> are the
>>> contained objects. In aggregation, this is not necessarily true. For
>>> example, a university owns various departments (e.g., chemistry),
>>> and each
>>> department has a number of professors. If the university closes, the
>>> departments will no longer exist, but the professors in those
>>> departments
>>> will continue to exist. Therefore, a University can be seen as a
>>> composition of departments, whereas departments have an aggregation of
>>> professors. In addition, a Professor could work in more than one
>>> department, but a department could not be part of more than one
>>> university."
>>
>> So, you are here referring to the difference between the OO
>> definition of composition and the OO definition of aggregation,
>
> yes, but just as a reference to what OO thinks about these concepts.
>
>> while I believed that we were talking about the difference between
>> the component-based definition of composition and the OO definition
>> of aggregation, which IMO are quite related.
>
> Agreed. But there _are_ major differences, which you, myself and others
> have hinted at already in previous postings: when you compose components,
> you have to come up with some "execution schedule" to trigger the
> different
> components and their computations and data exchanges through various
> ports,
> _at runtime_, while the aggregation in OO is a _compile time_ concept,
> and
> results in an object with a "new API".

Oh. I fully agree that composition and aggregation are not exactly the
same thing, I just believe that they are indeed closely related.

Actually, as you hint at it yourself: (component-based) CB composition
*is* very close to OO aggregation at design time. What differs is the
need for policies at deployment time in the CB case.

Sylvain

Ideas about formalizing and tooling for composition primitives

On Mon, 16 Apr 2012, Sylvain Joyeux wrote:

> On 04/16/2012 10:38 AM, Herman Bruyninckx wrote:
>> On Mon, 16 Apr 2012, Sylvain Joyeux wrote:
>>
>>> On 04/15/2012 03:57 PM, Herman Bruyninckx wrote:
>>>> On Sun, 15 Apr 2012, Sylvain Joyeux wrote:
>>>>
>>>>>
>>>>> > One should not forget about it, but say explicitly that it is a 100%
>>>>> > synonym for composition (in our model context). Unless someone finds a
>>>>> > reason to make a semantic differentiation between both.
>>>>> > The one that is used in OO, if I am not mistaken is the following:
>>>>> > aggregation takes parts together and makes them available as one new
>>>>> part,
>>>>> > but the parts themselves do not depend on each other, or rather, they
>>>>> can
>>>>> > exist by themselves; in composition, that is not the case: the parts
>>>>> loose
>>>>> > their "life" as soon as the composite is removed.
>>>>>
>>>>> Could you elaborate on that ? I don't see why a component should loose
>>>>> its like when the
>>>>> composition is removed anymore than an object that is used by another
>>>>> object should.
>>>>
>>>> I also do not see many such examples in robotics. What I was refering to
>>>> was not what _I_ think should be the semantic meaning, but what I have
>>>> seen
>>>> the OO domain use as semantics; e.g.
>>>> <http://en.wikipedia.org/wiki/Object_composition#Aggregation>
>>>> "Aggregation differs from ordinary composition in that it does not imply
>>>> ownership. In composition, when the owning object is destroyed, so are
>>>> the
>>>> contained objects. In aggregation, this is not necessarily true. For
>>>> example, a university owns various departments (e.g., chemistry), and
>>>> each
>>>> department has a number of professors. If the university closes, the
>>>> departments will no longer exist, but the professors in those departments
>>>> will continue to exist. Therefore, a University can be seen as a
>>>> composition of departments, whereas departments have an aggregation of
>>>> professors. In addition, a Professor could work in more than one
>>>> department, but a department could not be part of more than one
>>>> university."
>>>
>>> So, you are here referring to the difference between the OO definition of
>>> composition and the OO definition of aggregation,
>>
>> yes, but just as a reference to what OO thinks about these concepts.
>>
>>> while I believed that we were talking about the difference between the
>>> component-based definition of composition and the OO definition of
>>> aggregation, which IMO are quite related.
>>
>> Agreed. But there _are_ major differences, which you, myself and others
>> have hinted at already in previous postings: when you compose components,
>> you have to come up with some "execution schedule" to trigger the different
>> components and their computations and data exchanges through various ports,
>> _at runtime_, while the aggregation in OO is a _compile time_ concept, and
>> results in an object with a "new API".
>
> Oh. I fully agree that composition and aggregation are not exactly the same
> thing, I just believe that they are indeed closely related.
>
> Actually, as you hint at it yourself: (component-based) CB composition *is*
> very close to OO aggregation at design time. What differs is the need for
> policies at deployment time in the CB case.

That is _one_ difference, and a major one :-)

The other major difference is that CB relies more on data flow than OO. And
also there, lots of deployment and runtime policies are to be designed (and
modelled) (and executed).

> Sylvain

Herman

Ideas about formalizing and tooling for composition primitives

Zitat von Piotr Trojanek <piotr [dot] trojanek [..] ...>:

> On Thu, Apr 12, 2012 at 08:44:27PM +0200, Herman Bruyninckx wrote:
>> > [...]
>> >To some extent Sylvian is right - a lot of what we need may be already
>> >there (in ROCK). But to stress the point: we want the models to be
>> >*explicit* and tools, which are derived from these models.
>>
>> "derived from" is not the most correct expression, I think. The tools must
>> support the operations (transformations, aggregations,...) that are
>> defined formally on the model level.
>
> When saying "derived from" I am thinking mostly about model editors.
> I agree,
> that this term is not really fortunate for all the rest. I just wanted
> to avoid "model-driven", which is already over-used :-)
>
>> >At this moment, there are at least two already identified scenarios: (A)
>> >"ROCK-like" composition (i.e. as supported by the implicit ROCK
>> >meta-model and Ruby-based tools) and (B) "Simulink-like" composition
>> >(i.e. as discussed few days ago and partially implemented in FBSched).
>> >These are by no means exhaustive, but they seem to cover a fairly large
>> >number of use-cases and that's why they deserve some special attention.
>>
>> Maybe a good start is to try to make both of them formally explicit?
>
> I was also thinking about this. This is not so difficult for (A) and
> after getting some grips with Ruby I am already able to dig most of them
> out from the ROCK. With (B) there are at least 3 options identified
> (with references included in my previous email), so the only question is
> "which one to choose?" (see below).
>
>> >I can also think about (C) "plan-like" scenario, with the focus on the
>> >control-flow instead of data-flow composition like in (B). However, this
>> >is even more difficult and I guess, that for any non-trivial use-case it
>> >requires manual coding/scripting (so let's skip it at this moment).
>>
>> Wait, not so fast: I am interested in getting to know one or more use cases
>> for which "class C" is the best solution.
>
> With (C) I was thinking of composition like in languages, which traditionally
> belong to the sequencer/executive layer (e.g. TDL, PLEXIL). I am not even
> really sure how do they fit into component-based design... However, my
> intuition tells me, that there are use-cases where it makes sense to
> "compose"
> (or maybe "coordinate"?) operations of two components into a single piece.
> Doing it with the general purpose programming language (e.g. C++ or Lua) is
> extremely error-prone. This is why I think, that DSMLs can be useful here.
>
> What Sylvian said is that "Rock's underlying data structure is a plan".
> I guess, that we may be talking about similar kind of composition (?).
>
>> >I would like to propose/discuss the following road-map.
>> >
>> >For the (A) scenario I would prefer to not reinvent the wheel, but
>> >rather make the ROCK's composition meta-model explicit.
>>
>> You have my support for this suggestion. I expect that we will all learn
>> from this effort, in the worst case.
>>
>> >I have noted the
>> >following check-list of issues, which need to be addressed by the
>> >meta-model: aggregation of components and connections, promotion and
>> >renaming of ports (and operations).
>>
>> While being active on this job anyway, it would also be useful to make an
>> "ontology" of terminology: "what term means what in which context?".
>> For example: do we make a distinction between "composition" and
>> "aggregation"? (I do not, and prefer composition, because of the shared
>> semantic origin with "component". Hence, my preference for the terms
>> "composability" and "compositionality".)
>
> Definitely all those names should be clarified, but what I prefer is to
> look for already established "ontology" instead of defining a new one.
>
> I was trying to locate some "reference" terms for what we are speaking
> about. What Szyperski and OMG use is the 'component assembly' and
> 'composite components'. To be more specific [1]:
>
> ``Component instances may be composed together to form new component
> types; these latter are called <<composite component types>> or
> sometimes <<component assemblies>>. The component instances that
> comprise the internal structure of a composite component are referred to
> as its <<parts>>. Those parts are connected to one another and to their
> containing composite component via <<connectors>> between their
> respective ports.''
>
> I did not found any references to "aggregation", so please excuse me and
> let's forget about this term :-)
>
>> I consider 'port renaming' as one of the concepts that belong to the
>> semantics of "composition", as one particular example of the
>> "namespace scoping" that a composite provides. And this, in turn, is
>> one part of the "closure" concept that belongs naturally at the
>> composition level; that is, the scope until which more internal
>> components can 'export' names as 'global' to their own scope.
>
> Regarding the "promotion" both Szyperski and OMG use 'delegation' for
> the incoming requests/data. OMG use also 'propagation' for the outgoing
> data [2]. I have not found any reference to "renaming" and I think, that
> this term is not really necessary in the presence of the former two.
>
>> There are more semantic primitives that naturally belong to the
>> composition context; but what is the minimum?
>
> I like this question but I am not ready to answer it (yet!) :(
>
>> >Next step is to derive at least
>> >2 tools from the meta-model: textual (preferable with ROCK-compatible
>> >syntax)
>>
>> A metametamodel of the semantic meaning of that syntax will allow
>> model-to-model transformations to other "DSLs".
>
> I am not sure if I understand what is the "metametamodel of the semantic
> meaning". Do you mean "a semantic domain" for the component/composition
> meta-model?
>
>> >and graphical (with the notation aligned with conventions of
>> >diagrams in the RTT manuals). The goal is to reuse/refine what's already
>> >in ROCK and extend its capabilities with graphical tooling.
>>
>> >For the (B) scenario the main problem I see is not in the composition
>> >primitives (i.e. data-flow connections of ports with the DAG/Polytree
>> >restrictions applied),
>>
>> I see no reasons to limit the _topology_ of the composition to DAGs or
>> Polytrees; the 'serialization' can be done on graphs, via (possibly multiple
>> alternative) scheduling data structures at the composite level. Each of
>> these _will_ superimpose a DAG/Polytree on top of the graph topology.
>
> Yes, but for DAG/Polytree is it clear how to 'serialize' just from their
> topology.
>
>> >but in specification of the order of
>> >activation/evaluation (the data-flow computation model is not precise
>> >enough here).
>>
>> I think you implicitly refer to the _topological_ part of the "data flow
>> computation model"; I indeed see the "schedulers" as a minimum extra part
>> of that model. (Other extras are: data 'forgetting' policies, execution
>> triggering, ...)
>
> Yes, I refer only to topological part of the data flow. In case of
> graphs one needs some 'hint' primitives or heuristics to
> choose/calculate one of the many possible alternatives.
>
>> >Identified "best practices" include: "hidden"
>> >semantics/heuristics of Simulink [1], similar solution by Scicos [2] and
>> >guard expressions of Erlang [3]. For me it is still not clear how these
>> >approaches can be glued with the existing 'connection policy' mechanism
>> >and which of them is "the way to go". One idea is not to stick with just
>> >one of them, but to introduce an abstract 'activation policy'
>> >concept/enumeration into meta-model (but I would still really want to
>> >find "the way to go"!).
>>
>> I am not completely sure I understand the last sentences above...
>
> Sorry, I was not clear here... What I meant was to include more than one
> alternative set of primitives for the "Simulink-like" composition.
>
>> >As soon, as we formalize some composition/activation primitives for (B),
>> >we should evaluate them with some of the "reference use-cases" (and we
>> >need to find them anyway!).
>>
>> Absolutely. I would even suggest to start with categorizing them: control
>> diagrams, Bayesian networks, FSMs, kin&dyn solvers,...
>>
>> >Yes, evaluate, because the question is not what information to get from
>> >the designer, but how he/she wants to express it.
>> >
>> >Ideally, I would like to integrate both (A) and (B) scenarios into a
>> >common formal model. However, I do not think that it is possible with
>> >the current state of research/development.
>>
>> Why not...? I see not a single fundamental showstopper.
>
> Sorry once again... I was thinking about finding a common semantical
> domain for
> assigning the meaning to all the "composition primitives", e.g. 'port
> promotion' and 'guard expression'. In fact, the meanings will be
> defined by the
> model-to-code transformations into the RTT/C++ domain.
>
>> >Regarding the technology: my idea is to use XText for textual and GMF
>> >for graphical notations respectively. EMFText, was the second candidate
>> >after XText. However, it imposes some limitations on syntax related to
>> >unordered grouping of attributes. Motivation for GMF is that all the
>> >other "easy to use" frameworks make customization of the graphical
>> >notation much more difficult. Besides, GMF is already used in BRIDE,
>> >which makes the integration somehow easier.
>>
>> The big lack in all these examples is a (set of) formal constraint
>> languages...
>
> Indeed, but I had some intentions for that. I already had some "clash" about
> constraint languages on this mailing list (at the time of the
> alpha-release of
> BRIDE). Now I decided to not mention about them just to avoid disturbance of
> the essential part of the discussion (sorry, I should be more explicit about
> this).
>
> Constraints are complementary to the meta-models and when I say "meta-model",
> then what I really mean is "Ecore+constraint annotations". AFAIK the only
> constraint language capable of annotating the meta-model itself is the OCL.
> However, there are other languages, which are better/easier to integrate with
> the textual/graphical editors (e.g. EVL, which is already used in BRIDE)...
> I am afraid, that it is not possible to stick with a single
> constraint language
> for the whole toolchain at this moment. This is not good, as some helper
> functions can/should be reused within different contexts (e.g. in
> graphical and
> textual editors, code generators, ...). This means a violation of the 'Don't
> Repeat Yourself' rule, but I see no way to avoid this.

IMO it's not bad to have not *one* constraint language. It depends
what we want to do with the constraints. In case of tooling: OCL is
good enough, because there is great support in the Ecore and Eclipse
eco-system.

Nico

>
> In short, I prefer to use OCL where it is possible. If something can not be
> done with OCL, then I prefer to use some other language than not applying
> constraint at all or hacking with Java.
>
> [1] OMG, "Robotic Technology Component Specification", Version 1.0,
> April 2008.
>
> [2] OMG, "Deployment and Configuration of Component-based Distributed
> Applications Specification", Version 4.0, April 2006.
>
> --
> Piotr Trojanek
> --
> Orocos-Dev mailing list
> Orocos-Dev [..] ...
> http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
>