Dynamic typing and interpreting give dynamic languages excellent "whip-up-ability" -- getting something up and running quickly is easy.
However, as your supposedly short-lived program evolves into a company core asset, other language aspects become higher-valued, like scalability, performance and static checking. Simply put, different programming language characteristica are important at different phases in a project. At some point it is likely to be a mismatch between what you need from your language and what it provides. For these reasons, it is not uncommon for program evolution to include a rewrite-in-Java step, with the associated pains.
In a sense, this is the same mismatch as the one between the constructs the language provides and the program you are trying to write. Not until we have "taught" the language about our problem domain -- generally by writing libraries -- can we start expressing ourselves in terms from the specification, rather than in loops and lists.
This talk presents Th, a dynamic programming language that is evolvable in parallel with your programs. Not only can you gradually (=in parts of the program) add things like type annotations to get static checking and compile-time optimisation, but entirely new language constructs to capture recurring patterns in your program or domain-specific checkers. We are extending the concept of library to include programming language extensions turning anyone -- including you -- into a potential language designer.
This is an ongoing research collaboration between Purdue University and IBM T.J. Watson Research.