Lua作为嵌入式语言的替代品?

时间:2010-12-15 10:17:36

标签: scripting programming-languages embedded lua

我正在研究在DSP上运行Linux的嵌入式系统。现在我们想让它的一些部分可编写脚本,我们正在寻找一种很好的可嵌入脚本语言。这些脚本应该与我们现有的C ++代码库很好地集成,小而快。

据我所知,Lua是这类问题的行业选择。我们可能会选择Lua,因为它是经过验证的,并且被证明是稳定的等等。然而,作为一种编程语言,它有一些相当古怪的角落。

那么,可嵌入语言有哪些替代方案?

修改

这是大约一年之后。

我们实际上在我们的嵌入式系统上使用了Lua,它的表现非常出色。随着时间的推移,我们为项目的越来越多的部分添加了越来越多的脚本支持,这确实有助于实现它。

性能非常出色,真的。即使是相当复杂的操作,涉及搜索长数组或奇特的字符串操作也表现得非常好。我们基本上从未遇到过与Lua相关的性能问题。

与C函数的接口非常简单,效果非常好。这使我们可以轻松地扩展脚本系统。

最后,我们对Lua的灵活性感到震惊。我们的Lua解释器必须在具有非标准内存分配器的系统上运行,并且不支持双数据类型。在一个头文件中有两个记录良好的位置我们必须修改以使Lua在该系统上工作。它非常适合嵌入!

8 个答案:

答案 0 :(得分:39)

既然你说“嵌入式系统”和“小而快”和“很好地整合”,我会说你是正确的,如果不是唯一的选择,Lua是第一。但我不再同意编程语言有“古怪的角落”。首先,“Lua编程”这本书非常精彩,是我读过的最好的书之一。其次,一些“古怪的角落”来自这样一个事实,即语言是非常正交和干净的,从长远来看这是一种资产,而不是缺点。我发现JavaScript更糟糕。如果您阅读“Javascript the good parts”,作者会详细解释为什么语言中的某些结构是设计错误以及为什么应该避免使用new运算符。在Lua中不是这样,坏的部分已被删除,例如,古怪的upvalue内容被版本5.x中的标准语法范围所取代。

我的观点实际上是Lua是一种远比其他大多数语言具有更少古怪角落的语言!我们在商业项目中使用它,我们对它非常满意。

答案 1 :(得分:12)

我全心全意地推荐Lua用于你的用例。但是,Forth是一种替代方案 - 特别是对于资源受限的嵌入式设备 - 尚未提及。

答案 2 :(得分:12)

总有Lisp。 :)但这强调了事实上Lua实际上不像大多数语言那样“古怪”。它是为非程序员设计的,读取像伪代码。它具有干净,统一的语义(具有词法作用域的第一类嵌套函数;多个赋值;多个返回值;具有干净构造函数语法的单个,灵活的数据结构机制;等等),使其易于学习,读取,写入等它也恰好具有强大的意义和强大的表现力(适当的尾调用,延续,元编程等)。

Lua唯一真正“古怪”的方面是数组从1开始索引,并且它没有像其他人一样借用C的约定(~=而不是!=,{{1而不是--等),但这些在程序员习惯于类C语言的眼中大多是古怪的。

另一种选择可能是Squirrel,它受Lua的启发,具有类似的目标,但是C语法。我虽然没有使用它,所以我不太清楚它是否符合它的目标。

答案 3 :(得分:4)

根据您的要求(占地面积小,怪癖少,与C ++集成),我能想到的唯一选择是Common Lisp

this other SO question中的某些人建议CFFI将其与C进行整合。

但如果我在你身边,我会坚持使用Lua。

答案 4 :(得分:3)

Tcl从一开始就被设计成一种嵌入式语言,并且已经存在了几十年。此外,由于其高度可扩展的特性,它是开发特定领域语言的完美选择。

我对DSP世界了解不多,但是当你谷歌“dsp lua”和“dsp tcl”时,你获得的Tcl命中率是你的两倍。

答案 5 :(得分:1)

您考虑过Python了吗?有一个很好的extending and embedding guide可用。如果你正在使用BoostBoost Python是一个用于C ++和Python之间无缝集成的库。

答案 6 :(得分:0)

  

我知道Lua是这类问题的行业选择。

一个大胆的主张!我建议如果你已经在运行Linux,那么选择是敞开的。 Linux本身绝不是嵌入式系统的“行业选择”; “行业”比这更加支离破碎。

几乎任何系统都可以实现的语言,无论性能,大小和操作系统(甚至没有操作系统),都是Forth。也许不是最流行的语言,但易于实现和扩展。

另一个候选者可能是ch,它是一个可嵌入的C / C ++解释器,因此您可以对编译和脚本化代码使用相同的语言。

答案 7 :(得分:0)

最近的替代方案是wren

<块引用>

Wren 是一种小型、快速、基于类的并发脚本语言

Wren 是一种脚本语言。 Wren 旨在嵌入 应用程序。它没有依赖项,一个小的标准库,和一个 易于使用的 C API。它可以干净地编译为 C99、C++98 或任何东西 稍后。