An interesting question arose in a discussion with Michael Stal today, as a side effect of both of us being part of the jury for OOP 2008’s Dynamic Language Shootout (German only): What, exactly, is a dynamic language?
Obviously, this is not really a meaningful question since the term is very much marketing, very little substance. But if anything, I would claim that the key factor for a language to qualify as “dynamic” is the ability to define new code at runtime as part of the core language (e.g. something like eval, define_method or similar).
Update: Wikipedia seems to agree (note to self: check before writing):
Dynamic programming language is a term used broadly in computer science to describe a class of high level programming languages that execute at runtime many common behaviors that other languages might perform during compilation, if at all. These behaviors could include extension of the program, by adding new code, by extending objects and definitions, or by modifying the type system, all during program execution. These behaviors can be emulated in nearly any language of sufficient complexity, but dynamic languages provide direct tools to make use of them.
What’s your definition of a “dynamic language”?