In most other programming languages, new abstractions are built by writing code on /top/ of existing abstractions. But in lisp, its possible to build new abstractions by writing code *beneath* existing code. Abstract: A partial evaluator automatically specializes a program with respect to some of its input. This article shows how the idea comes up naturally when you write program generators by hand, then builds a basic online partial evaluation library and puts it to work transforming an interpreter into a compiler. 0. Introduction Mainstream programmers think of writing an interpreter or a compiler as a major job, worth doing only for a major problem. They know this because the languages they use every day have big, serious implementations, and the compiler class they took in school had them write just one big, semi-serious compiler. Lispers know better: all the textbooks show how to write a Lisp interpreter in about a page of code.
In our professional software development, we have focused on finding ways to help developers work more effectively. Despite the range of programming languages available today, we are still limited by them. It makes sense to extend the existing languages to create more domain-oriented ones, which allow writing programs on a higher level and in a manner that is more natural to each domain. With an instrument that allows creating language constructs as simple as creating classes or methods is in a conventional language, you can significantly change the way you develop software. This new style of programming, when you create specialized languages, use them to develop software, and extend them when and how required, is called Language Oriented Programming (LOP). MPS Story Meta Programming System started in 2003 as a research project. In 2004, its underlying concepts were described in the Language Oriented Programming article.
c2005 Most new ideas in software developments are really new variations on old ideas. This article describes one of these, the growing idea of a class of tools that I call Language Workbenches - examples of which include Intentional Software, JetBrains's Meta Programming System, and Microsoft's Software Factories. These tools take an old style of development - which I call language oriented programming and use IDE tooling in a bid to make language oriented programming a viable approach. Although I'm not enough of a prognosticator to say whether they will succeed in their ambition, I do think that these tools are some of the most interesting things on the horizon of software development. Interesting enough to write this essay to try to explain, at least in outline, how they work and the main issues around their future usefulness.
Most applications consist of a big number of model- or so called domain-objects. Building different views, editors, and reports; querying, validating and storing those objects is very repetitive and error-prone, if an object changes its shape frequently. Magritte is a fully dynamic meta-description framework that helps to solve those problems, while keeping the full power to the programmer in all aspects. Moreover since Magritte is described in itself, you can let your users modify the meta-world and add their own fields and forms without writing a single line of code.
G. Chari, D. Garbervetsky, and S. Marr. Proceedings of the 11th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems, page 5. (Jun 19, 2017)
M. Ancona, W. Cazzola, G. Dodero, and V. Gianuzzi. Performance, Computing and Communications, 1998. IPCCC '98., IEEE International, page 32 -36. (February 1998)
T. D'Hondt, K. Volder, K. Mens, and R. Wuyts. Software Architectures and Component Technology, page 207-224. Kluwer Academic Publisher, (January 2001)Proceedings of SACT 2000.
S. Matsuoka, T. Watanabe, and A. Yonezawa. Proceedings of the European Conference on Object-Oriented Programming, page 231--250. London, UK, UK, Springer-Verlag, (1991)