Noel, please do not confuse concept programming and thin tools. Thin tools are a consequence of concept programming, much like a 'while' statement is a consequence of structured programming.
Concept programming is a design philosophy, a deliberate focus on the abstraction process rather than on a particular form of abstraction (such as functions, lists, objects, etc). You won't see anything I call "concept" in the code, only concept representations.
Plug-ins are derive from the design philosophy as a mean to represent the diversity of concepts. There is no limited set of concepts, therefore a concept-based language must be extensible.
Plug-ins are not Lisp-style macros either (I assume from the context that's what you call "macros" in your reply), for a variety of reasons.
- One is that in the Mozart implementation, they apply to multiple languages. The same symbolic derivation plugin applies to a Java source code or to XL source code.
- A second reason, which enables the first one, is that they are external to the program, whereas a Lisp macro lives within the context of the program (you can invoke a program symbol in it, for instance, and it's taken directly from the program context).
I don't know if there is anything earth-shattering in the language feature list, but there are a few features there I'm positive are firsts (and, I gather, still unique to this day), like variable argument lists constructed using a compile-time generic instantiation mechanism, or using expression reduction for operator overloading.
|