dev*_*xer 2 c# lingo dynamic-languages dynamic esoteric-languages
我正在努力更好地处理语言"动态"的真正含义.我对Lingo有很多经验,Lingo是Adobe(以前的Macromedia)Director产品系列的脚本语言,我只是想知道它是否会被视为"动态语言".
变量和列表的处理方式似乎非常"动态语言" - 对我而言.
有了变量,你只需要写foo = 3
或bar = "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是否有资格使用这篇维基百科文章 "动态" :
Eval
- Lingo有do
和value
关键字.do
将执行整个命令,例如,do "foo = 23"
或do "foo = sum(20, 3)"
.value
尝试将字符串转换为数字,但它不仅仅是一个解析运算符 - 它实际上可以将变量的字符串表示转换为其数字,例如,假设foo = 23
该语句value("foo")
将计算为23.
高阶函数 - 如果我理解这一点,这基本上就是我在C#中被称为"委托"的东西.据我所知,Lingo不直接支持这个,尽管你可以创建一个具有一个函数并传递该类型实例的类型(称为"父脚本").
关闭 - 据我所知,不支持此事.
延续 - 据我所知,不支持此事.
反思 - 至少在某种意义上,是的.实际上,您使用字符串创建类型的新实例,例如fooInstance = script("Foo").new(bar)
.也可以将类型的实例转换为包含类型名称的字符串(这样您就可以模仿c#的GetType()
功能).您还可以在不知道属性名称的情况下查询类型的属性(例如,通过索引查找属性)并按索引查找属性的名称.
宏 - 维基百科文章描述宏的方式,我不相信.但是,可以在运行时编辑脚本,因此可能很重要.
因此,似乎Lingo在动态特性上得分为2到3分,但我对封闭和延续不够清楚,因为他们确信Lingo不支持它们.我想我不知道该结论.欢迎评论.
类型推断(比如你的例子foo = 3
和bar = "Hello World"
)并不意味着动态语言.var
C#中的关键字在编译时推断出变量类型,而Haskell也可以对所有变量使用隐式类型,即使在已编译的程序中也是如此.
"动态编程语言"是一个非常松散定义的术语,但我认为如果你必须将它限制为一个限定符,它将是运行时反射.如果你可以做反射,你可以做维基百科文章中列出的其他限定符(eval,对象运行时更改,闭包,宏......).
我对Lingo语言一无所知,但我认为将语言视为动态语言而不是限定语言资格通常更容易.Lingo可以在维基百科文章中做任何/所有限定符吗?如果没有,那么它可能只是不动态.如果它可以做任何事情,那么它可能至少"足够动态".