A core, directing what the program is to do. Execution model. There's often something dynamic about it. Almost always Turing complete. This is all that is strictly necessary.
A static semantics wrapper: frequently a type system. Assertions, proofs. So that the programmer can avoid mistakes, reasserting what the program is supposed to do. This can be Turing-complete, for example with fancy type systems.
A macro language: to minimize programmer typing: to express concisely what is concise. Macros, template Haskell, Polymorphic types. This can be Turing complete, like Lisp.
Design a programming language which makes all three explicitly Turing-complete. All three features cleanly separated.
No comments :
Post a Comment