![](https://csdnimg.cn/release/download_crawler_static/1066851/bg12.jpg)
6 CHAPTER 1. LANGUAGE-DRIVEN DEVELOPMENT
• Translation: languages don’t exist in isolation. They are typically connected to-
gether whether it is done informally or automatically through code generation or
compilation;
• Integration: it is often useful to be able to integrate features from one model or
program into another, e.g. through the use of configuration management.
Languages are the true universal abstractions, and hold the key to managing the chal-
lenges described in section 1.1. This section describes how particular facets of languages
can help to solve the individual problems described above, and how they can combine
to from the holistic solution of Language-Driven Development.
1.2.2 Rich Organised Abstraction
Abstraction has long been used as a means to allow humans to cope with complexity.
Abstraction concerns distilling the essential characteristics of something relative to a
particular perspective of the viewer. The two key ideas here are that some non-essential
details are ignored, and that a particular context needs to be defined in order for the
abstraction to make sense. Often abstraction involves the ‘chunking’ and organisation
of information in a particular problem domain in order to allow the viewer to better
comprehend the problem, by separating concerns. It is this information chunking that
is the fundamental means for overcoming the limited human capacity for complexity,
and languages are the means for capturing abstractions.
Organised abstraction is the key tool that formed the basis of the disciplines of soft-
ware and systems engineering from the outset right through to recent trends in model-
driven development. However, there has been a backlash against modelling and con-
cerns that high-level abstraction doesn’t work for complex large scale systems. This has
come from a recognition that current model-driven technologies have failed to deliver
the increased productivity that was promised. However, we argue that it abstraction is
still a crucial tool - it’s just that the wrong abstractions have been used in the past.
This is partly because there has been a tendency for inappropriate languages to be
used for capturing abstractions - this is covered in section 1.2.3. More significantly,
modelling languages often use ’high-level’ as an excuse to suggest that their abstractions
need not be unambiguous, complete, meaningful or executable. This simply does not
work. Abstraction is a means of hiding detail appropriately from various stakeholders,
but that detail must still be there. Also, if such abstractions have no meaning or its
meaning is ambiguous, then the potential applications on that abstraction are severely
limited - validation, verification, translation, integration, execution and simulation rely
heavily on semantically precise abstractions.
1.2.3 Appropriate Abstraction Through Multiple Languages
Section 1.1.2 highlighted how diversity lies at the heart of modern system development.
Going a step further, we suggest that the challenge really boils down to a diversity of
c
Xactium, 2004.