-
Notifications
You must be signed in to change notification settings - Fork 2
/
faq.html
528 lines (470 loc) · 22.2 KB
/
faq.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
<!DOCTYPE html>
<html lang="en">
<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 id="team" class="container clearfix">
<div class="container">
<h2>Frequently Asked Questions</h2>
<div class="span7" id="faq">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#why">
Why are you doing this?
</a>
</div>
<div id="why" class="accordion-body collapse">
<div class="accordion-inner">
We believe that, while C is a powerful and efficient language, it does not provide adequate support for
defining higher level abstractions. We feel that language extension is the way to introduce abstractions
relevant to embedded
software development into C. Initial experience with mbeddr in a <a
href="files/mbeddr_casestudy_smartmeter.pdf">real world project</a>
confirms this belief.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#extensions">
What are some of the available extensions to C?
</a>
</div>
<div id="extensions" class="accordion-body collapse">
<div class="accordion-inner">
Examples include components (incl. interfaces with pre- and postconditions, ports and connectors), data
types with physical units (as in 300 km/h) and state machines. Many smaller but very useful extensions, such
as counters and decision tables are also supported. Support for cross-cutting concerns such as requirements
tracing and product line variability are available as well. Additional extensions have been inspired by our
application partners SICK and BMW Car IT, and specifically target use cases encountered in their
domains.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#position">
How do you position this in comparison with other approaches?
</a>
</div>
<div id="position" class="accordion-body collapse">
<div class="accordion-inner">
We perceive the embedded development world as being made up of two camps. One camp uses bare-bones C to
develop highly efficient, low level code. The other camp uses tools such as Matlab/Simulink, Ascet or
similar tools to "model and synthesize" executable software. We position mbeddr in the middle between the
two: you still primarily write code, but with meaningful, customizable abstractions. As a consequence of
tight syntactic, semantic and tool-wise integration between the various languages, tool integration becomes
a no-brainer. This makes mbeddr especially suitable for multi-paradigm programming/modeling, i.e. systems
that use more than one programming/modeling approach.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#lib">
Can't all this be done with libraries?
</a>
</div>
<div id="lib" class="accordion-body collapse">
<div class="accordion-inner">
Libraries don't support custom syntax, static error checking and efficient translation. Language extension
can provide all of these. However, libraries of course still play an important role, we don't claim that
language extension is the solution to all problems. Language extension also makes programs accessible for
meaningful static analysis. Support for model checking or constraint solving is an important ingredient of
the approach.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#macro">
... or with macros?
</a>
</div>
<div id="macro" class="accordion-body collapse">
<div class="accordion-inner">
Macros can provide some of the same efficiency (because they are translated statically). However, you cannot
implement context-specific optimizations, and macros do not come with support for the type system and the
IDE. Experience tells that using macros a lot turns your software into a maintenance nightmare.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#allOfC">
Are you implementing all of C?
</a>
</div>
<div id="allOfC" class="accordion-body collapse">
<div class="accordion-inner">
We are implementing essentially all of C, <a href="news.html#15">with a few differences</a>. There are various reasons for these differences. For some of them, we feel we are
compensating weaknesses of C (int vs. boolean). For others, we exploit the capabilities of MPS and the
generative approach (modules). Yet others just make our lives as implementers more pleasant (arrays and
pointers after type instead of variable name). However, we are generating ANSI C99, so the generated code is
compatible with existing target systems.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#cpp">
What about C++?
</a>
</div>
<div id="cpp" class="accordion-body collapse">
<div class="accordion-inner">
We have started implementing the basics of C++. The challenge with C++ is the type system for templates. We
are not yet sure how far we will be going there; instead of using template meta programming, mbeddr users
can use language extensions to achieve many of the same effects in a more elegant and robust way.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#compiler">
Are you going to write your own compiler?
</a>
</div>
<div id="compiler" class="accordion-body collapse">
<div class="accordion-inner">
No. MPS works by progressively reducing higher abstractions to lower abstractions, leading to ANSI C99 at
the end of the chain. That C code can be compiled with existing compilers. We use GCC currently, but others
can be plugged in.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#debugging">
Do you support debugging?
</a>
</div>
<div id="debugging" class="accordion-body collapse">
<div class="accordion-inner">
mbeddr has a debugger. It supports all of C and most of the existing extensions. When debugging,
users step through the code on the level of the extensions, not the low-level implementation.
Like the mbeddr languages themselves, the debugger is extensible.
The debugger uses the Eclipse CDT Debug Bridge in the backend, so various target platform-specific
debuggers can be plugged in.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#preproc">
How can you build C without a preprocessor?
</a>
</div>
<div id="preproc" class="accordion-body collapse">
<div class="accordion-inner">
The C preprocessor is (mis)used for a number of different things in C, including definition of constants,
visibility management (header files) and expressing variants of programs. We provide first class support for
these use cases in our language. For example, a module system with explicit visibility control is provided.
For expressing code variants, we provide first class support for variant management, incl. static
verification of correctness (see <a href="http://voelter.de/data/pub/DSM2010_VoelterMerkle-11-Final.pdf">this
short paper</a>). Of course we generate C code that makes use of the preprocessor for some of these use
cases, but we don't expose it to users.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#legacy">
What about legacy code?
</a>
</div>
<div id="legacy" class="accordion-body collapse">
<div class="accordion-inner">
<p>
We have an importer for all of C. We are working on a debugger that maps <i>#ifdef</i>s
to product line variability. Unfortunately, the importer uses non-open source technology,
so the importer will not be open source. However, a trial version will become available
later in 2013.
</p>
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#os">
Is it Open Source?
</a>
</div>
<div id="os" class="accordion-body collapse">
<div class="accordion-inner">
mbeddr is open source; you can get it from <a href="download.html">here</a>. It is
licensed under the <a href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License</a>.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#xtext">
Why don't you use Xtext?
</a>
</div>
<div id="xtext" class="accordion-body collapse">
<div class="accordion-inner">
While Xtext is a very good and widely used language workbench, it is also limited in many ways, particularly
regarding language modularization and composition as well as non-textual notations. MPS is a much more
productive environment for working with lots of modular languages.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#eclipse">
How about Eclipse Support?
</a>
</div>
<div id="eclipse" class="accordion-body collapse">
<div class="accordion-inner">
As of now, the system is built on MPS and MPS is not integrated with Eclipse. However, there is an EMF
export for language meta models and programs. JetBrains has also agreed to provide an Eclipse-integrated
version of MPS if this becomes necessary for adoption of mbeddr.
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#textual">
How about Graphical Notations?
</a>
</div>
<div id="textual" class="accordion-body collapse">
<div class="accordion-inner">
Currently all notations used by mbeddr are textual, tabular or symbolic because MPS does not yet support
graphical notations. However, MPS will start providing support for graphical notations in early 2014, and we will
use them for state machines and components as soon as they become available. In the meantime,
mbeddr already supports automatically-generated, read-only visualizations for various extensions based on
graphviz, and a viewer that is directly integrated into MPS and provides drill-down support (double-click an
element in the view, and the editor opens for this element).
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2"
href="#primetime">
Is mbeddr ready for prime time?
</a>
</div>
<div id="primetime" class="accordion-body collapse">
<div class="accordion-inner">
A number of prototypical systems have been built, and a first commercial project is <a
href="http://mbeddr.files.wordpress.com/2010/06/mbeddr_casestudy_smartmeter.pdf">currently being
developed</a>. We are also working with a major tool vendor on a commercial development tool based on mbeddr.
mbeddr is usable, scales well and is stable enough. Some minor usability challenges with MPS still remain, but
these will be fixed until early 2014. In other words: yes, now is the time to seriously
investigate mbeddr.
</div>
</div>
</div>
</div>
<div class="span1"> </div>
</div>
</div>
<br/><br/>
</div>
<div class="span1"> </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>