lua - 嵌入语言: Lua vs Common Lisp (ECL)

标签 lua common-lisp embedded-language

这里有人有使用 Common Lisp 作为嵌入式语言(使用 ECL)的经验吗?如果是这样,ECL 与 Lua 相比有多好?

最佳答案

我以前没有嵌入过 CL,但我已经使用 Lua 和两个特定的 Scheme 实现(Gambit-C 和 GNU Guile)完成了它。

在我看来,Scheme 是一种很棒的嵌入式语言,因为它灵活且不太臃肿。 Gambit-C 在这方面尤其出色,因为它允许您运行解释脚本,并将代码编译为 C。在我的测试中,Gambit-C 生成的 C 代码仅比手写 C 代码慢一点(例如,在 C 中运行 0.030 秒的特定测试在 Gambit 中运行 0.040!)。 Gambit 还有一个非常好的 FFI(外部函数接口(interface)),它本质上只是具有特殊语法的 Scheme,用于编写与 C 库的绑定(bind)(也直接支持 ObjC 和 C++)。 Gambit 还有一个非常好的 repl,带有一些调试功能。

Guile 也相当不错,而且它实际上比 Lua 运行得更快(我目前所知道的最快的解释语言——Guile 近年来取得了很大的进步)。但由于 Gambit-C 可以编译为非常快的代码,因此我通常不会过多使用 Guile,除非我打算在最终版本中使用解释代码。

Lua有闭包,但你不会像Scheme中那样得到延续,也不会得到宏。尽管如此,仍然可以做合理数量的功能性工作。它不会有一个功能齐全的对象系统(如 CL 中的 CLOS),但它有表,并且它们可以用来很容易地实现基于类的继承和基于原型(prototype)的继承。此外,Lua 有一个优秀的 C API,使用起来真的很愉快。它是基于堆栈的,其设计方式使您根本不必担心 Lua 方面的内存管理。 API 非常清晰且组织良好,并且有很多很棒的文档和示例代码。 Lua 无法向下编译,但它确实使用字节码(始终 - 当您将代码发送到 Lua VM 时,它总是首先向下编译该代码,然后然后运行它) .

现在,对于 Common Lisp,我认为它可能不会成为一种非常好的嵌入语言。原因就是CL太大了。一般来说,嵌入一种轻量级语言是可取的,因为它将使用您提供给它的平台/库,而不是太多的外部东西。

所以,我认为使用 Gambit-C、Guile 或 Lua 都不会出错。他们都会非常好。 CL 很强大,但我只是觉得它对于嵌入来说太大了。

关于lua - 嵌入语言: Lua vs Common Lisp (ECL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3223592/

相关文章:

common-lisp - 在 Common Lisp 中将变量列表评估为其值列表

java - 对于现有的 Java 应用程序来说,什么是好的嵌入式语言?

c++ - 将 Python 持久层嵌入到 C++ 应用程序中——好主意吗?

c++ - 在 Obj-C 项目中嵌入 Prolog 引擎

lua - 实现 CAS(检查和设置)的 Redis Lua 脚本?

regex - Lua 模式类似于正则表达式正向前瞻?

lisp - SBCL - 常见的 Lisp 错误

list - 如何比较 Lisp 中的两个列表

sorting - 内置排序算法怎么可以这么快?

sockets - LuaSocket 用于测试互联网连接是否存在