MPS export to Eclipse EMF
Over the last couple of days I have created an EMF export facility for MPS. You can export ecore files from language definitions, as well as XMI files from the instance models.
The export is integrated into the MPS generator facilities. Here is how you use it:
To export an ecore meta model, take any concept declaration in your language of choice and add an ecore export specification annotation (there is an intention for that). In this annotation, you have to specify the name of the to-be-created EPackage, the nsURI as well as the (absolute) path to where the file should be stored. The file's name will correspond to the name of the EPackage. Once you (re-)generate your language, the ecore file will automatically be written as well.
To export an XMI file, select any root element you want to export into an XMI file (currently it's one XMI file per root node). Once again, you create an annotation via an intention. Note that you can only annotate root nodes whose concept has an ecore export specification. In the annotation, you specify path and name, and when you generate the model, the XMI file is written as well.
Notice how nicely one can use the EMF export facility with any language (incl the meta language used for language definition) because of the annotation facility.
Note that the export currently doesn't yet support enumerations (I will work on that...).
You can find the code at
https://github.com/markusvoelter/MPSEMFIntegration.
Tutorial and Download for MEL/C MPS project
The source code for C-based
Modular Embedded Language is now available as a download (as opposed to checking it out from SVN). There is also a new Hello World tutorial that shows you how to write your own litte C/state machine/tasks program in MEL.
Get it here.
SPLC Industry Track CFP
In August of 2011 the
Software Product Lines Conference 2011 will take place in Munich. SPLC has traditionally been a relatively academic conference; this year, however, they are working to get industry much more involved: here is the
Call for Papers.
Let me cite the industry chair Christa Schwanninger:
we encourage you to submit industry papers to SPLC. If you are a PLE evangelist or consultant for other companies or within your company, helping your clients to write a joint publication could be a good way to motivate them. The revealed experience would help industry to improve the overall state of the knowledge and experience.Nothing more to add. Please consider submitting something!
New Book Project
Eelco Visser and I have decided to write a book - we'll track the progress at
dsl-engineering.org.
The book will cover two main aspects: software engineering with DSLs as well as engineering DSLs, i.e., we talk about how DSLs can be used in software engineering and how to engineer good DSLs. The book will assume modern DSL engineering tools (language workbenches). It will not be a tutorial for any specific tool, but of course we will provide examples and some level of detail for the tools you expect from us (SDF/Spoofax, Xtext, MPS, and to a lesser degree, some others).
Although we have just started the book project, we have already written the
Introduction as if the book was already finished to give you an impression what we are planning to do. We have not yet decided how open the writing process will be, but of course there will be some degree of openness and community integration. So please check back with this website if you want to stay informed and possibly get involved.
Table support in MPS 2.0 coming along nicely
MPS 2.0 will feature direct support for tables in editors. I am currently playing around with the code in the MASTER branch in the public git, and I have created a simple example for tables: decision table support for Java.
Here is an example model:
You can now comfortably insert new rows or columns, delete them, and enter expressions. The way you implement it in the editor definition is by subclassing a TableModel class, just as you know it from Swing. A couple of table model base classes exist for the various kinds of tables and matrixes you might want. In the case of this example, I map the table cells onto a linear structure, as defined in the following code (ExprHolders simply wrap/hold an arbitrary expression):
Finally, for generation, I first map it to a new generic switch expression I have added to Java - the intermediate model looks as follows:
In the last step, this is then mapped to a bunch of if statements....
Of course there are still a couple of quirks (it's an arbitrary pull from the repository, not a release!), but table support is coming along nicely.
Also the new build/make system for languages is nice. It now figures out automatically which parts of languages have to be regenerated, reducing average generation times quite a bit.