有哪些能在小内存中运行的交互式语言?

75

我正在寻找通用编程语言,需要满足以下条件:

  • 具有交互式(实时编码)提示符
  • 在单独使用时仅需32 KB RAM,或者当编译器托管在另一台机器上时,只需8 KB RAM
  • 可以在仅有8-32 KB RAM总量的微控制器上运行(没有MMU)。

以下是我目前的列表,还缺少哪些?

  • PythonPyMite VM 需要64K闪存,8K RAM。目标是LPC、SAM7和ATmegas,需要8K或更多。托管。
  • LuaeLua FAQ建议256K闪存,64K RAM。
  • FORTHamforth 需要8K闪存,150字节RAM,30字节EEPROM在ATmega上。
  • Schemearmpit Scheme 最小目标是带有32K Flash、4K SRAM的LPC2103。
  • CInteractive C 在68HC11上运行,没有闪存和32K SRAM。托管。
  • Cpicoc 是一个开源的、交叉编译的、交互式的C系统。当编译为AVR时,需要63K闪存,8K RAM。可以通过努力将表保留在闪存中来减少RAM使用。
  • C++: AngelScript 是一个开源的基于字节码、类似于C/C++的脚本语言,易于进行本地调用。
  • Tcl: TinyTCL 可在DOS上运行,二进制文件大小为60K,看起来易于移植。
  • BASIC: TinyBasic:初始化时具有64K堆,可能是可以调整的。
  • Lisp
  • PostScript:(我还没有找到适用于低内存的FOSS实现)
  • Shellbitlash:一个交互式命令 shell,可用于 Arduino (ATmega)。另请参阅 AVRSH

  • 2
    你提到的第四个系统似乎只需要8k的闪存,但是你将其列为128k。我有什么遗漏吗? - SingleNegationElimination
    1. FORTH实现的Flash/RAM数字是针对特定处理器的。
    2. 我不知道stackoverflow上是否有社区维基,我会去查一下。
    - dwhall
    有许多用于嵌入式编程的 Tcl 版本:http://wiki.tcl.tk/1363 - ars
    2
    一个有趣的问题。作为一个嵌入式程序员,我很好奇为什么你想在嵌入式系统上运行交互式提示符。除了“酷炫”的因素外。只要我的嵌入式系统连接到PC,我会尽可能地在PC上进行尽可能多的处理,并在嵌入式设备中保留最少的代码。通常情况下,在PC上实现特定功能比在嵌入式系统中更容易。 - Craig McQueen
    2
    我在大学的机器人选修课中使用了Interactive C。通过6周的交互式提示,我比整个C实验室的一个学期更多地了解了C语言。自1996年以来,我一直在编写Python代码,其交互式提示让我在2天内学会了这种语言(达到了我需要做的程度)。因此,我认为交互式语言非常适合学习和快速原型设计。最后,我是PyMite的首席开发人员,因此我正在寻找同行语言的示例,并从中尽可能多地学习。 - dwhall
    显示剩余2条评论
    16个回答

    10

    自制的Forth运行时可以在非常小的内存中实现。我认识一个人在20世纪70年代在Cosmac上制作了一个。核心运行时只有30个字节


    1
    FORTH已经被列出。这是一条评论,不是答案。 - dwhall

    8
    我听说CHIP-8、XPL0、PicoC和Objective Caml已经移植到了图形计算器上。维基百科的“乐高机器人”文章列出了一堆据称可以在乐高RCX或乐高NXT平台上运行的编程语言。它们中有哪些符合您的“实时编码”标准吗?
    您可能想查看Forth wiki上的其他微控制器Forths。它至少列出了4个Atmel AVR的Forths:amforth(您已经提到过),PFAVR,avrforth和ByteForth。 (这些解释器的链接以及这个StackOverflow问题都包含在“嵌入式系统”Wikibook的“嵌入式系统”中)。


    5
    我建议使用LUA(或eLUAhttp://www.eluaproject.net/)。我之前将LUA“移植”到了Cortex-M3上。从我的经验来看,它的闪存大小为60~100KB,运行时需要约20KB的RAM。我已经将其简化到了最基本的要素,但根据您的应用程序,这可能已经足够了。仍有优化的空间,特别是关于RAM需求,但我怀疑您无法在8KB内轻松运行它。

    谢谢,但是eLua项目已经在我的列表中了(请参见问题中的第二个项目)。 - dwhall

    5

    Wren符合你的标准 - 默认情况下,它配置为仅使用4k RAM。据我所知,它没有实际使用过,因为我为其编写的那个人最终决定不需要在目标系统上运行解释器。

    这种语言最明显受到ML和Forth的影响。


    2
    你考虑过将 C 端口Tiny Basic 移植到你的系统吗?或者,重写 UCSD Pascal p-machine 以适配你的 Z-80 架构?
    话说,JavaScript 可以成为一个很好的嵌入式脚本语言,但我不知道 VM + GC 的最小内存要求是多少,也不知道去除 OS 依赖有多困难。我之前玩过 NJS,可能适合你的需求。这个编译器很有意思,因为它是用 JavaScript 写的(自举)。

    2
    您可以看一下非常强大的AvrCo多任务Pascal for AVR。您可以在http://www.e-lab.de上尝试它。MEGA8/88版本是免费的。有大量的驱动程序和模拟器,带有JTAG调试器和所有标准设备(LCDCHAR、LCDGRAPH、7SEG、14SEG、LEDDOT、KEYBOARD、RC5、SERVO、STEPPER)的漂亮实时或模拟可视化。

    1
    我建议使用MY-BASIC,它可以在最小的8 KB RAM内运行,并且易于移植。

    1

    此外,还有JavaScript,通过Espruino

    这是专门为微控制器构建的,有适用于各种不同芯片(主要是STM32)的版本,可以将整个系统放入仅8kB RAM的空间中。


    1
    你缺少EmbedVM,主页在这里,svn存储库在这里。记得查看首页上的两个视频[1,2] ;)

    从主页开始:

    EmbedVM是一个小型的可嵌入微控制器的虚拟机,具有类似C语言的前端。它已经通过GCC和AVR微控制器进行了测试。但是由于虚拟机相当简单,所以将其移植到其他架构应该很容易。
    该虚拟机模拟了一个可以访问最多64KB内存的16位CPU。它只能操作16位值和16位和8位值的数组。不支持复杂的数据结构(结构体、对象等)。函数最多可以有32个局部变量和32个参数。
    除了虚拟机内存、保存虚拟机状态的小型结构和EmbedVM函数在堆栈上需要的合理数量的内存外,虚拟机没有额外的内存要求。特别是,该虚拟机不依赖于任何动态内存管理。
    EmbedVM针对大小和简单性进行了优化,而不是执行速度。在AVR微控制器上,该虚拟机本身占用约3KB的程序存储器。在运行频率为16MHz的AVR ATmega168上,该虚拟机每毫秒可以执行约75个虚拟机指令。
    虚拟机执行的所有内存访问都使用用户回调函数进行。因此,可以将一些或所有虚拟机内存放在外部存储设备、闪存等上,或将“内存映射”硬件功能映射到虚拟机上。
    编译器是一个UNIX/Linux命令行工具,它读取*.evm文件并生成各种格式的字节码(二进制文件、Intel Hex、C数组初始化程序和特殊的调试输出格式)。它还生成一个符号文件,可用于从主机应用程序中访问VM内存中的数据。
    C语言类似于这样:http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm

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