mbeddr: an extensible C-based programming language and IDE for embedded systems

While the C programming language provides good support for writing efficient, low-level code, it is not adequate for defining higher-level abstractions relevant to embedded software. In this paper we present the mbeddr technology stack that supports extension of C with constructs adequate for embedded systems. In mbeddr, efficient low-level programs can be written using the well-known concepts from C. Higher-level domain-specific abstractions can be seamlessly integrated into C by means of modular language extension regarding syntax, type system, semantics and IDE. In the paper we show how language extension can address the challenges of embedded software development and report on our experience in building these extensions. We show that language workbenches deliver on the promise of significantly reducing the effort of language engineering and the construction of corresponding IDEs. mbeddr is built on top of the JetBrains MPS language workbench. Both MPS and mbeddr are open source software.

[1]  Thomas W. Reps,et al.  The synthesizer generator , 1984, SDE 1.

[2]  Philip R. Thrift Common Lisp relations: an extension of Lisp for logic programming , 1988, Proceedings. 1988 International Conference on Computer Languages.

[3]  Frédéric Boussinot,et al.  Reactive C: An extension of C to program reactive systems , 1991, Softw. Pract. Exp..

[4]  Paul Klint,et al.  A meta-environment for generating programming environments , 1989, TSEM.

[5]  Larry Rudolph,et al.  ParC - An Extension of C for Shared Memory Parallel Processing , 1996, Softw. Pract. Exp..

[6]  Guy L. Steele,et al.  Growing a Language , 1999, High. Order Symb. Comput..

[7]  Paul Hudak,et al.  Modular domain specific languages and tools , 1998, Proceedings. Fifth International Conference on Software Reuse (Cat. No.98TB100203).

[8]  George S. Avrunin,et al.  Patterns in property specifications for finite-state verification , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[9]  Shigeru Chiba,et al.  OpenJava: A Class-Based Macro System for Java , 1999, Reflection and Software Engineering.

[10]  Luigi Palopoli,et al.  A C language extension for programming real-time applications , 1999, Proceedings Sixth International Conference on Real-Time Computing Systems and Applications. RTCSA'99 (Cat. No.PR00306).

[11]  Guy L. Steele,et al.  Growing a Language , 1999, High. Order Symb. Comput..

[12]  James Cheney,et al.  Cyclone: A Safe Dialect of C , 2002, USENIX Annual Technical Conference, General Track.

[13]  Michael D. Ernst,et al.  An Empirical Analysis of C Preprocessor Use , 2002, IEEE Trans. Software Eng..

[14]  Greg J. Michaelson,et al.  Hume: A Domain-Specific Language for Real-Time Embedded Systems , 2003, GPCE.

[15]  Gilad Bracha Pluggable Type Systems , 2004 .

[16]  Eelco Visser,et al.  Concrete syntax for objects: domain-specific language embedding and assimilation without restrictions , 2004, OOPSLA '04.

[17]  S. Karthik,et al.  Static Analysis : C Code Error Checking for Reliable and Secure Programming , 2022 .

[18]  Chao Wang,et al.  Model checking C programs using F-Soft , 2005, 2005 International Conference on Computer Design.

[19]  Hui Wu,et al.  Weaving a debugging aspect into domain-specific language grammars , 2005, SAC '05.

[20]  Charles Simonyi,et al.  Intentional software , 2006, OOPSLA '06.

[21]  Torbjörn Ekman,et al.  The jastadd extensible java compiler , 2007, OOPSLA.

[22]  Gregor Kiczales,et al.  Expressive programs through presentation extension , 2007, AOSD.

[23]  Eelco Visser,et al.  Designing Syntax Embeddings and Assimilations for Language Libraries , 2007, MoDELS Workshops.

[24]  Aniruddha S. Gokhale,et al.  Model driven middleware: A new paradigm for developing distributed real-time and embedded systems , 2008, Sci. Comput. Program..

[25]  Eddie Kohler,et al.  Xoc, an extension-oriented compiler for systems programming , 2008, ASPLOS.

[26]  Peter Liggesmeyer,et al.  Trends in Embedded Software Engineering , 2009, IEEE Software.

[27]  K. Beetz,et al.  Nationale Roadmap Embedded Systems , 2010 .

[28]  Armand Puccetti,et al.  Static Analysis of the XEN Kernel using Frama-C , 2010, J. Univers. Comput. Sci..

[29]  Oscar Nierstrasz,et al.  Embedding Languages without Breaking Tools , 2010, ECOOP.

[30]  Zoltán Horváth,et al.  Feldspar: A domain specific language for digital signal processing algorithms , 2010, Eighth ACM/IEEE International Conference on Formal Methods and Models for Codesign (MEMOCODE 2010).

[31]  Eelco Visser,et al.  Growing a language environment with editor libraries , 2011, GPCE '11.

[32]  David H. Lorenz,et al.  Cedalion: a language for language oriented programming , 2011, OOPSLA '11.

[33]  Eelco Visser,et al.  Declaratively defining domain-specific language debuggers , 2011, GPCE '11.

[34]  Antoine Miné,et al.  Static Analysis of Run-Time Errors in Embedded Critical Parallel C Programs , 2011, ESOP.

[35]  Michael Eichberg,et al.  Incremental concrete syntax for embedded languages , 2011, SAC '11.

[36]  Bernhard Schätz,et al.  Language engineering as an enabler for incrementally defined formal analyses , 2012, 2012 First International Workshop on Formal Methods in Software Engineering: Rigorous and Agile Approaches (FormSERA).

[37]  Manfred Broy,et al.  What is the Benefit of a Model-Based Design of Embedded Software Systems in the Car Industry? , 2012 .