EMF4CPP is a C++ reimplementation of the EMF core. More specifically, EMF4CPP (formerly Ecore2CPP) is a C++ implementation and type mapping for the Eclipse Modeling Framework core, the Ecore metamodel.
The current release allows to generate C++ code from Ecore metamodels, and to parse and serialize models and metamodels from and into XMI documents. Also, a partially implemented reflective API for generated metamodels is provided.
EMF4CPP consists of two parts: a source code generator from Ecore metamodels to C++ and two runtime support libraries. One of the runtime support libraries implements the Ecore metamodel (libemf4cpp-ecore). The other one allows parsing and serializing models in XMI format (libemf4cpp-ecorecpp). The generator is currently implemented using Xpand and Xtend.
This is our first step at providing a set of tools for MDD (Model-Driven Development) in C++ as an alternative to the Java world offered by Eclipse tools. We would like to explore common C++ idioms, paradigms and tools (such as template metaprogramming or Boost.Spirit) to provide tools for managing models, writing Domain-Specific Languages (DSLs), and Model-to-Text (M2T), Model-to-Model (M2M), and Text-to-Model (T2M) transformations.
Two direct advantages can be that C++ programmers can write their data model using Ecore and the Eclipse tools to finally generate code with EMF4CPP, and also, memory consumption and efficiency is usually better in EMF4CPP than in Java, as our preliminary results show.
The EMF4CPP development distribution consists of four Eclipse projects: emf4cpp.generator, emf4cpp.tests, emf4cpp.xtext and emf4cpp.xtext2qi. The first one contains a C++ source code generator from metamodels conforming to Ecore. The second one contains, as subdirectories, some metamodels we use to test our implementation, and some emf4cpp-based utilities we are developing. A relevant utility we are developing is a Python interpreter, called PyEcore, that allows using EMF4CPP from Python scripts. The third one is a bootstrap implementation of an ANTLR3 grammars generator from Xtext grammars. The last one is an under development Boost Sprit Qi grammars generator from Xtext grammars.
The code is still being actively developed, but we encourage all programmers that want a port of the great EMF tooling to C++ to contact us and test the tools, provide feedback or even code. We hope this utility to be of help to the community.
There seemed to exist also a EMF4NET implementation (using C# instead of C++) but the site has been down for several weeks so it is unclear the status of this other project
Hello Jordi. Could you advice what’s C/C++ based for EMF nowadays?
I don’t know any other one apart from our emf4cpp, but it may be others… Ours is unmaintained due to lack of human resources 🙁 Some companies adapted it somehow, and even contributed some code on GitHub. I’ll contact Jordi to update the link, that is now in GitHub.
Thank your for your reply Diego. I am interested to join as maintainer. it seems start with your project would be the best thing. May we find time to discuss in the future of C/C+ based model transformation. Getting some updates from you would be great. I am interested to extend the project to build executable OSLC adapter or other stuff from EMF technology.