Dynamic programming language
In computer science, dynamic programming language is a kind of programming language in which computer programs change their structure as they run: new functions may be introduced, functions may vanish, new classes of objects may be created, new moddules may appear. The details different between languages, but in general, it is extremely difficult to compile a dynamic language down to a binary, and it is extremely difficult, perhaps impossible, to enforce DesignContract on a dynamic language. The code would have to understand itself in order to be able to decide whether or not a class that doesn't exist yet will meet meet the requirements of an AbstractClass of which it purports to belong. For methods to come and go from existance, a virtual machine is handling then run-time lookup of methods, the binary code is heavily self-modifying, or some sort of method dispatch logic is invoked.
Scheme, Lisp, Dylan, Python, Perl and many other languages fit this category. C, C++, Java, and FORTRAN do, as languages, though it is always possible to build layers on top of a language.
The article is originally from [[Perl Design Patterns Book