← 都来码← 文档索引Ruby原文English

Ruby

能写,但这个前端支持的特性最少 —— 完全平铺着写。

在手机上怎么跑

vml run examples/ruby/test/sysinfo.rb

编译要等一会儿(C 那种要一两分钟,脚本类语言几秒)。程序跑起来后屏幕底部就是手柄,方向键 + 四个动作键都在;点右上角返回可以回到命令行。

写法要点

示例

文件演示什么
test/catch.rb接方块(完全平铺的一份,这一路写不了函数)
test/file_io.rb读写文件
test/sysinfo.rb设备信息

同目录还有:app/invaders.rb、app/minesweeper.rb、demo/demo_std.rb、stringutil/main.rb、test/libs.rb、tty/demo_tty.rb、ui/demo_ui.rb

实测踩过的坑


下面的内容是从 VML 源码里直接带的(third_party/vml/VMLPrepares/RubyCompiler/): README 讲这个前端支持什么、怎么编;语言规范 讲语法本身。上游一改,这里重新生成就是最新的。

语言规范

Ruby 语言编译器规范说明

版本:v1.0 | 日期:2026-07-06 | 修订者:深圳市探索智能科技有限公司

规范标准

字段值
目标标准Ruby 1.9+ 子集
发布年份1995 (Ruby 1.9: 2007)
完成度~96%
文件扩展名.rb

概述

本编译器支持 Ruby 语言的核心子集,将 Ruby 源代码编译为 VML (Virtual Machine Language) 汇编代码。编译器流程:预处理 → 词法分析 → 语法分析 → 代码生成。

支持的语言特性

1. 数据类型
2. 变量
x = 10           # 局部变量
@x = 20          # 实例变量 (已识别但功能受限)
name = "hello"   # 字符串变量
3. 运算符
算术运算符
+    # 加法
-    # 减法
*    # 乘法
/    # 除法
%    # 取模
**   # 幂运算
复合赋值
+=   # 加后赋值
-=   # 减后赋值
*=   # 乘后赋值
/=   # 除后赋值
比较运算符
==   # 等于
!=   # 不等于
<    # 小于
>    # 大于
<=   # 小于等于
>=   # 大于等于
<=>  # 飞船运算符 (比较结果 -1/0/1)
逻辑运算符
!    # 逻辑非 (not)
4. 控制流
条件语句
if condition
  # then body
elsif other_condition
  # elsif body
else
  # else body
end

unless condition
  # then body (条件为假时执行)
end
循环语句
while condition
  # loop body
end

until condition
  # loop body (条件为假时重复)
end
for 循环
for var in start..end
  # loop body
end
5. 方法定义
def method_name(param1, param2)
  # method body
  return value
end

def method_name  # 无参数方法
  # body
end
6. 类定义
class ClassName
  def method_name
    # method body
  end
end

类在内部被编译为带 self. 前缀的方法,self 存储为第一个局部变量。

7. 返回值
return value     # 带返回值
return           # 返回 nil
8. 方法调用
method_name(arg1, arg2)
object.method_name(arg1)
method_name       # 无参数调用
9. 注释
# 单行注释

表达式优先级

优先级类型运算符
1 (最低)赋值= += -= *= /=
2比较== != < > <= >= <=>
3加法+ -
4乘法* / % **
5一元- !
6 (最高)主表达式字面量、变量、函数调用、括号

预定义宏

宏名值
__VML__1
__VML_VERSION__"1.65.32"
__RUBY__1
__DATE__编译日期
__TIME__编译时间

已知限制


🆕 字符串编码 (v1.65.19)

该语言编译器通过共享库 (Lib/shared/) 间接使用 VML 字符串体系。

伪指令宽度编码C 类型
.string8-bitUTF-8char*
.wstring16-bitUTF-16LEwchar_t*
.ustring32-bitUTF-32LEchar32_t*

MCU 模式 (默认): 字符串输出为 UTF-8 (.string) OS 模式: 可通过 VML_WSTRING 宏判断编码

共享库已提供宽字符串转换函数 (wchar.h/uchar.h),各语言编译器可按需使用。

编译器 README

Ruby 编译器

路径: VMLPrepares/RubyCompiler/ 完成度: ~96% | 🟢 生产可用 标准库: Lib/ruby/

功能

编译模式

MCU 模式(默认 --mode mcu)

MCU 模式针对单片机/裸机环境优化,自动跳过不兼容操作系统的特性。

跳过(MCU 不支持):

保留(BIOS 实现底层):

OS 模式(--mode os)

OS 模式支持全部语言特性(文件系统、多线程等)。

RAM 级别

使用

dotnet run --project VMLTool -- input.rb -o output.vml

测试