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

2024-02-03

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

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

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

EDIT:

这是大约一年后的事了。

我们实际上在嵌入式系统上使用了 Lua,并且它的性能非常好。随着时间的推移,我们为项目的越来越多部分添加了越来越多的脚本支持,这确实有助于项目的顺利进行。

性能确实非常出色。即使涉及搜索长数组或花哨的字符串操作的相当复杂的操作也表现得令人惊讶。我们基本上从来没有遇到过 Lua 相关的性能问题。

与 C 函数的接口非常简单并且工作得非常好。这使我们能够轻松地扩展脚本系统。

最后,我们对 Lua 的灵活性感到惊讶。我们的 Lua 解释器必须在具有非标准内存分配器且不支持双精度数据类型的系统上运行。为了让 Lua 在该系统上工作,我们必须修改一个头文件中两个有详细记录的地方。它真的非常适合嵌入!


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

我的观点其实Lua是一门距离很远的语言less比大多数其他语言更古怪的角落!我们在商业项目中使用它,我们对此非常满意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua 作为嵌入式语言的替代品? 的相关文章

  • 哪种编程语言或库可以处理无限级数?

    哪种编程语言或库能够处理无限级数 例如几何级数或调和级数 它可能必须有一些众所周知的系列的数据库 并在收敛的情况下自动给出适当的值 并且可能在发散的情况下生成异常 例如 在 Python 中 它可能如下所示 sum 0 sign 1 0 f
  • lua 和 walk_block 中的 pandoc 过滤器

    我正在尝试应用一个 LUA 过滤器 该过滤器只会更改文档的正文 而不影响元数据 而且比我想象的要难 过滤器应将文本添加到内联元素和块元素的前面和后面 如果它适用于内联元素 这里Code 对于块元素失败CodeBlock function P
  • 如何处理程序版本更新时数据结构的变化?

    我做嵌入式软件 但我想这并不是一个真正的嵌入式问题 我不 由于技术原因不能 使用像 MySQL 这样的数据库 只使用 C 或 C 结构 是否存在关于如何处理这些结构在程序版本之间的布局变化的通用原理 让我们拿一本地址簿 从程序版本 x 到
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • 错误:-march= 开关的值错误

    我写了一个Makefile 但无法让它工作 我有一个选项应该选择编译到哪个处理器 然而 当我跑步时make从命令行它说 tandex tandex P 6860FX emulators nintendo sdks 3DS SDK HomeB
  • 是否“static/extern uint8_t array[2] = {0};”符合ANSI C规范吗?

    我对以下代码有疑问 include all needed h static uint8 t array 2 0 void main void 是否允许按上述方式初始化 模块 全局数组 以便在符合 ANSI C 的情况下将每个成员设置为零 我
  • SQL Server 与 Oracle DBMS_METADATA.GET_DDL 并行吗?

    我正在寻找命令行或脚本化解决方案来从 SQL Server 2005 中为所有数据库对象提取 DDL 表 存储过程 视图 索引 索引 约束等 GUI 工具不感兴趣 优先选择内置工具 因为它最能与 Oracle 的 DBMS METADATA
  • 适用于 IEEE 802.15.4 的 Wireshark Lua 解析器 - DissectorTable 名称?

    我正在lua中开发wireshark解析器来解析基于802 15 4的自定义协议 不幸的是我无法找出正确的 DissectorTable 名称 table DissectorTable get wpan wpan does not work
  • Lua(命令行)执行后保持打开状态

    我已经广泛寻找这个但我似乎找不到它 有什么方法可以执行Lua通过双击脚本 在中执行它 Lua Command Line 并在执行后保持打开状态 例如 print Hello World 该代码可以编译并运行 但是如果我双击hello lua
  • 不必记住我要拉和推的分支的最佳别名是什么?

    这里非常懒 不喜欢输入太多 特别不喜欢记住我在哪个分支上拉出和推入 我经常犯这样的错误git pull来自非主分支 或者更糟糕的是 进行推送并且目标分支不正确 并且我留下了未推送或未提交的更改 我在我的 bashrc以下别名可以提供帮助 a
  • 在 Lua/LuaFileSystem 中创建一个新文件

    我已经查看了 Lua 和 LuaFileSystem 文档 但尚未找到创建新文件的方法 我也在这里四处寻找 但目的相同 请注意 我正在寻找的解决方案必须与操作系统无关 以确保可移植性 但我很高兴针对不同的系统获得不同的答案 示例 将 Hel
  • 使用 tac 和 sed 反转文件

    我有一个用例 我需要搜索并替换文件中最后一次出现的字符串并将更改写回文件 下面的案例是该用例的简化版本 我正在尝试反转该文件 进行一些更改 再次将其反转并写入该文件 我为此尝试了以下代码片段 tac test sed s a b sed i
  • 如何使用 echo 命令写入并附加到文件

    我正在尝试编写一个脚本 它将使用 echo 并写入 附加到文件 但我的语法中已经有了 字符串 说 echo I am Finding difficult to write this to file gt file txt echo I ca
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一
  • Erlang 中的静态类型检查

    我慢慢地爱上了 Erlang 但只有一个很大很大的问题 我非常喜欢 Standard ML 和 ocaml 等语言 它们具有强大的静态类型检查功能 有没有一种好的 干净的方法来在 erlang 中引入某种静态类型检查 我正在看 type a
  • 在 bash 中添加(收集)退出代码

    我需要依赖于脚本中的几个单独的执行 并且不想将它们全部捆绑在一个丑陋的 if 语句中 我想使用退出代码 每次执行并添加它 最后 如果这个值超过阈值 我想执行一个命令 伪代码 ALLOWEDERROR 5 run something RESU
  • 什么是 .axf 文件?

    我是arm架构的新手 我从事嵌入式软件工作 并试图了解我的项目二进制文件的调试文件夹中存在的 axf文件 发现它是链接器在构建过程中生成的arm可执行格式文件 用于调试崩溃 所以很明显它包含了一些调试信息 但不清楚具体是什么信息 而且deb
  • 在 Lua 中更改元表会破坏冒号运算符

    在学习Lua的过程中 我借用了一些代码here http lua users org wiki StringIndexing使用字符串索引 正是这样 getmetatable index function str i return stri
  • 尝试了解 ARM 二进制映像中的加载内存地址 (LMA) 和二进制文件偏移量

    我在一家ARM 皮质 M4 STM32F4xxxx 我试图了解二进制文件 elf and bin 在内存中构建并闪存 特别是关于内存位置 具体来说 我不明白的是LMA从实际的二进制文件偏移量进行 翻译 让我用一个例子来解释一下 我有一个 e
  • 如何分割字符串并在ant脚本的for循环中使用它?

    我在 ant 属性中有一个机器 IP 列表

