Ensō: A self-describing DSL workbench

Ensō is an external language workbench with both graphical and textual editing capabilities. Each language is defined by a schema, or the model of its internal representation, which can be rendered either textually via a grammar or graphically via the diagramming DSL, stencil. Behavioral semantics in Ensō are defined using model interpreters written in the Ruby programming language.

Ensō executes on top of itself: internally, the various components of the workbench, including the schema, grammar and stencil languages, are implemented as a stack of self-describing Ensō DSLs. This conceptually elegant self-reflection also has the practical advantage of allowing application developers, toolsmiths, and even Ensō extension builders to share the same toolchain.

The other key strength of Ensō is strong support for language reuse across domains. DSLs can be composed, extended or wrapped via inheritance, either directly or in a cross-cutting manner, enabling powerful reuse of its language library. Generic template languages, such as the command language, are routinely extended to served as the backbone for a family of languages.


© Alex Loh
Template design by Andreas Viklund