BU CAS Computer Science 591 L1
Embedded Languages & Frameworks
Logistics
- lectures:
- Tue. & Thu., 9:30 - 10:45 AM in MCS 180
- lecturers:
- questions and discussion:
- project submission policies:
- submission: by 11:59 PM on due date (via GitHub)
- collaboration: list all collaborators outside of group
- late policy: -15 points per day, 3 days maximum
- course grade:
- course materials:
- software used in the course:
Syllabus
- Overview:
Modern frameworks and libraries for domains such as cybersecurity, machine learning, and others are complex and encompess a large set of features.
Such frameworks may extend their host language syntax or semantics, and may alter the programming methodology common in the host language's community.
Developers of such frameworks and libraries sometime resort to creating their own custom domain specific language (DSL), and requiring users to express
their programs within that DSL. Such frameworks are accompanied by a toolchain (e.g. a compiler or interpreter) that transforms programs written in such
a DSL into some runnable form.
Alternatively, developers of such frameworks can choose to "embed" their framework within a popular host language. Successful embedding allow users to
encode arbitrary interactions between any combination of the framework and host language constructs. Such embedding can lead to interesting results, as
the embedding language may alter the host language syntax or semantics.
In this course, we systemetically explore the space of embedded languages and frameworks. We identify and distinguish categories of embeddings. These
include shallow, deep, and external embedding. We study the tradeoffs between these categories from the perspective of language developers and users.
The course overviews methodologies and paradigms for developing such embeddings, including polymorphism, reflection, and composition. We overview standard
programming languages concepts and techniques that guide our exploration, such as parsing, program semantics, interpretation, static analysis, type systems,
and programming paradigms.
Relevant external resources that discuss embedded DSL include This
wikipedia article and
CMU Course. There are many examples of popular embedded framework and languages in use
today including: Regular expressions, JSON, JQuery, TensorFlow, SQLAlchemy, JavaScript Promise API, Cryptography libraries, Android's XML layouting
language, etc.
- Learning Outcome:
- 1. Become familiar with various embedding techniques and identify their tradeoffs, including comparison to non-embedding DSL techniques.
- 2. Gain experience implementing embedded frameworks and languages using various embedding techniques.
- 3. Employ the course's concepts to better use and extend existing embedded frameworks and languages.