随机推荐

  • 从android中的fragment管理工具栏的导航和后退按钮

    我所有的片段都是通过控制的ActionBarActivity mainActivity 在 mainActivity 内DrawerLayout已实现 所有子片段均通过抽屉布局的列表项单击推送 我面临的问题是通过抽屉布局推送片段后我想将抽屉
  • 网络自动化工具

    我意识到我需要一个成熟的浏览器自动化工具来测试用户与我们的 JavaScript 小部件库的交互 我使用 qunit 从单元测试开始 然后我不明智地开始合并越来越多的功能测试 这是一个坏主意 尝试用 JavaScript 模拟大量用户操作
  • 在 python 中比较字符串时忽略空格

    我正在使用 difflib python 包 不管我是否设置isjunk论证 计算出的比率是相同的 是不是忽略了空格的差异isjunk is lambda x x In 193 difflib SequenceMatcher isjunk
  • 如何在Marklogic中使用Group By?

    我想在 xquery 中使用 Group By 有人可以告诉我如何在 Marklogic 中使用 Group By 吗 或者 您可以使用调用 XSLTxdmp xslt invoke or xdmp xslt eval MarkLogic
  • Pydev:将标准输出发送到真实(tty)终端

    跟进上一个问题 子进程 PyDev 控制台与 cmd exe https stackoverflow com questions 10236260 subprocess pydev console vs cmd exe 有没有办法改变 Py
  • 将警告转换为错误

    在 Windows 中 VC 有一个不错的选择 We http msdn microsoft com en us library thxezb7y aspx将特定警告转换为错误 此外 VC 发出的每个警告都有一个警告编号 例如 warnin
  • 如何将 Reader monad 添加到 Scotty 的 monad 中?

    我正在尝试使用 Scotty 构建一个非常简单的 API 我想扩展 Scotty monad 以便我的路由处理程序操作能够访问不变的环境 我相信做到这一点的方法是添加一个Readermonad 到堆栈 现在我只想传递一些Text周围的数据
  • 如何在 php 中添加形状文件 (.shp) 并在 php 文件中使用该形状文件数据?

    我必须在 php 中开发一个项目 并且必须包含形状文件 并且该形状文件需要转换为 kml 文件 我知道如何将形状文件转换为 kml 文件 但我不知道如何将形状文件导入 导入到 php 项目中 我还有包含更多信息的形状文件的支持文件 其中一些
  • 使用python访问google

    我怎样才能访问谷歌 我试过那个代码 urllib urlopen http www google com 但它显示消息prove you are human或者有些人的想法是这样的 有人说尝试用户代理 我不知道 您应该使用谷歌应用程序编程接
  • 在本地计算机上编译 Azure Functions(.csx 文件)

    我正在使用 AzureQueue 触发器模板 最好在本地计算机中编写函数 编译并执行它 然后部署 而不是在 azure 门户中编写它 有什么办法可以做到吗 Thanks Krishh 答案是肯定的 但目前体验并不好 随着我们增强服务 本地开
  • Alamofire HTTPS 10.3 中的更改

    我目前正在一个项目中使用 Alamofire 并且看到了有关具有不同功能的 10 3 beta 的问题 我有一个在 iOS 10 2 模拟器中运行良好的相同项目 我使用自签名证书向 HTTPS url 发出 get 请求 当我在安装了相同证
  • 如何打印 groupby 对象

    我想打印与 Pandas 分组的结果 我有一个数据框 import pandas as pd df pd DataFrame A one one two three three one B range 6 print df A B 0 on
  • CUDA 不支持边界检查

    我尝试使用 Numba 并访问 GPU 以加速代码 但出现以下错误 in jit raise NotImplementedError bounds checking is not supported for CUDA NotImplemen
  • 测试抛出 IntegrityError 的 SQLAlchemy 代码的正确方法是什么?

    我读过了this https stackoverflow com questions 129507 how do you test that a python function throws an exception问答 并且已经尝试捕获我
  • 在 tfs 中看不到上线选项

    我在离线模式下打开了一个解决方案 但现在我尝试上网并连接到 tfs 但我似乎看不到 文件 gt 源代码管理 下的 上网 按钮 我使用 团队 gt 连接到 Team Foundation Server 选项连接到 TFS 但在 文件 gt 源
  • 将字节数组转换为不使用画布的图像数据

    是否可以在不使用画布的情况下将字节数组转换为图像数据 我目前使用类似的东西 但是我认为可以在没有画布的情况下完成 还是我错了 var canvas document getElementsByTagName canvas 0 var ctx
  • jQuery/Javascript - 淡入 div onclick 淡出另一个不起作用

    我想在点击 div 时弹出一个菜单 我在这个 Fiddle 中一切正常 http jsfiddle net EhtrR 825 http jsfiddle net EhtrR 825 但我无法让它在我的代码上工作 HTML div clas
  • 如何创建一个可以点击其他应用程序的自动点击器应用程序?

    我见过很多提供自动点击功能的应用程序 但他们不提供一些特定的定制 所以我决定创建一个 我看过很多提供自动点击的教程 但它们应该在同一个应用程序中使用 但我想创建一个自动点击应用程序 可以单击其他应用程序的视图 我是一名中级java开发人员
  • Delphi 应用程序如何检测 Windows PC 的网络代理设置?

    我有一个 Delphi 应用程序 它使用以下命令与 Internet 上的 Web 服务器进行通信印地组件 http www indyproject org 该应用程序的大多数用户都具有直接的 Internet 连接 但有些用户位于本地网络
  • Lua 作为嵌入式语言的替代品?

    我正在开发一个在 DSP 上运行 Linux 的嵌入式系统 现在我们想让它的某些部分可以编写脚本 并且我们正在寻找一种很好的嵌入式脚本语言 这些脚本应该与我们现有的 C 代码库很好地集成 并且小而快 我知道 Lua 是解决此类问题的行业选择