DSLs in action:
Gespeichert in:
Format: | Buch |
---|---|
Sprache: | English |
Veröffentlicht: |
Greenwich
Manning
2011
|
Schlagworte: | |
Online-Zugang: | Inhaltsverzeichnis |
Beschreibung: | Includes index |
Beschreibung: | XXIV, 351 S. graph. Darst. |
ISBN: | 9781935182450 1935182455 |
Internformat
MARC
LEADER | 00000nam a2200000 c 4500 | ||
---|---|---|---|
001 | BV037268939 | ||
003 | DE-604 | ||
005 | 20180115 | ||
007 | t | ||
008 | 110309s2011 d||| |||| 00||| eng d | ||
020 | |a 9781935182450 |c pbk. |9 978-1-935182-45-0 | ||
020 | |a 1935182455 |c pbk. |9 1-935182-45-5 | ||
035 | |a (OCoLC)707186777 | ||
035 | |a (DE-599)GBV632081872 | ||
040 | |a DE-604 |b ger | ||
041 | 0 | |a eng | |
049 | |a DE-859 |a DE-858 |a DE-522 |a DE-739 |a DE-863 | ||
084 | |a ST 230 |0 (DE-625)143617: |2 rvk | ||
084 | |a ST 240 |0 (DE-625)143625: |2 rvk | ||
245 | 1 | 0 | |a DSLs in action |c Debasish Ghosh |
264 | 1 | |a Greenwich |b Manning |c 2011 | |
300 | |a XXIV, 351 S. |b graph. Darst. | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
500 | |a Includes index | ||
650 | 0 | 7 | |a Domänenspezifische Programmiersprache |0 (DE-588)7585264-0 |2 gnd |9 rswk-swf |
689 | 0 | 0 | |a Domänenspezifische Programmiersprache |0 (DE-588)7585264-0 |D s |
689 | 0 | |5 DE-604 | |
700 | 1 | |a Ghosh, Debasish |e Sonstige |4 oth | |
856 | 4 | 2 | |m HBZ Datenaustausch |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=021181937&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
999 | |a oai:aleph.bib-bvb.de:BVB01-021181937 |
Datensatz im Suchindex
DE-BY-863_location | 1340 |
---|---|
DE-BY-FWS_call_number | 1340/ST 240 G427 |
DE-BY-FWS_katkey | 412646 |
DE-BY-FWS_media_number | 083101362873 |
_version_ | 1806176086742007808 |
adam_text | Titel: DSLs in action
Autor: Ghosh, Debasish
Jahr: 2011
contents
foreword xiii
preface xv
acknowledgments xvii
about the book xix
Part I Introducing domain-specific languages.....1
1 Learning to speak the language of the domain 3
1.1 The problem domain and the solution domain 4
The problem domain 4 The solution domain 4
1.2 Domain modeling: establishing a common vocabulary 6
Benefits of a common vocabulary 7
1.3 Introducing DSLs 8
What s aDSL? 10 Popular DSLs in use 12
Structure of a DSL 14
1.4 Execution model of a DSL 15
1.5 Classifying DSLs 17
Internal DSLs 18 * External DSLs 18
Nontextual DSLs 19
1.6 When do you need a DSL? 20
The advantages 20 * The disadvantages 21
1.7 DSLs and abstraction design 22
1.8 Summary 23
1.9 References 24
2 The DSL in the wild 25
2.1 Building your first Java DSL 26
Setting up the common vocabulary 27 * Your first
Java implementation 28
2.2 Making friendlier DSLs 32
Externalizing the domain with XML 32 ¦ Groovy:
a more expressive implementation language 33
Executing the Groovy DSL 35
2.3 DSL implementation patterns 36
Internal DSL patterns: commonality and variability 37
External DSL patterns: commonality and variability 45
2.4 Choosing DSL implementations 50
2.5 Summary 52
2.6 References 53
3 DSL-driven application development 54
3.1 Exploring DSL integration 55
Why you should care about DSL integration 56
3.2 Internal DSL integration patterns 58
Using the Java 6 scripting engine 60 * Using a DSL
wrapper 64 * Language-specific integration
features 73 * Spring-based integration 75
3.3 External DSL integration patterns 76
3.4 Handling errors and exceptions 78
Naming an exception 79 ¦ Handling incorrect typing errors 80
Handling exceptional business conditions 81
3.5 Managing performance 82
3.6 Summary 83
3.7 References 84
Part II Implementing DSLs 85
4 Internal DSL implementation patterns 87
4.1 Filling your DSL toolbox 88
4.2 Embedded DSLs: patterns in metaprogramming 90
Implicit context and Smart APIs 91 * Reflective
metaprogramming with dynamic decorators 96
Reflective metaprogramming with builders 102
Lessons learned: metaprogramming patterns 105
4.3 Embedded DSLs: patterns with typed abstractions 106
Higher-order functions as generic abstractions 106
Using explicit type constraints to model domain logic 113
Lessons learned: thinking in types 117
4.4 Generative DSLs: boilerplates for runtime
generation 118
How generative DSLs work 118* Ruby metaprogramming
for concise DSL design 119
4.5 Generative DSLs: macros for compile-time code
generation 122
Metaprogramming with Clojure 122* Implementing the
domain model 123* The beauty of Clojure macros 125
4.6 Summary 126
4.7 References 127
5 Internal DSL design in Ruby, Groovy, and Clojure 128
5.1 Making DSLs concise with dynamic typing 129
Readability 130 * Duck typing 131 * Metaprogramming-
again! 133 * Why Ruby, Groovy, and Clojure? 134
5.2 A trade-processing DSL in Ruby 135
Getting started with an API 136 * A little bit of
monkey-patching 139 ¦ Rolling out a DSL interpreter 140
Adding domain rules as decorators 143
5.3 The order-processing DSL: the final frontier in
Groovy 148
The order-processing DSL so far 148* Controlling the scope of
metaprogramming 149* Rounding it off 152
5.4 Thinking differently in Clojure 153
Building a domain object 154 * Enriching domain objects
using decorators 155 * A DSL session at the REPL 161
5.5 Recommendations to follow 162
Honor the principle of least complexity 162* Strive for optimal
expressivity 162 * Avoid diluting the principles of well-designed
abstractions 163 * Avoid language cacophony 163
5.6 Summary 164
5.7 References 165
6 Internal DSL design in Scala 166
6.1 Why Scala? 167
6.2 Your first step toward a Scala DSL 169
Testing Java objects with a Scala DSL 169 * Scala DSL
as a wrapper for Java objects 170 * Modeling noncritical
functionality as a Scala DSL 170
6.3 Let s DSL in Scala! 170
Expressive syntax on the surface 171 * Creating domain
abstractions 172
6.4 Building a DSL that creates trades 175
Implementation details 177 * Variations in DSL
implementation patterns 181
6.5 Modeling business rules with a DSL 182
Pattern matching as an extensible Visitor 183 * Enriching
the domain model 184* Calculating tax and fee business
rules in a DSL 187
6.6 Stitching em all together 190
More abstraction with traits and types 190* Making domain
components concrete 192
6.7 Composing DSLs 193
Composing using extensions 194 * Composing different
DSLs using hierarchical composition 199
6.8 Monadic structures in DSL 203
6.9 Summary 208
6.10 References 209
7 External DSL implementation artifacts 211
7.1 Anatomy of an external DSL 212
The simplest option first 212 * Abstracting the
domain model 213
7.2 The role of a parser in designing an external DSL 217
Parsers and parser generators 217* Syntax-directed
translation 219
7.3 Classifying parsers 225
Simple top-down parsers 226 * Advanced top-down
parsers 228 * Bottom-up parsers 229
7.4 Tool-based DSL development with Xtext 231
Grammar rules and the outline view 232 * The metamodel
for your grammar 233* Generating code for the
semantic model 236
7.5 Summary 238
7.6 References 239
8 Designing external DSLs using Scala parser combinators 241
8.1 Parser combinators 242
What are parser combinators? 243 * Designing DSLs the
parser combinator way 244
8.2 The Scala parser combinator library 246
The base abstractions in the parser combinator library 247
The combinators that glue parsers together 248 * Monads for
DSL parser composition 252 * Packrat parsing for left
recursive DSL syntax 254
8.3 DSL design with parser combinators: step-by-step 257
Step 1: Executing the grammar 258 * Step 2: Building the
semantic model for the DSL 259* Step 3: Designing the
Order abstraction 260 * Step 4: Generating the AST using
function application combinators 261
8.4 A DSL that needs a packrat parser 264
Introducing the domain problem 264 * Building the
grammar 266 * Designing the semantic model 268
Parser composition for extending DSL semantics 270
8.5 Summary 272
8.6 References 273
Part III Future trends in DSL development .........275
9 DSL design: looking forward 277
9.1 Growing language support for DSL design 278
Striving to be expressive 279* More power with
metaprogramming 281 * s-expressions instead of XML as the
carrier 281 * Parser combinators becoming more popular 282
9.2 DSL workbenches 282
What s in a DSL workbench? 283 * The advantages of
using a DSL workbench 284
9.3 More tool support 285
9.4 The mature evolution of a DSL 286
Versioning your DSL 286 * Best practices for a
smoother evolution of DSL 287
9.5 Summary 289
9.6 References 290
appendix A Role of abstractions in domain modeling 291
appendix B Metaprogramming and DSL design 311
appendix C A cheat sheet for Ruby s DSL-friendly features 321
appendix D A cheat sheet for Scala s DSL-friendly features 325
appendix E A cheat sheet for Groovy s DSL-friendly features 330
appendix F A cheat sheet for Clojure s DSL-friendly features 333
appendix G Polyglot development 337
index 341
|
any_adam_object | 1 |
building | Verbundindex |
bvnumber | BV037268939 |
classification_rvk | ST 230 ST 240 |
ctrlnum | (OCoLC)707186777 (DE-599)GBV632081872 |
discipline | Informatik |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>01319nam a2200349 c 4500</leader><controlfield tag="001">BV037268939</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20180115 </controlfield><controlfield tag="007">t</controlfield><controlfield tag="008">110309s2011 d||| |||| 00||| eng d</controlfield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781935182450</subfield><subfield code="c">pbk.</subfield><subfield code="9">978-1-935182-45-0</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">1935182455</subfield><subfield code="c">pbk.</subfield><subfield code="9">1-935182-45-5</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)707186777</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)GBV632081872</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">eng</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-859</subfield><subfield code="a">DE-858</subfield><subfield code="a">DE-522</subfield><subfield code="a">DE-739</subfield><subfield code="a">DE-863</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 230</subfield><subfield code="0">(DE-625)143617:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 240</subfield><subfield code="0">(DE-625)143625:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">DSLs in action</subfield><subfield code="c">Debasish Ghosh</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Greenwich</subfield><subfield code="b">Manning</subfield><subfield code="c">2011</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">XXIV, 351 S.</subfield><subfield code="b">graph. Darst.</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">n</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">nc</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">Includes index</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Domänenspezifische Programmiersprache</subfield><subfield code="0">(DE-588)7585264-0</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="689" ind1="0" ind2="0"><subfield code="a">Domänenspezifische Programmiersprache</subfield><subfield code="0">(DE-588)7585264-0</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2=" "><subfield code="5">DE-604</subfield></datafield><datafield tag="700" ind1="1" ind2=" "><subfield code="a">Ghosh, Debasish</subfield><subfield code="e">Sonstige</subfield><subfield code="4">oth</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">HBZ Datenaustausch</subfield><subfield code="q">application/pdf</subfield><subfield code="u">http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=021181937&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="999" ind1=" " ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-021181937</subfield></datafield></record></collection> |
id | DE-604.BV037268939 |
illustrated | Illustrated |
indexdate | 2024-08-01T11:15:44Z |
institution | BVB |
isbn | 9781935182450 1935182455 |
language | English |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-021181937 |
oclc_num | 707186777 |
open_access_boolean | |
owner | DE-859 DE-858 DE-522 DE-739 DE-863 DE-BY-FWS |
owner_facet | DE-859 DE-858 DE-522 DE-739 DE-863 DE-BY-FWS |
physical | XXIV, 351 S. graph. Darst. |
publishDate | 2011 |
publishDateSearch | 2011 |
publishDateSort | 2011 |
publisher | Manning |
record_format | marc |
spellingShingle | DSLs in action Domänenspezifische Programmiersprache (DE-588)7585264-0 gnd |
subject_GND | (DE-588)7585264-0 |
title | DSLs in action |
title_auth | DSLs in action |
title_exact_search | DSLs in action |
title_full | DSLs in action Debasish Ghosh |
title_fullStr | DSLs in action Debasish Ghosh |
title_full_unstemmed | DSLs in action Debasish Ghosh |
title_short | DSLs in action |
title_sort | dsls in action |
topic | Domänenspezifische Programmiersprache (DE-588)7585264-0 gnd |
topic_facet | Domänenspezifische Programmiersprache |
url | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=021181937&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT ghoshdebasish dslsinaction |
Inhaltsverzeichnis
THWS Würzburg Teilbibliothek SHL, Raum I.2.11
Signatur: |
1340 ST 240 G427 |
---|---|
Exemplar 1 | nicht ausleihbar Checked out – Rückgabe bis: 28.10.2025 Vormerken |