-
Notifications
You must be signed in to change notification settings - Fork 2
/
learn.html
760 lines (576 loc) · 35.4 KB
/
learn.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="utf-8">
<title>mbeddr - engineering the future of embedded software</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description"
content="The website of mbeddr, a set of integrated and extensible languages for embedded software engineering, plus an IDE with refatorings, a debugger and verification tools.">
<meta name="author" content="Markus Voelter">
<!-- styles -->
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Le fav and touch icons -->
<link rel="shortcut icon" href="images/favicon.gif">
<link href="css/bootstrap.css" rel="stylesheet" type='text/css'>
<link href="css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
<link href="css/style.css" rel="stylesheet" type='text/css'>
<link href="css/shield-responsive.css" rel="stylesheet" type='text/css'>
<link href='css/fonts.css' rel='stylesheet' type='text/css'>
<link href="css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
<link href="google-code-prettify/prettify.css" type="text/css" rel="stylesheet"/>
<!--[if lt IE 9]>
<link href="css/iebugs.css" rel="stylesheet" type='text/css'>
<![endif]-->
<script src="js/twitter.js" type="text/javascript"></script>
<script src="js/jquery-1.7.1.min.js"></script>
<script src="js/jquery.prettyPhoto.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$('a[data-rel]').each(function () {
$(this).attr('rel', $(this).data('rel'));
});
$("a[rel^='prettyPhoto']").prettyPhoto({
animation_speed: 'fast',
slideshow: 5000,
autoplay_slideshow: false,
opacity: 0.80,
show_title: true,
theme: 'ligh_square',
overlay_gallery: false,
social_tools: false
});
$('#nav-outline > li > a').live('click', function () {
$(this).parent().find('ul').slideToggle();
});
$('.has-popover').popover();
var po = document.createElement('script');
po.type = 'text/javascript';
po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
});
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
var pluginUrl = '//www.google-analytics.com/plugins/ga/inpage_linkid.js';
_gaq.push(['_require', 'inpage_linkid', pluginUrl]);
_gaq.push([ '_setAccount', 'UA-45406798-1' ]);
_gaq.push([ '_trackPageview' ]);
(function () {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-WZX646"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-WZX646');</script>
<!-- End Google Tag Manager -->
<!-- Navbar -->
<div class="navbar navbar-fixed-top"
style="border-bottom: 1px solid #000;">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse"
data-target=".nav-collapse"> <span class="icon-bar"></span> <span
class="icon-bar"></span> <span class="icon-bar"></span>
</a> <a class="brand" href="index.html"></a>
<div class="nav-collapse collapse" style="height: 0px;">
<ul class="nav">
<li><a href="/blog">News</a></li>
<li><a href="benefits.html">Benefits</a></li>
<li><a href="download.html">Download</a></li>
<li><a href="platform.html">Platform</a></li>
<li><a href="learn.html">Learn</a></li>
<li><a href="faq.html">FAQ</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="support.html">Support</a></li>
<li><a href="team.html">Team</a></li>
<li><a href="mps.html">MPS</a></li>
</ul>
</div>
<!--/.nav-collapse -->
<div class="btn-group pull-right">
<g:plusone href="http://mbeddr.com"></g:plusone>
</div>
</div>
</div>
</div>
<!-- Navbar End -->
<div id="header_wrapper" class="container">
</div>
<div id="page">
<div class="inner">
<div class="container clearfix">
<h2>User Guide</h2>
<div class="container">
<div class="container">
<div class="span7">
<p align="justify">
The user guide is written and maintained in inside MPS using mbeddr's documentation language, because
this supports close integration with the mbeddr artifacts documented in the user guide. It is available
inside MPS as well as online:
</p>
<p align="justify">
<b>Online User Guide:</b> The HTML version of the user guide is <a target="_blank" href="http://mbeddr.com/userguide/UserGuideExport.html">available here</a>.
This version has been exported from within MPS and has a few shortcomings including the size of some pictures
as well as the layout of some of the embedded sources (because of an MPS bug regarding to-text transformation
of collection layouts). On the plus side, you can use the small blue arrows associated with example code to
directly select the corresponding node in MPS (MPS has to be running, and the tutorial project must be opened for this to work).
</p>
<p align="justify">
<b>User Guide in mbeddr:</b> To open the user guide, open
the <i>tutorial</i> project (which ships with the mbeddr distribution) and open the <i>mbeddrUserGuide</i> node. You can do this by opening
the node by name (via <i>Ctrl-Shift-N</i>) or by navigating there manually, according to the picture
below. Note that you may have to switch to the nicely readable presentation mode via the menu option
<i>Code -> Projection Mode -> Presentation Mode</i>.
<br/>
<br/>
<img src="images/blog/userguide.png"/>
</p>
</div>
<div class="span1"> </div>
</div>
</div>
<hr/>
<h2>Overview Material</h2>
<div class="container">
<div class="container">
<div class="span7">
<p align="justify">
<a href='files/mbeddroverviewslides-ii.pdf'>High-Level
Overview</a>: (EN) A PDF (from Powerpoint) describing the overall mbeddr idea, includes a
lot of screenshots of example code.
</p>
<p align="justify">
<a href='files/mbeddr-flyer-2013.pdf'>Two-Page Flyer</a>: (EN) A
two-page English flyer used at expos and trade fairs.
</p>
</div>
<div class="span1"> </div>
</div>
</div>
<hr/>
<h2 id="papers">Books</h2>
<div class="container">
<div class="container">
<div class="span7">
<p align="justify">
<a href='http://voelter.de/data/books/GenericToolsSpecificLanguages-1.0-web.pdf'>Generic Tools, Specific Languages</a>
Markus' PhD thesis addresses an approach for building domain-specific tools based on language engineering
and language workbenches. The main example of the approach is mbeddr. It is covered in detail. [<a href='http://voelter.de/data/books/GenericToolsSpecificLanguages-1.0-web.pdf'/>pdf</a>]
</p>
</div>
<div class="span1"> </div>
</div>
</div>
<hr/>
<h2 id="papers">Published Papers</h2>
<div class="container">
<div class="container">
<div class="span7">
<h3 style="color:black">Experience</h3>
<p align="justify">
<a href='/files/dasia_wortmann.pdf'>Domain-Specific Languages for Efficient Satellite Control Software Development</a>
(DASIA 2016, Andreas Wortmann, OHB): We present the motivation and an approach for the
efficient development of satellite control software
(flight software, onboard software) based on domain
specific languages. Significant technological advances
in the field of language workbenches have enabled us to
develop extensions to the C programming language
specific to the needs of satellite flight software. The
approach is very promising as it combines the flexibility
and efficiency of the C language with high-level
abstractions known from modeling-tools and allows for
additional adaptation specific to the space domain.
[<a href='/files/dasia_wortmann.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='/files/mbeddr-cs-oopsla2015-preprint.pdf'>Using C Language Extensions for Developing Embedded Software - A Case Study</a>
(OOPSLA 2015): This paper is a detailed report on our experience of building the Smart Meter with mbeddr.
[<a href='/files/mbeddr-cs-oopsla2015-preprint.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='/files/modern_mbd_for_embedded_systems.pdf'>Modern model-based development approach for embedded systems - Practical Experience</a>
(International Symposium on Systems Engineering): This paper is a case study of the use of mbeddr for developing rail/train systems, written by Siemens CT.
[<a href='/files/modern_mbd_for_embedded_systems.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='/files/mbees2014.pdf'>Preliminary Experience of using mbeddr for Developing Embedded Software</a>
(MBEES Workshop, 2014): In this paper we discuss our experience so far with using mbeddr to develop real systems. The
paper discusses several different systems, including the Smart Meter project by itemis France.
[<a href='files/mbees2014.pdf'/>pdf</a>]
</p>
<h3 style="color:black">General/Language Engineering</h3>
<p align="justify">
<a href='files/sqj_2017.pdf'>Automated Testing of DSLs Implementations: Experiences from Building mbeddr</a>
(Software Quality Journal - SQJ, 2017):
We discuss in detail different techniques that we developed and applied for testing domain specific languages and tooling developed with MPS.
The main message of this paper is that modern stacks of DSLs need holistic testing of the front-end
(e.g. editors, typing rules, constraints), of the back-end (e.g. generators) and of associated tooling (e.g. debuggers,
analyzers). We share our experiences and lessons learnt based on the mbeddr technology stack.
[<a href='files/sqj_2017.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/sosym_2017.pdf'>Lessons Learned from Developing mbeddr - A Case Study in Language Engineering with MPS</a>
(Journal on Software and Systems Modeling - SoSyM, 2017):
Lessons learnt from developing mbeddr, one of the largest existing eco-systems of domain specific languages.
We share our experiences and lessons learnt.
[<a href='files/sosym_2017.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/gc-sle.pdf'>Efficient Development of Consistent Projectional Editors using Grammar Cells</a>
(Software Language Engineering, 2016):
In this paper we provide an overview over the grammar cells and their implementation. The contributions of
this paper advance the state-of-the-art in projectional editors by providing a more text-editor like and consistent editor behaviour.
The paper addresses the limitations identified in our previous paper 'Towards Usable Projectional Editors'.
[<a href='files/gc-sle.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/exe-debugger-2016.pdf'>Interactive Debugging for Extensible Languages in Multi-Stage Transformation Environments</a>
(International Workshop on Executable Modeling, co-located with MODELS, 2016):
In this paper we present our approach to build extensible domain specific debuggers at different levels of abstraction:
directly at the domain level for end-users and at different intermediate levels for language engineers in order to support them
with the debugging of model transformations.
[<a href='files/exe-debugger-2016.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/inca-ase.pdf'>IncA: A DSL for the Definition of Incremental Program Analyses</a>
(Automated Software Engineering, 2016):
This paper present the IncA project which is a framework for the definition and efficient execution of incremental program analyses.
We used IncA to develop several real-world case studies including control flow and points-to analyses for C, well-formedness checks for DSLs, and
FindBugs analyses for Java. Our evaluation based on real-world code bases shows that incrementalization can provide considerable speedups, and it
can make even complex analyses feasible to be executed in a real-time fashion in the IDE.
[<a href='files/inca-ase.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/mps-df-ase.pdf'>An Extensible Framework for Variable-Precision Data-Flow Analyses in MPS</a>
(Automated Software Engineering, 2016):
This tool paper presents the data-flow support of MPS. It gives details on the modular architecture of the tool and
elaborates on the support for inter-procedural analyses. The two key characteristics are variable-precision and extensibility.
The former one means that analysis developers can easily trade off precision for runtime performance and/or memory use thus tailoring an
analysis to a particular use case. The latter one mean that analyses, similar to languages, are extensible, and making an analysis work
on language compositions requires only minimal additional effort.
[<a href='files/mps-df-ase.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/gc-sle.pdf'>Efficient Development of Consistent Projectional Editors using Grammar Cells</a>
(Software Language Engineering, 2016):
In this paper we provide an overview over the grammar cells and their implementation. The contributions of
this paper advance the state-of-the-art in projectional editors by providing a more text-editor like and consistent editor behaviour.
The paper addresses the limitations identified in our previous paper 'Towards Usable Projectional Editors'.
[<a href='files/gc-sle.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href="files/ada2015_debuggers.pdf">Extensible Debuggers
for Extensible Languages</a> (Ada-Europe 2015): This is an extension of the paper with the same title
published at WSR in 2013. This paper discusses the implementation of the debugger for complex DSLs from
the mbeddr stack.
[<a href='files/ada2015_debuggers.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/exe-debugger-2015.pdf'>Testing Extensible Language Debuggers</a>
(International Workshop on Executable Modeling, co-located with MODELS, 2015):
This paper presents DeTeL - an extensible domain specific language to test domain specific debuggers.
This language is used extensively for testing the mbeddr debugger.
[<a href='files/exe-debugger-2015.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/ieee_software_2015.pdf'>Projecting a Modular Future</a> (IEEE Software, 2015):
We present two recent innovations in domain specific languages: languages modularity which offers the capability
to combine two independently developed languages without changing their definitions and projectional editors which
allow the definition and combination of rich notations like textual, graphical, tabular or mathematical.
We illustrate how we used these advantages in order to build the mbeddr stack of domain specific languages.
[<a href='files/ieee_software_2015.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/gemoc2014-MPSNotations.pdf'>Supporting Diverse Notations with MPS' Projectional Editor</a>
(GEMOC 2014 Workshop):
In this paper we provide an overview over the notations
supported by JetBrains MPS, including text, prose, math tables and graphics.
The various supported notations are illustrated with examples from real-world systems,
most of them are taken from mbeddr.
[<a href='files/gemoc2014-MPSNotations.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/voelteretal-mbeddr-final.pdf'>mbeddr: Instantiating a Language Workbench in the Embedded Software Domain</a>
(Journal of Automated Software Engineering, 2013): This is our most comprehensive publication so far, providing
a detailed look at mbeddr. In contrast to the next paper, it looks at mbeddr more from a tooling perspective
(less from language engineering) and also contains some preliminary experience of using mbeddr. [<a href='files/voelteretal-mbeddr-final.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/wavefront-updatedsubmission2.pdf'>mbeddr: an
Extensible C-based Programming Language and IDE for Embedded Systems</a> (SplashCON/Wavefront 2012): This paper provides a general overview over mbeddr, emphasizing the
language engineering perspective. It details some of the challenges for embedded software
development, and how mbeddr addresses them. [<a href='files/wavefront-updatedsubmission2.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href="files/wsr2013_debuggers.pdf">Extensible Debuggers
for Extensible Languages</a> (WSR 2013 Workshop): Language workbenches
significantly reduce the effort for building extensible languages. However, they do not
facilitate programmers with built-in debugging support for language extensions. This paper
presents an extensible debugger architecture that enables debugging of language extensions. This
is established by defining mappings between the base language and the language extensions. We
show an implementation of our approach for the mbeddr language workbench. [<a href='files/wsr2013_debuggers.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/tomassettiratiu-extractingvariabilityfromcandliftingittombeddr.pdf'>Extracting
variability from C and lifting it to mbeddr</a> (REVE 2013 Workshop): In this
paper we describe approaches for lifting textual C code into mbeddr, understanding product-line
variability expressed with preprocessor statements and factoring it into mbeddr's feature
models. [<a href='files/tomassettiratiu-extractingvariabilityfromcandliftingittombeddr.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/voeltertomassetti-requirementsinmbeddr.pdf'>Requirements
as First-Class Citizens</a> (MBEES 2013 Workshop): In this paper we discuss
mbeddr's approach to requirements engineering including: requirements themselves, paritial
formalization of requirements using DSLs embedded in requirements, CRC-card-like high-level
architectures and tracing from implementation artifacts to requirements and other "trace
targets". [<a href='files/voeltertomassetti-requirementsinmbeddr.pdf'/>pdf</a>, <a href='files/bibs/voeltertomassetti-requirementsinmbeddr.bib'/>bib</a>]
</p>
<h3 style="color:black">Verification/Safety</h3>
<p align="justify">
<a href='files/spin_2017.pdf'>Increasing Usability of Spin-based C Code Verification Using a Harness Definition Language</a>
(24th International SPIN Symposium on Model Checking of Software): This paper describes the integration of the Spin model checker in mbeddr and shows how do DSLs from mbeddr increase the usability of the verification of C-code (approach known as 'model driven code checking').
[<a href='files/spin_2017.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/2016_carlan_bmc_assurance_case.pdf'>On Using Results of Code-level Bounded Model Checking in Assurance Cases</a>
(4th International Workshop on Assurance Cases for Software-intensive Systems): This paper describes our preliminary experience with using
the CBMC model checker and the mbeddr environment to verify three
safety-critical software components.
[<a href='files/ratiu_etal_safety_lab.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/ratiu_etal_safety_lab.pdf'>Safety.Lab: Model-based Domain Specific Tooling for Safety Argumentation</a>
(3rd International Workshop on Assurance Cases for Software-intensive Systems): This paper describes a set of DSLs
for safety analysis, integrated with mbeddr, built by Siemens CT.
[<a href='files/ratiu_etal_safety_lab.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/ratiu_nimal_verification_case.pdf'>Verification-Cases: Characterizing the Completeness Degree of Incomplete Verification for C Programs</a>
(Verification and Assurance Workshop): This paper introduces the notion of Verification Cases as a means to make explicit the incomplete parts of verification.
[<a href='files/ratiu_nimal_verification_case.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/mbeddr_hilt2014.pdf'>mbeddr - Extensible languages for embedded software development</a>
(HILT 2014): This paper is an overview of the mbeddr features and toolset mainly focusing on the applications
for safety-critical domains. It points out how the various extensible modules could be used to create high-integrity and robust systems.
[<a href='files/mbeddr_hilt2014.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/dscv-ase2014.pdf'>Automated Domain-Specific C Verification with mbeddr</a>
(ASE 2014): This is the definitive paper on integrating C-level verification tools into mbeddr in a user-friendly
way. It contains examples from the Pacemaker Challenge.
[<a href='files/dscv-ase2014.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/nfm2013.pdf'>Using Language Engineering to
Lift Languages and Analyses at the Domain Level</a> (NASA Formal Methods
Symposium 2013): In this paper we discuss how we integrate the static checking of pre- and
postconditions as well as protocol checking (based on C-level model checking) into mbeddr. [<a href='files/nfm2013.pdf'/>pdf</a>, <a href='files/bibs/nfm2013.bib'/>bib</a>]
</p>
<p align="justify">
<a href='files/formsera2012.pdf'>Language Engineering as an
Enabler for Incrementally Defined Formal Analyses</a> (FORMSERA 2012 Workshop):
In this paper we discuss our approach for integrating formal verification into the development
process. The approach relies on using language extension to provide meaningful abstractions
directly in the language, avoiding the need to "reverse engineer" the semsntics from low-level
implementation code. We show two examples for formal verification in mbeddr. [<a href='files/formsera2012.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/modevva2012.pdf'>Implementing Modular Domain
Specific Languages and Analyses</a> (accepted at Modevva 2012 Workshop; Best Paper and Best
Presentation Awards): In this paper we discuss how language engineering makes the implementation
of formal analyses simpler by reusing the same core language in several DSLs. By hooking the
verification onto the single core language, we can get verification support for several DSLs
with very limited effort. [<a href='files/modevva2012.pdf'/>pdf</a>, <a href='files/bibs/modevva2012.bib'/>bib</a>]
</p>
<h3 style="color:black">Usability</h3>
<p align="justify">
<a href='files/projectionalEditing-sle2014.pdf'>Towards Usable Projectional Editors</a>
(SLE 2014): In this paper we discuss how MPS has improved the usability of the projectional editor
over the last few years. This is obviously very relevant to (prospective) mbeddr users as well. The paper
includes a survey of ca. 20 MPS/mbeddr users. [<a href='files/projectionalEditing-sle2014.pdf'/>pdf</a>]
</p>
</div>
<div class="span1"> </div>
</div>
</div>
<hr/>
<h2>Case Studies</h2>
<div class="container">
<div class="container">
<div class="span7">
<p align="justify">
This section collects (over time) a set of example applications developed with mbeddr as a means
to illustrate its capabilities.
</p>
<p align="justify">
<a href='files/mbeddr_casestudy_asic.pdf'>ASIC Testing:</a>
This case study describes how Daniel Stieger from <a href="http://modellwerkstatt.org">die
modellwerkstatt</a> and Michael Gau from <a href="http://bachmann.info">Bachmann electronics</a>
built a DSL and a C generator for testing ASICs. [<a href='files/mbeddr_casestudy_asic.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/mbeddr_casestudy_smartmeter.pdf'>SmartMeter:</a>
This case study describes a real-world commercial development project for a Smart Meter
application. It runs on a custom processor, requires a different compiler, makes use of several
of the mbeddr default extensions and also uses a set of project-specific language extensions. [<a href='files/mbeddr_casestudy_smartmeter.pdf'/>pdf</a>]
</p>
<p align="justify">
<a href='files/mbeddr_casestudy_mindstorms.pdf'>Lego
Mindstorms</a> This case study is the original demo we built with mbeddr. Although a Lego
Mindstorms robot seems like a joke, the case study used the OSEK operating system and contains
interesting C extensions for OSEK. [<a href='files/mbeddr_casestudy_mindstorms.pdf'/>pdf</a>]
</p>
</div>
<div class="span1"> </div>
</div>
</div>
<hr/>
<h2>Other Publications</h2>
<div class="container">
<div class="container">
<div class="span7">
<p align="justify">
In this section we list other publications, typically contributed to online or print magazines.
</p>
<p align="justify">
<a href='http://www.elektronikpraxis.vogel.de/themen/embeddedsoftwareengineering/softwarekomponenten/articles/394621/'>mbeddr:
Embedded-Entwicklung mit erweiterbarem C</a> (ElektronikPRAXIS) Ein deutschsprachiger
Überblick über mbeddr.
</p>
<p align="justify">
<a href='http://www.heise.de/developer/artikel/mbeddr-Embedded-Entwicklung-mit-erweiterbarem-C-1647220.html'>Sprachschöpfer:</a>
(bei heise developer) Noch ein deutschsprachiger Überblick über mbeddr.
</p>
<p align="justify">
<a href='http://www.infoq.com/presentations/mbeddr-C'>mbeddr C:</a> (at InfoQ) This is a
recording of a presentation from the Code Generation 2012 conference in cambridge, providing an
overview over mbeddr.
</p>
</div>
<div class="span1"> </div>
</div>
</div>
<hr/>
<h2>MPS Documentation</h2>
<div class="container">
<div class="container">
<div class="span7">
<p align="justify">
Since mbeddr relies on JetBrains MPS for the language engineering, learning about MPS itself is also
useful for those people who want to extend mbeddr with their own languages. The <a href="http://www.jetbrains.com/mps/documentation/">MPS documentation page</a> contains an extensive
list of links to various documentation artifacts. Not all of them are up to date. Hence we refer to a
few specific ones below:
</p>
<p align="justify">
The <a href="http://confluence.jetbrains.com/display/MPSD31/Shapes+-+an+introductory+MPS+tutorial">Shapes</a> tutorial
explains how to build a simple language in under two hours. It is a good first contact with MPS language engineering.
</p>
<p align="justify">
<a href="http://physiology.med.cornell.edu/faculty/profile.php?id=campagne">Fabien Campagne's</a> book on MPS
is now <a href="https://play.google.com/store/books/details/Fabien_Campagne_The_MPS_Language_Workbench?id=nvcEAwAAQBAJ">available on Google Play Books</a>.
It is a comprehensive introduction to the MPS language workbench.
</p>
<p align="justify">
<a href="http://www.voelter.de">Markus Voelter's</a> book on <a href="http://dslbook.org/">DSL Engineering</a> contains
a detailed discussion of the concepts behind MPS in its Part III on language implementation. It is less detailed than
Fabien's book, but also covers advanced aspects such as language modularization and composition.
</p>
</div>
<div class="span1"> </div>
</div>
</div>
</div>
</div>
<div id="extra">
<div id="intro">
<div class="container">
</div>
</div>
<div class="inner">
<div class="container">
<div class="row">
<div class="span6">
<ul class="footer-links clearfix">
<li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="http://www.eclipse.org/legal/">Legal</a></li>
</ul>
<ul class="footer-links clearfix">
<li><a href="benefits.html">Key characteristics and benefits.</a></li>
<li><a href="learn.html#overview">Read and Learn: Papers.</a></li>
<li><a href="screencasts.html">Watch and Learn: Screencasts.</a></li>
<li><a href="learn.html#cs">See how it's used: Case Studies.</a></li>
</ul>
</div>
<div class="span6">
<ul class="footer-links clearfix">
<li><a href="download.html">Download and Try.</a></li>
<li><a href="download.html">Adapt and Extend.</a></li>
<li><a href="news.html">Read the Blog.</a></li>
<li><a href="faq.html">Read the FAQ.</a></li>
</ul>
<ul class="footer-links clearfix">
<li><a href="support.html">Contact the team.</a></li>
<li><a href="support.html">Get Help.</a></li>
<li><a href="http://dslbook.org">Learn about Language Engineering.</a></li>
<li><a href="http://jetbrains.com/mps">Download MPS.</a></li>
</ul>
</div>
</div>
<br/>
</div>
</div>
<div id="intro">
<div class="container">
</div>
</div>
</div>
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="js/bootstrap-transition.js"></script>
<script src="js/bootstrap-alert.js"></script>
<script src="js/bootstrap-modal.js"></script>
<script src="js/bootstrap-dropdown.js"></script>
<script src="js/bootstrap-scrollspy.js"></script>
<script src="js/bootstrap-tab.js"></script>
<script src="js/bootstrap-tooltip.js"></script>
<script src="js/bootstrap-popover.js"></script>
<script src="js/bootstrap-button.js"></script>
<script src="js/bootstrap-collapse.js"></script>
<script src="js/bootstrap-carousel.js"></script>
<script src="js/bootstrap-typeahead.js"></script>
<!-- Include the plug-in -->
<script src="js/jquery.easing.1.3.js" type="text/javascript"></script>
<script src="js/custom.js" type="text/javascript"></script>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/761475.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
</html>