Precisely :). This is exactly my point. Given that we want to use Smalltalk
as an executable language, we will get to see this code all the time, so we
do not want to depend on generation.
Doru
On Tue, Apr 16, 2013 at 1:00 PM, stephane ducasse
<stephane.ducasse(a)free.fr>wrote;wrote:
On Apr 16, 2013, at 7:08 AM, Tudor Girba <tudor(a)tudorgirba.com> wrote:
Hi Stef,
Nicolas and Anne argued that generation is used all the time, for
example when
compiling. So, I agreed that we use it like that only that we
do not want to see it :).
Yes but we do not want to compile smalltalk code from Fame :)
Doru
On Apr 15, 2013, at 11:11 PM, stephane ducasse <stephane.ducasse(a)free.fr>
wrote:
>
> On Apr 15, 2013, at 11:34 AM, Tudor Girba <tudor(a)tudorgirba.com> wrote:
>
>> Hi Nicolas, hi Anne,
>>
>> I agree with the distinction of implementation reuse and sub-typing.
When
I said reuse, I did not refer to implementation reuse, but to typing
reuse.
>>
>> When you say "Famix as implementation language", I presume you mean
"the structure of FAMIX as implementation language". As soon as you will
talk about "FAMIX as executable language" you will run into the little
problem of having an executable language in the first place. In Moose, we
want to have Smalltalk as the executable language. This is not just a
matter of implementation. It is an important meta-modeling aspect.
>>
>> Fame is indeed a meta-meta-model, but Traits should be captured there
as
well. Obviously not the Smalltalk Traits, but the Fame Traits. As I said
before, the important part of the reuse mechanism resides in its ability to
deal with conflicts. Multiple-inheritance in its known language
incarnations (e.g., C++) is a mechanism that comes with ambiguities. That
is why I do not like this term. Traits comes with an explicit conflict
resolution mechanism. That is why I like this one and I would like to see
this mechanism in Fame.
>>
>> The most important part for me is that when we will come down from the
paper discussion into the programming trenches, the mapping to the
underlying implementation is decisive. Take PetitParser, for example. It
also has a meta-model, but it also come with a neat mapping to Smalltalk
classes. This helps us develop and debug with Smalltalk tools. Of course,
if we get a dedicated tool, we can do even more cool things, like we do in
the PPBrowser.
>>
>> As for generation, I completely agree that we are doing it all the
time,
but it only works when we do not get to see it.
> I do not get it. Do we generate?
>
>
>> But, we get to see FAMIX all the time, and as a consequence, FAMIX
should
be editable at plain Smalltalk level. Doing it otherwise would be
shooting ourselves in the foot. So, I do not want to rely on generation in
the Smalltalk incarnation of FAMIX.
>>
>> Anyway, it seems we are making progress and I think we are actually
not
disagreeing, only picking up on names. I think this is a really
exciting direction that was long on the roadmap, but never really tackled.
>>
>> Cheers,
>> Doru
>>
>>
>>
>> On Mon, Apr 15, 2013 at 11:12 AM, Anne Etien <
anne.etien(a)univ-lille1.fr> wrote:
>> Hi,
>>
>> Sorry for arriving after the battle.
>>
>> I just want to talk about my experiment in metamodel and model
generation.
>>
>> It is clear for me that the concept of Trait should not appear in
Fame. It
can be use in its implementation, but can't be considered at the
same level than Element, Class, Property or Package.
>>
>> I fully agree with Nicolas, when he says that Doru is talking
programming
and he is talking metamodelling.
>>
>> So Fame is a metametamodel. What is the concept that we want to
implement
with Traits (or something else) that does not exist currently in
Fame? This concept is reuse. A class can reuse several properties from
another or several other classes. Sometimes, we want to specify that the
property is not reuse as such but using alias...
>>
>> There exist different way to implement this thing. Smalltalk calls it
Traits, Eiffel calls it inheritance (there exist perhaps other). There are
certainly some differences that are yet too subtle for me.
>> Moreover, methods do not appear in Fame
so according to me Traits
should neither not appear. But it may happen that I do
not understand how
it should be introduced.
>>
>> Considering the generation. It is currently performed a lot. It makes
sense only if we don't touch the intermediary nor the final level,
otherwise the high level and the low level are no more align.
>>
>> I hope it can help in the discussion.
>> Anne
>>
>> Le 13 avr. 2013 à 09:08, stephane ducasse a écrit :
>>
>>>
>>> On Apr 12, 2013, at 1:32 PM, Nicolas Anquetil <
Nicolas.Anquetil(a)inria.fr> wrote:
>>>
>>>>
>>>> On 04/11/2013 09:04 AM, stephane ducasse wrote:
>>>>> Nicolas
>>>>>
>>>>> I would really like if you could (with camille/anne/damien/usman)
have a document (can a couple of slide)
>>>>> where you precisely shows the
problem synectiquers encountered with
FAMIX.
>>>>> It will help for the
solution/paper :)
>>>>> And it will help me to understand what are the key problems.
>>>>>
>>>>> Stef
>>>>
>>>> Some problems we see with current Famix.
>>>> Several of them just say that entities have too many properties that
do not make sense for them.
>>> give example
>>>
>>>> Other could be solved by adding more properties to generic entities.
>>> but usless for others :).
>>>
>>>
>>>
>>>> This is what prompted us to think about multiple inheritance (or
traits :-) ) to compose new entities from a set of simple "properties" (not
in Famix sense of property).
>>>
>>> traits-based :)
>>> indeed traits should be good for that.
>>> Probably what you want is to have pair of traits that you apply
to both end of a relation also.
>>>
>>>
>>>> - Invocation is designed for OO. There is no receiver in procedural
languages. This is a semantical problem, but practical too as 'printOn:'
has to be redefined to show 'from -> to' instead of 'from ->
receiver'
>>>
>>> but we could have a superclass for call and a subclass for
invocation?
>>>
>>>> - Invocation is designed for "non-typed language". In
statically
typed languages or procedural languages one knows (or has a pretty good
idea) the function/method called. In these cases, 'candidates' adds
unnecessary complexity
>>>
>>> Really? In Java there are cases where you do not know. For
example if you have an interface: you may have different classes?
>>>
>>>
>>>> - Some relations between entities are reified (Associations) other
not. E.g. Access is an association, but the type of a variable is a
"simple" relation.
>>> this is the question of what is
your domain and if you have to
attach information to the relation.
>>> To me I do not see why I would
like a relation for type.
>>>
>>>> BelongsTo is not reified,
>>> Why do you want to have pointers as relations?
>>> To me it will blow up metamodels for not. I do not see the value
of having a method belongs to a class as a relation.
>>>
>>>> neither is AnnotationInstances, …
>>>
>>> there it could make sense.
>>>
>>>> - Abstract Famix classes like NamedEntity inlude many properties
that are Java specific (isAbstract, isFinal, isPublic, ...), so that a
Function, a Package or a LocalVariable have the isAbstract, isFinal
properties and AnnotationInstances relation.
>>>
>>> Yes the tyranny of the dominant decomposition but now do you
want
to have to express everywhere where
>>>
>>>>
>>>> - This is further complicated by the fact that these properties are
derived from 'modifiers'. So when looking at the meta-description of
NamedEntites, one sees many redundant properties.
>>>
>>> yes probably should be rethought
>>>
>>>> - A language like Cobol has no functions, it has paragraph that is a
sequence of statement with a label to go to it and a return statement (with
no value) at the end. For them 'signature' and 'parameters' are
meaningless.
>>>
>>> so you will have a hard job to always compose a new model for
each language if you do not accept some interpretation.
>>> It also means that you will have
hard time to reuse tools.
>>>
>>>> - 'functions' are defined for ScopingEntity which is not a
BehaviouralEntity. But there are cases where we want both (a Pascal program
would be an example)
>>> this is a nice one :)
>>>
>>>> - all sourcedEntities have a sourceAnchor and comments, which does
not make sense for ScopingEntities, or ImplicitVariables
>>>>
>>>> - for synectique we want an alternative notion of container where a
container only contains BehaviouralEntity, not other entities (a Smalltalk
method would not be a container).
>>>
>>> so it would be interesting to start identifying the traits you
want to have a build a libraries.
>>>
>>>>
>>>> nicolas
>>>>
>>>> --
>>>> Nicolas Anquetil -- RMod research team (Inria)
>>>> _______________________________________________
>>>> Moose-dev mailing list
>>>> Moose-dev(a)iam.unibe.ch
>>>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>
>>>
>>> _______________________________________________
>>> Moose-dev mailing list
>>> Moose-dev(a)iam.unibe.ch
>>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>
>>
>> _______________________________________________
>> Moose-dev mailing list
>> Moose-dev(a)iam.unibe.ch
>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>
>>
>>
>> --
>>
www.tudorgirba.com
>>
>> "Every thing has its own flow"
>>
>>
>> On Mon, Apr 15, 2013 at 11:12 AM, Anne Etien <
anne.etien(a)univ-lille1.fr> wrote:
>> Hi,
>>
>> Sorry for arriving after the battle.
>>
>> I just want to talk about my experiment in metamodel and model
generation.
>>
>> It is clear for me that the concept of Trait should not appear in
Fame. It
can be use in its implementation, but can't be considered at the
same level than Element, Class, Property or Package.
>>
>> I fully agree with Nicolas, when he says that Doru is talking
programming
and he is talking metamodelling.
>>
>> So Fame is a metametamodel. What is the concept that we want to
implement
with Traits (or something else) that does not exist currently in
Fame? This concept is reuse. A class can reuse several properties from
another or several other classes. Sometimes, we want to specify that the
property is not reuse as such but using alias...
>>
>> There exist different way to implement this thing. Smalltalk calls it
Traits, Eiffel calls it inheritance (there exist perhaps other). There are
certainly some differences that are yet too subtle for me.
>> Moreover, methods do not appear in Fame
so according to me Traits
should neither not appear. But it may happen that I do
not understand how
it should be introduced.
>>
>> Considering the generation. It is currently performed a lot. It makes
sense only if we don't touch the intermediary nor the final level,
otherwise the high level and the low level are no more align.
>>
>> I hope it can help in the discussion.
>> Anne
>>
>> Le 13 avr. 2013 à 09:08, stephane ducasse a écrit :
>>
>>>
>>> On Apr 12, 2013, at 1:32 PM, Nicolas Anquetil <
Nicolas.Anquetil(a)inria.fr> wrote:
>>>
>>>>
>>>> On 04/11/2013 09:04 AM, stephane ducasse wrote:
>>>>> Nicolas
>>>>>
>>>>> I would really like if you could (with camille/anne/damien/usman)
have a document (can a couple of slide)
>>>>> where you precisely shows the
problem synectiquers encountered with
FAMIX.
>>>>> It will help for the
solution/paper :)
>>>>> And it will help me to understand what are the key problems.
>>>>>
>>>>> Stef
>>>>
>>>> Some problems we see with current Famix.
>>>> Several of them just say that entities have too many properties that
do not make sense for them.
>>> give example
>>>
>>>> Other could be solved by adding more properties to generic entities.
>>> but usless for others :).
>>>
>>>
>>>
>>>> This is what prompted us to think about multiple inheritance (or
traits :-) ) to compose new entities from a set of simple "properties" (not
in Famix sense of property).
>>>
>>> traits-based :)
>>> indeed traits should be good for that.
>>> Probably what you want is to have pair of traits that you apply
to both end of a relation also.
>>>
>>>
>>>> - Invocation is designed for OO. There is no receiver in procedural
languages. This is a semantical problem, but practical too as 'printOn:'
has to be redefined to show 'from -> to' instead of 'from ->
receiver'
>>>
>>> but we could have a superclass for call and a subclass for
invocation?
>>>
>>>> - Invocation is designed for "non-typed language". In
statically
typed languages or procedural languages one knows (or has a pretty good
idea) the function/method called. In these cases, 'candidates' adds
unnecessary complexity
>>>
>>> Really? In Java there are cases where you do not know. For
example if you have an interface: you may have different classes?
>>>
>>>
>>>> - Some relations between entities are reified (Associations) other
not. E.g. Access is an association, but the type of a variable is a
"simple" relation.
>>> this is the question of what is
your domain and if you have to
attach information to the relation.
>>> To me I do not see why I would
like a relation for type.
>>>
>>>> BelongsTo is not reified,
>>> Why do you want to have pointers as relations?
>>> To me it will blow up metamodels for not. I do not see the value
of having a method belongs to a class as a relation.
>>>
>>>> neither is AnnotationInstances, …
>>>
>>> there it could make sense.
>>>
>>>> - Abstract Famix classes like NamedEntity inlude many properties
that are Java specific (isAbstract, isFinal, isPublic, ...), so that a
Function, a Package or a LocalVariable have the isAbstract, isFinal
properties and AnnotationInstances relation.
>>>
>>> Yes the tyranny of the dominant decomposition but now do you
want
to have to express everywhere where
>>>
>>>>
>>>> - This is further complicated by the fact that these properties are
derived from 'modifiers'. So when looking at the meta-description of
NamedEntites, one sees many redundant properties.
>>>
>>> yes probably should be rethought
>>>
>>>> - A language like Cobol has no functions, it has paragraph that is a
sequence of statement with a label to go to it and a return statement (with
no value) at the end. For them 'signature' and 'parameters' are
meaningless.
>>>
>>> so you will have a hard job to always compose a new model for
each language if you do not accept some interpretation.
>>> It also means that you will have
hard time to reuse tools.
>>>
>>>> - 'functions' are defined for ScopingEntity which is not a
BehaviouralEntity. But there are cases where we want both (a Pascal program
would be an example)
>>> this is a nice one :)
>>>
>>>> - all sourcedEntities have a sourceAnchor and comments, which does
not make sense for ScopingEntities, or ImplicitVariables
>>>>
>>>> - for synectique we want an alternative notion of container where a
container only contains BehaviouralEntity, not other entities (a Smalltalk
method would not be a container).
>>>
>>> so it would be interesting to start identifying the traits you
want to have a build a libraries.
>
>>
>> nicolas
>>
>> --
>> Nicolas Anquetil -- RMod research team (Inria)
>> _______________________________________________
>> Moose-dev mailing list
>> Moose-dev(a)iam.unibe.ch
>>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
>
> _______________________________________________
> Moose-dev mailing list
> Moose-dev(a)iam.unibe.ch
>
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
www.tudorgirba.com
"Every thing has its own flow"
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
www.tudorgirba.com
"Problem solving efficiency grows with the abstractness level of problem
understanding."
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev