
When carefully selected and used, Domain-Specific Languages (DSLs) may simplify complex code, promote effective communication with customers, improve productivity, and unclog development bottlenecks. In Domain-Specific Languages, noted software development expert Martin Fowler first provides the information software professionals need to decide if and when to utilize DSLs. Then, where DSLs prove suitable, Fowler presents effective techniques for building them, and guides software engineers in choosing the right approaches for their applications. This book’s techniques may be utilized with most modern object-oriented languages; the author provides numerous examples in Java and C#, as well as selected examples in Ruby. Wherever possible, chapters are organized to be self-standing, and most reference topics are presented in a familiar patterns format. Armed with this wide-ranging book, developers will have the knowledge they need to make important decisions about DSLs—and, where appropriate, gain the significant technical and business benefits they offer. The topics covered include: • How DSLs compare to frameworks and libraries, and when those alternatives are sufficient • Using parsers and parser generators, and parsing external DSLs • Understanding, comparing, and choosing DSL language constructs • Determining whether to use code generation, and comparing code generation strategies • Previewing new language workbench tools for creating DSLs
If you're interested in the subject, then I'd recommend Martin Fowler's excellent book: http://martinfowler.com/books/dsl.html
Where do you think Logo and Snap fit into the three basic mental structures of psychosis, perversion, and neurosis, as W Watson describes in "The Pervert's Guide to Programming Languages"?
https://news.ycombinator.com/item?id=22910702
https://www.youtube.com/watch?v=mZyvIHYn2zk
https://s3-us-west-2.amazonaws.com/vulk-blog/ThePervertsGuid...
I have hope that Snap! has transcended the self-indulgent Turing Tarpit of Melancholy Languages like Scheme, Lisp (which spawned Scheme during a hysterical event), Smalltalk, and languages that never were, as described on the penultimate page. ;)
Snap! strikes me more as a Hysterical language, frantically pursuing the object of desire, in pursuit of the perfect syntax.
>Hysterical Languages: Hysterical development lends itself to languages that facilitate endless refinements in the code base. The delivered code is never good enough, not merely because of pragmatic reasons but often because of ascetic reasons. The final goal of capturing the elusive domain jargon [59] seems just around the corner, where just one refinement may perfectly represent the domain. Within the hysterical languages there can be two extremes. One extreme is to work towards the capability to easily represent any aesthetic. In this extreme the work and enjoyment are in the development of the language itself [60]. The other extreme is to consciously implement the aesthetic using the language as is [61]. This extreme bends the language to look more aesthetically pleasing. Somewhere in between are refinements to extremely large code bases that must stay available.
>[59] “The overhead cost of all the translation, plus the risk of misunderstanding, is just too high. A project needs a common language that is more robust than the lowest common denominator. With a conscious effort by the team, the domain model can provide the backbone for that common language, while connecting team communication to the software implementation. That language can be ubiquitous in the team’s work.”, Evans, Eric (2003-08-22). Domain-Driven Design: Tackling Complexity in the Heart of Software (Kindle Locations 829-832). Pearson Education. Kindle Edition.
>[60] “Also, I’m a great fan of evolving as opposed to just starting out new. You might fall in love with one particular idea, and then in order to implement it, you go create a brand-new language that’s great at this new thing. Then, by the way, the 90% that every language must have, it kind of sucks at. There’s just so much of that, whereas if you can evolve an existing language — for example, with C# most recently we’ve really evolved it a lot toward functional programming — it’s all gravy at that point, I feel.”, Biancuzzi, Federico; Chromatic (2009-03-21). Masterminds of Programming: Conversations with the Creators of Major Programming Languages (Theory in Practice (O'Reilly)) (Kindle Locations 7017-7021). O'Reilly Media. Kindle Edition.
>[61] “A big part of the modus operandi of the Ruby community is a more fluent approach— trying to make interacting with a library feel like programming in a specialized language. This is a strand of thinking that goes back to one of oldest programming languages, Lisp.”, Fowler, Martin (2010-09-23). Domain-Specific Languages (Addison-Wesley Signature Series (Fowler)) (Kindle Locations 473-475). Pearson Education (USA). Kindle Edition.
Here are the top 10:
#1 Design Patterns - Ralph Johnson, Erich Gamma, John Vlissides, Richard Helm
#2 Clean Code - Robert C. Martin
#3 The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie
#4 CLR Via C# - Jeffrey Richter
#5 Modern C++ Design - Andrei Alexandrescu
#6 Large-scale C++ Software Design - John Lakos
#7 Inside the Microsoft Build Engine - Sayed Ibrahim Hashimi, William Bartholomew
#8 Programming Microsoft ASP.NET 2.0 core reference - Dino Esposito
#9 Compilers - Alfred V. Aho
#10 Accelerated C++ - Andrew Koenig, Barbara E. Moo
Ok, #9 is a sensible choice. The rest are not about compiler construction.Now, the top 20:
#11 Hacker's Delight - Henry S. Warren
#12 Nos camarades Français - Elida Maria Szarota (actually The C++ Programming Language by Stroustrup)
#13 Compilers - Alfred V. Aho, Ravi Sethi
#14 Inside the C++ Object Model
#15 Code - Charles Petzold
#16 Hacking, 2nd Edition - Jon Erickson
#17 C Plus Plus Primer - Stanley B. Lippman, Josée Lajoie, Barbara E. Moo
#18 C Interfaces and Implementations - David R. Hanson
#19 Language Implementation Patterns - Terence Parr
#20 LISP in Small Pieces - Christian Queinnec
Ok, #13 and #19 look relevant. The rest... not so much, at least by a quick skim.Here are the top 30:
#21 Linkers and Loaders - John R. Levine
#22 Assembly Language Step-by-Step - Jeff Duntemann
#23 The Garbage Collection Handbook - Richard Jones, Antony Hosking, Eliot Moss
#24 Game Scripting Mastery - Alex Varanese
#25 Domain-specific Languages - Martin Fowler, Rebecca Parsons
#26 Computer Architecture - John L. Hennessy, David A. Patterson
#27 The Elements of Computing Systems - Noam Nisan, Shimon Schocken
#28 The ACE Programmer's Guide - Stephen D. Huston, James C. E. Johnson, Umar Syyid
#29 Modern Compiler Implementation in C - Andrew W. Appel, Maia Ginsburg
#30 Algorithms + Data Structures - Niklaus Wirth
Caveat: I am not a compiler writer, though I have read many of these books. Still, my point stands, a good search engine gives more convincing results. Let me know if I'm missing something.