Certainly, in this day and age, the lack of safe meta-definition is pretty much shocking.
Certainly, in this day and age, the lack of safe meta-definition is pretty much shocking.
Type-safe metaprogramming Sheard
http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=E63...
Type-safe, reflective metaprogramming Microsoft
http://research.microsoft.com/apps/video/dl.aspx?id=103561
Rascal - Metaprogramming language and platform
So, given work like that, what remaining tough problems are there before you would find a metaprogramming system safe and acceptable? Or do we have the fundemantals available but you just don't like the lack of deployment in mainstream or pragmatic languages and IDE's?
Note: Just dawned on me that you might mean abstract programming in the sense of specifying, analyzing, and coding up abstract requirements closer to human language. Still interested in what gripes or goals you have on that end if so.
For example in Lisp, code is data and data is code (aka homoiconicity). This makes it very convenient to write macros (i.e. functions that accept and return executable code).
Unsafe meta-programming would be like the C pre-processor whose aptness for abuse make it a leading feature of IOCCC entries.
(Note that "assignment" to a variable is "meta" in a functional language (and you might want to use a "roll back 'worlds' mechanism" (like transactions) for safety when this is needed.)
This is a parallel to various kinds of optimization (many of which violate module boundaries in some way) -- there are ways to make this a lot safer (most languages don't help much)
A lot of interesting things tend to happen when you introduce invariants, including "everything-is-a" invariants. Everything is a file, everything is an object, everything is a function, everything is a relation, etc.