The Vanilla project was an experiment in language design, intended to test two hypotheses:
- To what extent are programming languages composed of independent sub-features that can themselves be independently described and composed?, and,
- If this is so to a large extent, is it possible to build effective language tools (specifically interpreters) from such independently-compiled features?
The answer to the first question is a qualified “yes”: a programming language is, to a large extent, composed of features that are either independent of other features or interact with them in modular ways. An if statement, for example, depends on there being a `Boolean` type in the language, but is independent of the types and expressions that appear in its two arms. This suggests that we should be able to define the typing and semantic rules of if statements independently of almost all other language features.
In developing Vanilla we developed a modular, composable type-checking and interpretation framework within which to define language features and their associated rules. We then developed a large range of language features within the framework, including most of the machinery needed to build imperative, object-oriented and (strict) functional languages.
The main disadvantage of Vanilla is that it uses Java, both as a run-time host language and for expressing the rules and structures. The code that designers have to write is extremely stylised and repetitive. It would be better to have a more powerful language for describing languages, and also to allow rule-based expressions.
Dobson, Simon. 1998a. “A First Taste of Vanilla.” TCD-CS-1998-20. Department of Computer Science, Trinity College Dublin. https://simondobson.org/softcopy/TCD-CS-1998-20.ps.
———. 1998b. “Fragmenting Languages.” Pasadena, CA. https://simondobson.org/softcopy/vanilla-caltech-1998.ppt.
———. 1998c. “Modular Parsers.” TCD-CS-1998-19. Department of Computer Science, Trinity College Dublin. https://simondobson.org/softcopy/TCD-CS-1998-19.ps.
———. 2000. “Building Programming Languages from Components.” Cambridge, UK. https://simondobson.org/softcopy/vanilla-microsoft-2000.ppt.
Farragher, Linda, and Simon Dobson. 2000. “Java Decaffeinated: Experiences Building a Programming Language from Components.” TCD-CS-2000-22. Department of Computer Science, Trinity College Dublin. https://simondobson.org/softcopy/TCD-CS-2000-22.pdf.
Nixon, Paddy, Vinny Wade, Simon Dobson, John Fuller, and Sotirios Terzis. 1998. “Designing Components for a Virtual Organisation: A Case Study.” In Proceedings of Objects, Components and the Virtual Enterprise. Vancouver, CA. https://simondobson.org/softcopy/virtues-ocve-1998.pdf.