The extent to which a language is 'dynamic' depends on how many features it offers which defer until runtime operations which might otherwise be pre-calculated at compile time. As an example, method calls in a compiled static language commonly use precalculated offsets in a look-up table to determine the address of the routine to be called. In a dynamic language however, the method might be looked up by name, as a string in a hashtable of methods on the object. If the method name is not present on the object, it will be searched for on the object's class, and then on the class' base classes. This lookup cannot be precalculated, because in the general case the methods on an individual object can be changed at runtime, as can the base classes of a particular class. As is typical for dynamic language mechanisms, this flexibility provides significant power, at the cost of slower runtime performance. Mainstream dynamic languages include VisualBasic, PerlLanguage, PythonLanguage, SmalltalkLanguage, and RubyLanguage. Python and Ruby are both widely liked by their users. The advocacy of Perl devotees is the stuff of legend, although non-experts are often scared by it's complex-looking line-noise source code. SmalltalkLanguage is in many ways an excellent language, but hasn't been able to achieve broad acceptance for many years now. There are many ThingsWeHateAboutVbClassic.