嵌入式语言有哪些代替Lua的选择?
我正在处理一个在 DSP 上运行 Linux 的嵌入式系统。现在我们想让它的一些部分能够编写脚本,并正在寻找一个好的可嵌入脚本语言。这些脚本应该能够很好地集成到我们现有的 C++ 代码库中,并且应该很小而快。
我知道 Lua 是处理这类问题的行业选择。我们很可能会选择 Lua ,因为它已经经过了试验和证明是稳定的等等。然而,作为一种编程语言,它有一些相当古怪的角落。
那么,有哪些选项可用于嵌入式语言?
编辑:
这是大约一年后的事情。
我们实际上在我们的嵌入式系统上使用了 Lua ,并且表现得非常好。随着时间的推移,我们向项目的越来越多的部分添加了更多的脚本支持,这真的有助于推动它的进展。
性能非常出色。即使是涉及搜索长数组或花哨的字符串操作的相当复杂的操作,其性能表现也非常出色。我们基本上从来没有遇到与 Lua 相关的性能问题。
与 C 函数的接口非常简单直接,非常有效。这使我们能够轻松地扩展脚本系统。
最后,我们惊讶地发现 Lua 的灵活性。我们的 Lua 解释器必须运行在具有非标准内存分配器且不支持双精度数据类型的系统上。我们必须修改一个头文件中的两个有文档记录的位置才能让 Lua 在该系统上运行。它真的非常适合嵌入!
原文链接 https://stackoverflow.com/questions/4448835
Tcl
是一种从零开始设计成嵌入式语言的编程语言,已经存在几十年了。此外,由于其高度可扩展性,它是开发领域特定语言的完美选择。
我不太了解 DSP 领域,但当通过 Google 搜索 "dsp lua" 和 "dsp tcl" 时,你会发现 Tcl
的结果是 Lua
两倍多。
由于您提到了“嵌入式系统”、“小而快”和“良好整合”,因此我认为如果不是唯一的选择,Lua一定是第一选择。但我不再认为这种编程语言具有“古怪的角落”。首先,《Lua编程(Programming in Lua)》这本书非常棒,是我读过的最好的书之一。其次,一些“古怪的角落”来自于该语言非常正交和简洁,长远来看这是一种优势而不是缺陷。例如,我认为JavaScript更差。如果您阅读《JavaScript权威指南》(Javascript the good parts),作者会详细解释一些语言构造的设计错误以及为什么应该避免使用new操作符。而在Lua中,这些错误被去除了,例如在5.x版本中,古怪的upvalue被标准的语法作用域所取代。
我的观点实际上是,与大多数其他语言相比,Lua的“古怪角落”要少很多!我们在商业项目中使用它,我们对它非常满意。
根据你的要求(小的存储占用、较少的怪癖和与 C++ 集成),我能想到的唯一选项就是Common Lisp。
一些人在这个 Stack Overflow 问题中推荐使用CFFI来将其与 C 集成。
但如果是我,我会选择 Lua。
我全心全意地推荐您使用 Lua。然而,Forth 也是一种供选择的语言,特别适用于资源受限的嵌入式设备,但此前尚未提及。
将下面翻译成中文并且保留原本的 markdown 格式
总是会有 Lisp。:) 但这强调了Lua比大多数语言实际上更少“怪异”。它被设计用于非程序员,读起来像伪代码。它具有干净、统一的语法(具有词汇作用域的一流嵌套函数、多重赋值、多重返回值、具有干净构造函数语法的单一、灵活的数据构造机制等),这使得它非常容易学习、阅读、写作等。它也恰好是意外的强大和表达(适当的尾调用、续延、元编程等)。
Lua唯一真正“古灵精怪”的方面是数组从1开始索引,以及它不像其他人那样借用C的传统(~=
而不是!=
, --
而不是//
等),但这些在程序员习惯于类似C的语言的眼中也大多是古怪的。
另一个选择可能是Squirrel,它受Lua启发,有着类似的目标,但具有C样式的语法。我没有用过它,所以我不知道它是否实现了它的目标。
我理解 Lua 是这样问题的行业选择。
这是个大胆的说法!如果您已经运行 Linux,选择也就很广泛了。Linux 本身并不是嵌入式系统的“行业选择”;该’行业‘远比那更分散。
一种可在任何系统上实现而无论性能、大小和操作系统(甚至没有操作系统)的语言是 Forth。可能不是最时髦的语言,但易于实现和扩展。
另一个候选者可能是 ch,它是一个可嵌入的 C/C++ 解释器,因此您可以为编译和脚本代码使用相同的语言。
更近期的选择是wren:
Wren 是一种小巧、快速、基于类的并发脚本语言
Wren 是一种脚本语言,旨在嵌入应用程序中。它没有依赖项,一个小型标准库,并且具有易于使用的 C API。它可以以 C99、C++98 或任何更高版本进行干净的编译。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你考虑过Python吗?有一个很好的扩展和嵌入指南可以使用。如果你正在使用Boost,那么Boost Python是一个库,用于C++和Python之间的无缝集成。