是否有任何静态类型的、可嵌入的脚本语言?

54

我想知道是否有任何静态类型的可嵌入脚本语言。 Python、JavaScript 等语言很好,但它们是动态类型的(也就是说,类型在运行时检查)。我只是想知道是否有人知道任何可以嵌入 C++ 应用程序的静态类型脚本语言?


5
Python是如何实现弱类型的?在Python中,许多操作会引发TypeError异常,在C++中这可能会导致未定义的行为。 - sepp2k
2
大多数编程语言(如Python、Ruby等)根据定义(即在运行时)可以被认为是强类型的。您可能需要进一步阐述您对“强类型”的具体定义。 - ChristopheD
2
Python比C语言更强类型。提问者混淆了“显式类型”(即在编译器/解释器可以唯一推断类型时必须指定类型)和“强类型”。 - ShreevatsaR
14
如果你的意思是希望在编译或加载时发现打字错误而不是在执行时发现,那么你应该说“静态类型”,而大多数脚本语言都是“动态类型”。 - Doug Currie
6
这个问题看起来是一个真实的问题。第一个版本只是措辞不当。而这些问题并没有涉及到嵌入式脚本语言,这是一种几乎完全由动态语言构成的专业领域。 - Chuck
显示剩余6条评论
4个回答

16

我建议你看一下 AngelScript。我们在 Warsow 中使用它,效果还不错。它具备诸如类、内存管理等你期望的所有功能。由于是静态类型语言,可以进行更好的优化,因此与其他脚本语言相比,字节码会更快。

然而,与 Lua 等其他脚本语言相比,AS 并不那么易于使用,而且只有一个 .zip 下载包,这意味着没有 .exe 安装程序、.deb 包、.dmg 或其他任何东西。通常这没问题,因为你会想将 AS 打包到项目中。与 Lua 相比,主要难点就在于库更庞大(但功能更多)。由于使用人数不多,因此很难找到例子和帮助,但文档很好,上手应该不难。

然而,就我个人而言,我更喜欢动态语言来进行脚本编写。当我为应用程序编写脚本时,我希望能够直接进入代码环节,而不必担心 C 风格的限制。除了 AngelScript 外,我真的想不出其他值得推荐的脚本语言了。


“无需担心C风格的负担”:事实上,Angelscript对我来说似乎太重了,不足以称为“脚本语言”。 - Stefan

6

嗯,有一个可嵌入的C/C++解释器Ch


你能详细介绍一下 Ch 吗?它是跨平台的吗?它是在 GPL 或其他许可证下发布的吗?文档是否最新? - Nathan Osman
@George:我个人并没有真正尝试过它(我也不太明白它的意义),但它是跨平台和免费的。它似乎有很好的文档,并且还有一个商业版本,(据推测)提供全面支持。 - Eli Bendersky
7
C 如何能算作“静态类型语言”? - Jacques Carette
11
据我所知,在这个世界上,C语言中的类型与变量相关,而不是值,并且在编译时确定,这使它是静态类型的。 - Eli Bendersky
4
抱歉,我在使用“欺骗编译器”(也称为强制转换)不被视为一种特性的语言上工作太久了。因此,严格来说,C可以被认为是有类型的。但我认识的大多数经历过真正注重类型的语言的人都不再认为C是有类型的。很久以前,我也开始将C视为“可移植的汇编语言”... - Jacques Carette
5
在我的书中,C/C++不符合“脚本语言”的定义。诚然,我的书没有正式定义“脚本语言”,但我认为C/C++与之相距甚远。 - Stefan

4

如何尝试使用C#?看看Mono实现的C#“脚本语言”REPL(http://www.mono-project.com/CsharpRepl

更新:如果您不知道什么是REPL,它就是在没有任何参数的情况下运行Python或irb时看到的东西


3
Haskell是静态类型的。你可能可以将ghci或hugs(两者都是解释器)嵌入到另一个程序中。但是据我所知,这并不容易。

我曾试图用Haskell代替Python,但几次尝试后很明显,在Haskell中实现任何东西都比在Python中花费5倍的时间。我试图将这种差异归因于我对Haskell知识的匮乏,但重新考虑后,我从未在任何新语言中遇到过如此糟糕的表现,所以我坚持使用Python。此外,惰性求值与IO结合会产生可怕的不可预测的错误。这就像掌握多线程时顺序很重要,但事情却按照顺序发生,而在Haskell的情况下,你没有强制排序的手段。 - Trismegistos
5
Haskell 绝对有顺序限制。例如,IO 操作的顺序是它们发生的顺序。 - Evan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接