|
|
|
|
|
|
|
|
|
|
|
|
University of Oregon
Computer & Information Science
|
|
CIS 410/510
Domain-Specific Languages
and Software Architectures
Fall 2000
Deschutes 260, Tu Th 12:30-14:00
Instructor: Michal Young [home][ ]
Overview
A domain-specific language (DSL) is a common way of packaging software components for reuse within an application domain. We will examine when a DSL is appropriate, how DSLs are designed, and how DSLs are implemented. Our perspective will emphasize the software engineering aspects of DSLs and architectural design, rather than programming language design and implementation. We will study several DSLs to explore alternative design and implementation strategies and their tradeoffs. Students will design and implement at least one "little language".
Course Objectives
This course will be a success if, at the conclusion of the term,
- You approach architectural design of software systematically, with a focus on likely variation across time and/or products, and with an explicit analysis of the impact of likely changes and variations.
- You can produce software that is more flexible and/or reusable by separating a more stable "mechanism" part from a changeable "policy" part.
- You can make reasoned choices among several different approaches for exposing the mechanism/policy boundary, including table-driven programming, application program interfaces (APIs), and little languages.
- You have a basic understanding of implementation strategies for domain-specific languages and can make a reasonable choice of strategy based on an understanding of their advantages and disadvantages.
Topics
- Products, product lines, and domains
- Variation and commonality across time and across products
- Wide and narrow domains
- Factoring mechanism from policy
- Basic strategies: APIs vs. DSLs
- Implementation strategies for DSLs
- Declarative vs. procedural
- Data and meta-data
- Table-driven programs
- Tables raw and cooked
- Interpreters
- Embedded languages
Some example DSLs
We'll look at some of these and some other languages and systems:
- PostScript (a Turing-complete language for describing pages to printers)
- SGML, HTML, XML (Evolution of a family of languages for describing documents; metadata)
- CSS, DSSL, and XSL (Declarative and procedural approaches to describing document presentation)
- Dot, DaVinci, GXL (Languages for describing graphs; layering representations)
- TeX (or "oops, I created a language")
- Procmail, Printcap, Termcap, twmrc (configuration languages in Unix)
- Lex, Yacc, and JavaCC ("Would you like your table medium-rare or well done?")
- IDL (a language for describing interfaces and generating stubs)
- Expect (a language for describing test harnesses)
- SQL (a standard database language)
- Excel, Lotus, Visicalc (or, changing the world with a DSL)
Projects, Homework, Exams
All students in CIS 410 and CIS 510 will be expected to complete several exercises, including design and implementation of a simple DSL. The implementation project may be carried out in teams of 2 or 3 students.
CIS 510 students will be expected to write a short paper (5-10 pages) and make a class presentation on a DSL or a comparison of DSLs for a particular domain.
Pre-requisites
To get the most from this course, you should already have completed one of the following: CIS 425, CIS 625, CIS 422, CIS 522, or CIS 650. However, the only strictly required prerequisite is CIS 315 or graduate standing.
Last change Thu, Nov 2, 2000 by Michal Young