jingoro2112/wrench
GitHub: jingoro2112/wrench
一个超轻量级的嵌入式脚本解释器,解决在资源受限设备上运行脚本的内存和空间问题。
Stars: 150 | Forks: 16
https://home.workshopfriends.com/wrench/www
一个功能齐全的编译器+解释器,仅使用极少的RAM和程序空间。
极少到什么程度?wrench虚拟机编译后在Arduino上大小约为28K,运行时使用不到700字节的RAM,完全可以在Uno Mini上运行。
亮点:
- 弱类型,支持原生32位整型、浮点型和字符串。
- 使用熟悉的C语言语法,编写代码轻松。
- 优化的编译器和极快的虚拟机。
- 生成紧凑、字节码大小端无关:随处编译,随处运行。
- 可以从ROM执行,不会创建代码的本地副本。
- 支持多个并发上下文。
- 编写代码简单,想象一下去掉类型名的C语言;差不多就是这样。
- 支持一个优秀解释器应有的一切:if/then/else/do/while/for/switch/函数/运算符/等等...
- 是的,也支持结构体。
- 是的,支持switch(并且不,它不是if-else的语法糖)。
- 可以直接操作数据,并暴露所有静态值供外部直接操作。
- 可以以最小开销与原生代码互相调用。
- API设计为易于扩展,这正是关键所在!
- 内存有垃圾回收,但仅用于动态数组。除非你在分配/释放数组,否则GC_绝不会_运行。
- 包含一个方便的命令行工具。
- 易于集成,这是一个完整示例:
----- 步骤 1:整个源代码树都已包含,但封装在两个文件中:src/wrench.h 和 src/wrench.cpp。只需在你的构建中包含它们,你就拥有了所有内容。
----- 步骤 2:这是一个完整的源代码示例:
```cpp
#include
#include
#include
void print( WRContext* c, const WRValue* argv, const int argn, WRValue& retVal, void* usr )
{
char buf[1024];
for( int i=0; i
标签:API设计, Arduino开发, C++语言, ROM执行, switch语句, 代码集成, 优化编译, 低内存占用, 动态数组, 原生代码调用, 可移植性, 垃圾回收机制, 多上下文支持, 字节码生成, 实用脚本工具, 嵌入式系统, 嵌入式编程, 嵌入式脚本, 并发执行, 快速执行, 端序中立, 结构体支持, 编译器技术, 脚本解释器, 脚本语言开发, 虚拟机优化, 虚拟机实现, 资源高效, 轻量级设计