Tuesday, August 10, 2010

[uinsqwra] Three Turing completenesses of programming languages

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 :