你怎么知道一种语言是否是一种"动态语言"?

dev*_*xer 2 c# lingo dynamic-languages dynamic esoteric-languages

我正在努力更好地处理语言"动态"的真正含义.我对Lingo有很多经验,Lingo是Adobe(以前的Macromedia)Director产品系列的脚本语言,我只是想知道它是否会被视为"动态语言".

变量和列表的处理方式似乎非常"动态语言" - 对我而言.

有了变量,你只需要写foo = 3bar = "Hello World".你没有将变量声明为- int或者string- 将数据表示为原样.

使用列表,您可以编写类似的内容miscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]].这不一样tuple吗?

这些功能是否足以符合"动态语言"状态?

有趣的是,我一直在使用C#而且导演/ Lingo要少得多,但是现在对动态语言的所有兴奋,我想知道我是否真的反对这个问题.

编辑

关于Mark Rushakoff回答,下面,这里是试图分析Lingo是否有资格使用这篇维基百科文章 "动态" :

  1. Eval- Lingo有dovalue关键字.do将执行整个命令,例如,do "foo = 23"do "foo = sum(20, 3)".value尝试将字符串转换为数字,但它不仅仅是一个解析运算符 - 它实际上可以将变量的字符串表示转换为其数字,例如,假设foo = 23该语句value("foo")将计算为23.

  2. 高阶函数 - 如果我理解这一点,这基本上就是我在C#中被称为"委托"的东西.据我所知,Lingo不直接支持这个,尽管你可以创建一个具有一个函数并传递该类型实例的类型(称为"父脚本").

  3. 关闭 - 据我所知,不支持此事.

  4. 延续 - 据我所知,不支持此事.

  5. 反思 - 至少在某种意义上,是的.实际上,您使用字符串创建类型的新实例,例如fooInstance = script("Foo").new(bar).也可以将类型的实例转换为包含类型名称的字符串(这样您就可以模仿c#的GetType()功能).您还可以在不知道属性名称的情况下查询类型的属性(例如,通过索引查找属性)并按索引查找属性的名称.

  6. 宏 - 维基百科文章描述宏的方式,我不相信.但是,可以在运行时编辑脚本,因此可能很重要.

因此,似乎Lingo在动态特性上得分为2到3分,但我对封闭和延续不够清楚,因为他们确信Lingo不支持它们.我想我不知道该结论.欢迎评论.

Mar*_*off 5

类型推断(比如你的例子foo = 3bar = "Hello World")并不意味着动态语言.varC#中的关键字在编译时推断出变量类型,而Haskell也可以对所有变量使用隐式类型,即使在已编译的程序中也是如此.

"动态编程语言"是一个非常松散定义的术语,但我认为如果你必须将它限制为一个限定符,它将是运行时反射.如果你可以做反射,你可以做维基百科文章中列出的其他限定符(eval,对象运行时更改,闭包,宏......).

我对Lingo语言一无所知,但我认为将语言视为动态语言而不是限定语言资格通常更容易.Lingo可以在维基百科文章中做任何/所有限定符吗?如果没有,那么它可能只是不动态.如果它可以做任何事情,那么它可能至少"足够动态".