Implementation of a subset of the C++14 programming language in a JetBrains MetaProgrammingSystem (MPS) language. mbeddr.cpp has been implemented as an extension to mbeddr C, reusing existing concepts from the MISRA C language and extending it with concepts like classes, namespaces, templates, etc..
Although mbeddr.cpp does not implement the full C++14 standard, it supports the most commonly used constructions such as classes, methods, exceptions, namespaces, as well as partially operator overloading and templates. While it is not yet fully engineered, mbeddr.cpp is already a good generation target with a reasonably workable editing experience in MPS.
In a similar fashion as baseLanguage that is shipped with MPS and also mbeddr, a big advantage of having C++ as an MPS language, is that it is arbirarily extensible on various C++ language elements (statements, expressions, variables, etc.) with Domain Specific Languages that are implemented in MPS. This gives an unprecedented level of integration on language-to-language level.
We're happy with feedback and contributions! Please check out our issues. If you are considering solving an issue, our issues are labeled, also indicating beginner-friendly issues.
The original project documentation can be found in the documentation directory.
The test.ts.com.mbeddr.cpp solution contains scope and type-system tests. Run
gradlew testTsTests, or run the individual test roots as JUnit tests in MPS.
ClassTypeModuleVisibility checks local and imported class scopes, including
external modules, import/export boundaries, reexports, and template filtering.
ReferenceTypeNormalization checks normalized reference base types and
const/volatile qualifiers, with pointer and reference-to-pointer controls.
ReferenceArgumentCompatibility checks qualification additions and rejects
qualification loss, pointer/reference mismatches, unrelated classes, and numeric
widening between reference types.
Current maintenance: Hristina Moneva, Eugen Schindler, and Niko Stotz.
Historical credits go to:
- Daniel Ratiu for starting the initial conceptual version of mbeddr.cpp before 2018
- A team that created the body of the initial prototype implementation in 2018:
- Eugen Schindler as daily supervisor and starter of Dmitrii Nikeshkin's PDEng Software Technology project in collaboration with Océ, which included developing an mbeddr.cpp prototype
- Dmitrii Nikeshkin as a client and Önder Babur as a supervisor for the "Eded" software engineering BSc graduation project (original repository here) for a group of students from the University of Technology in Eindhoven, namely: Nicholas Donnelly, Daan Drijver, Bart van Helvert, Julia Hofs, Daan van der Kallen, Bart Munter, Joris Rombouts, Job Savelsberg, Bart Smit, Remco Surtel, Jelle van der Ster, Wout de Ruiter, and Wesley Brants.
- Daniel Ratiu again for technological guidance and consultancy of the "Eded" software engineering project
- Clean-up into a proper extension of mbeddr.core, improving the level of engineering, usability, and generability, as well as setup of gradle-based command-line build was performed by Niko Stotz with help from Kolja Dummann.