title: How can you tell if a language is a "dynamic language"?
body: <p>I'm trying to get a better handle on what it really means for a language to be "dynamic". I have quite a bit of experience with <em>Lingo</em>, which is the scripting language for the Adobe (formerly Macromedia) Director product line, and I'm just wondering if it would be considered a "dynamic language".</p>
  
  <p>The way variables and <em>lists</em> are handled seems very "dynamic language"-ish to me.</p>
  
  <p>With variables, you would just write <code>foo = 3</code> or <code>bar = "Hello World"</code>. You don't declare a variable as an <code>int</code> or <code>string</code>--it figures that out as is goes.</p>
  
  <p>With lists, you can just write something like <code>miscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]]</code>. Would this not be similar to a <code>tuple</code>?</p>
  
  <p>Are these features enough to qualify for "dynamic language" status?</p>
  
  <p>Interestingly, I've been using C# a lot more and Director/Lingo a lot less, but with all the excitement over dynamic languages these days, I wonder if I'm actually going against the grain.</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>Regarding Mark Rushakoff answer, below, here's an attempt to analyze whether Lingo qualifies as "dynamic" using this <a href="http://en.wikipedia.org/wiki/Dynamic_programming_language" rel="nofollow noreferrer">Wikipedia article</a>:</p>
  
  <ol>
  <li><p><code>Eval</code> - Lingo has <code>do</code> and <code>value</code> keywords. <code>do</code> will execute an entire command, e.g., <code>do "foo = 23"</code> or <code>do "foo = sum(20, 3)"</code>. <code>value</code> attempts to convert a string into a numeric, but it is more than just a parsing operator--it can actually convert a string representation of a variable into its number, e.g., assuming <code>foo = 23</code>, the statement <code>value("foo")</code> will evaluate to 23.</p></li>
  <li><p>Higher-Order Functions - If I'm understanding this right, this is basically what I would be called a "delegate" in C#. Lingo doesn't support this directly as far as I know, although you could create a type (called a "parent script") that has a function and pass an instance of the type.</p></li>
  <li><p>Closures - No support for this as far as I know.</p></li>
  <li><p>Continuation - No support for this as far as I know.</p></li>
  <li><p>Reflection - In a sense at least, yes. You actually create new instances of types using a string, e.g., <code>fooInstance = script("Foo").new(bar)</code>. It is also possible to convert an instance of a type into a string that contains the name of the type (so you can sort of mimic c#'s <code>GetType()</code> functionality). You can also query the properties of a type without knowing the names of the properties (e.g., look up a property by index) and find out the names of the properties by index.</p></li>
  <li><p>Macros - The way the Wikipedia article describes a <em>macro</em>, I don't believe so. It is possible to edit scripts at runtime, however, so maybe that counts.</p></li>
  </ol>
  
  <p>So, it seems that Lingo scores a 2 to 3 out of 6 on dynamic features, but I'm not clear enough on closures and continuations to know for sure that Lingo doesn't support them. I guess I'm not sure what to conclude. Comments welcome.</p>