I was pondering over Famix and found that it only uses 20% of EMOF's
features. As it seems, the E in EMOF is not really standing for
What I came up with when porting MSE to Java, is a much simpler mmmodel.
I documented it on the wiki
would be nice to make this the new mmmodel of moose and get rid of
all the EMOF bloat.
by the way, a Java implementation is in its first draft, if you are
interested contact me.
As some of you know, I am working on a FAMIX importer for Eclipse
java source files, written in Smalltalk (using our JavaConnect
system). At this moment, the importer creates a FAMIX model with
classes, methods, namespaces and inheritance relations.
Now, I experience some strange behaviour of the Mondrian 'Screen
filling system complexity' visualisation. If you take a look at the
screenshot below, you can see the 'Event' class hierarchy. Well, that
is: a list of 'Event' classes and a hierarchy. The strange thing is
that the nodes in the flat line represent exactly the same entities
as the nodes in the hierarchy.
Maybe it's supposed to be this way? But this only appeared after I
added 'implements' relations to the model using
FamixInheritanceLinks. I verified if the model does not contain
duplicate entities for those classes (which would be an obvious
explanation). Inspecting the entities in the flat line did also
reveal they do have outgoingInheritance links.
So, I'm confused and hope you can shed some light on this :-)
ps: Tudor, I hope you got the importer to work now in Mac Intel?
ps2: For those interested in trying this: http://www.info.ucl.ac.be/
~jbrichau/penumbra.html . We're having trouble making JavaConnect run
on Windows, so any help to make it work is appreciated. The problem
is mainly in finding the correct java libraries to load. Idem for
Linux. Or if you can wait long enough, we will be working on an
integration with JNIPort too ;-)
Nice to hear from you.
We use MOF as a meta-meta-model. FAMIX is an instance of MOF and it
is used as a meta-model. So, when you analyze a program you will get
a model that conforms to FAMIX.
FAMIX is a language independent meta-model, meaning that it is
basically a common denominator of various languages. For example, you
will not get all details of the AST in it, but you will get
invocations (calls between methods) and accesses (from methods to
A UML-like diagram of the current FAMIX 2.2 can be found at:
So, if you want to define transformations and generate code, you will
probably need a more detailed model than FAMIX. But, if you just want
to reason about the code without caring much about the AST, than
FAMIX is more suitable.
However, given that Moose works at the level of the meta-meta-model,
it can accommodate other meta-models as well. For example, we have a
meta-model for analyzing dynamic information (Dynamix), historical
information (Hismo) or CVS information (Chronia).
We are now working on FAMIX 3.0. With this occasion we will redefine
some terms. For example, what is now known as FAMIX will become FAMIX-
Core, and we will explicitly define extensions to this Core.
For further questions, we strongly advise to join our moose-dev
mailing list at:
On Oct 22, 2007, at 10:57 AM, Sergio Castro wrote:
> Dear MOOSE team,
> I am interested in understanding if I can used MOOSE for my research,
> but I am currently a bit confused about a couple of things.
> My idea was to use a language independent model of an object oriented
> program, and querying this model for obtaining Intensional Views of
> software. After, I would like to make transformations on this model
> if I
> detect that some constraints over these software views do not hold,
> finally generate source code that reflect the transformations
> accomplished in the model.
> My question is if the program representation used by MOOSE is rich
> enough to define over it any kind of software views based on the
> structural relationships of the source code elements the model was
> from. Or in other words, which information from the source code I lost
> when I build my model in MOOSE?
> Another issue that confuses me is about FAMIX, from the "The Story of
> Moose" paper written by Nierstrasz, Ducasse and G?rba, it seemed to me
> that the FAMIX model was replaced with a MOF like meta model, but I
> found in the Moose wiki (http://smallwiki.unibe.ch/moose) a comment
> about the development of Famix 3.0. Is then FAMIX still part of MOOSE?
> or I misunderstood and the new MOF like meta model is a reengineered
> version of FAMIX?
> thanks in advance for any comment or orientation,
> Sergio Castro
> Moose mailing list
"Being happy is a matter of choice."
Please find attached bugs in FAMIX 2.2
- Chronia.CvsFileVersion.comment has type Smalltalk.Core.Text instead of
- Chronia.CvsFileVersion.timestamp has type Smalltalk.Core.Timestamp instead
of some primitive
- Chronia.Author has both name and Name as property, which fucks up code
- Smalltalk.CvsModelRoot should be in package Chronia
- Smalltalk.Hapax package should be top level, not nested
- Smalltalk.Dude package should be top level, not nested
- Opposites do not match: DynaMoose.Alias.variable
- Opposites do not match: FAMIX.Method.activation
- Container must be single-values: Moose.Model.entity
- Opposites do not match: Moose.Model.mooseModel
- Container must be single-values: FAMIX.Package.definedClass
- Missing type: Chronia.Commit.startTime
- Missing type: Chronia.Commit.endTime
- Opposites do not match: FAMIX.AbstractStructuralEntity.accessedByList
- Opposites do not match: DynaMoose.Activation.argument
- May not have more than one container: FAMIX.Namespace
- Container must be single-values: FAMIX.Namespace.class
- Container must be single-values: FAMIX.Namespace.namespace
- Opposites do not match: FAMIX.InheritanceDefinition.superclass
- Opposites do not match: FAMIX.InheritanceDefinition.subclass
- May not have more than one container: FAMIX.Class
- Container must be single-values: FAMIX.Class.attribute
- Opposites do not match: FAMIX.Class.incomingInheritance
- Opposites do not match: FAMIX.Class.accessedByList
- Opposites do not match: FAMIX.Class.outgoingInheritance
- Container must be single-values: FAMIX.Class.method
I have a question, more of an idea: should closures (or Smalltalk blocks) be
included in the meta-model?
You could see closure as a anonymous function, but with some special
They are becoming a very used feature in programming languages: Smalltalk,
next versions of both Java and C# it's announced to have closures.
I wanted to use the design disharmonies detection implemented in Moose.
Since my trials on both Java and Smalltalk systems failed, I would
like to know what is the development status here.
I saw that most of the identity and collaborative disharmonies rules
are implemented, at least for Java.
However, almost none of them returned a valid result (the metrics
that they are based on seem to return nil instead of a value).
Could you give me some hints on how to use them?
Maybe I'm doing something wrong here, I just tried something like:
aMooseModel allClasses select: [:each | each isBrainClass]