On Nov 26, 2016, at 3:17 PM, stepharo <stepharo(a)free.fr>
On Sat, 26 Nov 2016 14:32:16 +0100, Tudor Girba <tudor(a)tudorgirba.com> wrote:
>> On Nov 26, 2016, at 2:02 PM, stepharo <stepharo(a)free.fr> wrote:
>> Hi doru
>>> As I mentioned at ESUG, I am really happy to see this effort, and I will
support it. Modeling is an important piece in Moose, and being more flexible at creating
new models is a significant added value given that Moose. Please keep me in the loop.
>>> I am particularly interested in the object model of the meta-meta-model, and
in the mapping to the Pharo classes that contain the implementation of the meta-model. I
believe a Traits-based model would work well (I will try to list my ideas of how this
could work later).
>>> Using Slots is definitely something we already should have done in Fame, and
I think it will work very well at least on the implementation level of the meta-model.
>>> About syntaxes, I have less predilection for those, but I understand why they
can be appealing. I believe that we should first favor Pharo, and only afterwards other
DSLs. For example, if we insist of having the meta-model code separately, I believe that
we should be able to produce the meta-description also through a fluent API (so, the
fluent API is one of the syntaxes). Still, if we express the meta-model separately from
the meta-model implementation, the question is remains about how we do the mapping.
>> I kind of agree. Now I do not want to people feel that we still their ideas and
>> they get stuck with their syntaxes.
> I think I am missing a part of the picture. What do you mean by “stealing"?
I mean that I would like a solution that openPonk and platypus can use
and that we can share the same metameta and if they prefer their own syntax that they can
From a end-user perspective may be usig openPonk or express is nicer than pharo :)
Aha. Yes, indeed :). I completely agree that we should aim to allow people to use higher
level editing tools. I just do not want to lose the ability to keep the mapping to the
Pharo level where the real logic is.
A somewhat related parallel that spawns to mind is SmaCC vs PetitParser:
- SmaCC is a DSL out of which the AST is being generated. One consequence is that the AST
nodes are not very smart. For example, there are no specific traversals in the nodes.
However, these traversals are achieved through the generic query language which is indeed
a nice thing to have. It is possible to add these queries as extensions to the nodes (I do
that for some projects), but I did not see it happening too often. Probably the main
reason for it being the fact that when you change the name of the AST node class, the
extension gets lost.
- PetitParser allows us to work using the same level of abstraction which is very
interesting. What you notice in this case is that the AST trees tend to be smarter and
grow their API over time. This is much easier to manage given the integrated refactoring.
However, at the same time until now, PetitParser did not produce a generic query
I think there are things to learn from both of these worlds. I do not know if this
parallel makes sense to you, but to me, the way I see Platypus is more like SmaCC, while
the way we work with FAMIX/Fame is more like PetitParser with everything being integrated.
Likely, we are missing opportunities due to that focus, but we gain the liveness and this
ability of growing the API over time. I think the work on Chef was a very nice thing that
showed that we can actually get the best of both worlds.
Now, it would be definitely be very cool to have a way to integrate Pharo logic inside
another DSL because this would open the door for a completely different community that we
can both learn from and probably offer tools to. Especially, given that now we could also
offer a debugger for those kinds of languages. And hopefully soon, we will also offer
I think this is exciting and definitely worth the investment.
>>> About types, I also disagree with the comment from
Guillaume :). One place where types can be relevant is when producing interfaces for
editing objects, but I think that that does not have to be the main driver of the design
of the new meta-meta-model. The only thing that I think is important when it comes to
types is to allow us to reproduce the basic meta-model implementation in other languages
that do rely on rigid static types. For example, right now, Fame generates the relations
implementation using this information.
>> Yes there is a difference between saying
>> - the type of "to" of this relation is Container
>> - the type of to of this relation is the class of the object that will be the to
of the relation
>> based on the instantiation of the relation.
>> It is like anchor-type. you may want to say
>> this variable is the same type as this one or the same type as whaeveter.
>> and not hardcode the type once for all.
> Exactly. For example, MultivalueLinks that model the bidirectional relationships in
Fame work at the Pharo level and they do not care about type. The static information is
actually only meaningful when we generate code.
> Perhaps one option would be to have some sort of optional types for the scenario in
which someone would like to maintain these types. Or maybe we find another solution.
Yes this is the point or deduce the Type because we rarely want abstract types.
>>> In any case, I do not necessarily have a predefined solution in my head, but
I do have requirements. And I would like to spend effort on this at least at the level of
feedback and prototyping.
>> Ok we do not have either a predefined solution.
>> Now we do not want to focus on interexchange constraints more on empowering our
> That makes sense. That is why I said that I am interested to spend effort :).
>>>> On Nov 26, 2016, at 9:58 AM, stepharo <stepharo(a)free.fr> wrote:
>>>> What we will try to do with Pavel, alain, anne and me (probably nicolas)
in contact with Peter starting january is the following
>>>> Define another metametamodel (trying to use Pharo + Slot for
relationships + invariant = Pharom)
>>>> - this metameta should be able to have different syntaxes
>>>> OpenPonk, Express, Pharo
>>>> - This metameta should does not need types :) sorry I did not get at
all the remark of guillaume
>>>> And in particular there is a difference between a static type and a
concrete type systems.
>>>> Take Famix 3 -> Famix3NG and break it appart to get composable
>>>> and use Pharom to describe FamixNG
>>>> We are open to discussions but to a certain extent.
>>>> Then we will work on optimise for space.
>>>> In addition we will do a call to collect all the points that should be
improve in Moose.
>>>> We will
>>>> and tackle them
>>> "Yesterday is a fact.
>>> Tomorrow is a possibility.
>>> Today is a challenge."
>> Using Opera's mail client: http://www.opera.com/mail/
> "What we can governs what we wish."
Using Opera's mail client: http://www.opera.com/mail/
"Reasonable is what we are accustomed with."