DSL Engineering Book Reading Notes

Here is my notes reading “DSL Enginnering” by Voelter.


DSL Engineering Book Reading Notes

  1. Advantages of DSL over libraries
    1. Cleanest form of abstraction
    2. Sacrifice the general applicability for productivity and conciseness of relevant programs in the domain
    3. Can do non-trivial static analyses and checks
  2. Benefits of using DSLs
    1. Productivity
      1. vs Library
        1. suitable syntax
        2. static error checking
        3. static optimizations
        4. meaningful IDE support
    2. Quality
      1. fewer bugs
      2. better architectural conformance
      3. increased maintainability
      4. Achieved because
        1. removal of (unnecessary) degrees of freedom for programmers
        2. avoidance of duplication of code
        3. consistent automation of repetitive work 
    3. Validation and Verification
    4. Data Longevity
      1. independent of specific implementation techniques
    5. A thinking and communication tool
      1. communication with the domain experts
    6. Domain Expert Involvement
    7. No runtime overhead
      1. generating source code from DSL, then we can use domain specific abstractions without paying any runtime overhead, because the generator, just like a compiler, can remove the abstractions and generate efficient code. 
    8. Platform independence

Design Dimensions

  1. Expressivity
    1. shorter code
    2. more readily accessible to processing tools
  2. Coverage
    1. reason about with a coverage ratio
  3. Semantics and Execution
    1. Static Semantics / Validation
      1. correctness of programs can only be proven if certain constraints are satisfied
    2. Type checking
      1. figuring out the type of arbitrary complex expression
    3. Establishing the Correctness of the Execution Engine
    4. Transformation (compilation)
    5. Interpretation
    6. Transformation v.s. Interpretation
      1. better performance
  4. Separation of Concerns
    1. Mbeddr
      1. Scheduling of Tasks
      2. Implementation of Tasks
    2.  WebDSL
      1. persistent data
      2. user interface
      3. access control
    3. Halide
      1. Scheduling Language
      2. Implementation Language

Design Principles

  1. Language abstractions should be close to Linguistic Abstractions
    1. easier for domain experts to use
  2. Algorithmic language
    1. good for programmers
    2. bad for domain experts, as they are not used to thinking precisely
    3. potentially need programmers to build libraries on top of it for domain experts
  3. declarative language
    1. easy for the users
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s