v1.65.14

VML Toolchain

22 种语言 × 17 种架构 — 统一的编译器工具链

一套"多前端 → 统一 IR → 多后端"的编译器系统。
写 C / Python / Rust / Go / Java … 任意语言,编译到 VML 汇编,
再翻译到 6502 / ARM / RISC-V / x86 … 任意架构。

22语言前端
17目标后端
3820+测试用例
35C# 项目
~200K代码行数

文档导航

深入了解 VML 工具链的各个子系统

架构总览

统一的 VML 中间表示 (IR) 连接多语言前端与多架构后端

源代码
.c.bas.pas .py.lua.fth .rs.go.ld .java.js.cs .swift.cpp.kt .scm.rb.dart .m.r.d.f90
↓ 22 个前端编译器 ↓
统一 IR
VML 汇编 (.vml) → VMB 二进制 (.vmb)
↓ 17 个后端翻译器 ↓
目标平台
6502Z808051 AVRPICMSP430 PIC24ARM-CMx86 MIPSRISC-V68000 PowerPCSPARC JVM.NET

快速开始

C 语言
Python
Rust
Go
Java

源代码 → VML → 运行

// hello.c
#include "vmlib.h"

int main() {
    puts("Hello from C!");
    return 0;
}
$ vmltool hello.c -o hello.vml
$ vmltool -r hello.vml
Hello from C!

Python 源码 → VML → 运行

# hello.py
print("Hello from Python!")
$ vmltool hello.py -o hello.vml
$ vmltool -r hello.vml
Hello from Python!

Rust 源码 → VML → 运行

// hello.rs
fn main() {
    println!("Hello from Rust!");
}
$ vmltool hello.rs -o hello.vml
$ vmltool -r hello.vml
Hello from Rust!

Go 源码 → VML → 运行

// hello.go
package main

func main() {
    println("Hello from Go!")
}
$ vmltool hello.go -o hello.vml
$ vmltool -r hello.vml
Hello from Go!

Java 源码 → VML → 运行

// Hello.java
class Hello {
    public static void main(String[] args) {
        System.out.println("Hello from Java!");
    }
}
$ vmltool Hello.java -o Hello.vml
$ vmltool -r Hello.vml
Hello from Java!

所有语言的编译命令统一,自动根据扩展名选择编译器。

MCU / OS 双模式

同一个编译器,既可为桌面 OS 生成 FFI/OpenGL 应用,也可为单片机生成裸机 HEX 固件

OS 模式

  • 动态库加载 (FFI dl_open/dl_sym)
  • OpenGL / GLFW 图形
  • 完整 C 标准库
  • malloc / free / 文件 I/O
vmltool app.c -o app.vml --mode os

MCU 模式

  • 零依赖裸机固件
  • VML → ASM → HEX 烧录
  • 跳过 async / Thread / GC
  • BIOS 保留 malloc / 文件 I/O
vmltool app.c -o app.vml --mode mcu

FFI 外部函数接口

调用原生动态库,22 种语言用原生语法即可调用 C 库函数,无需手写汇编

// C 语言调用 OpenGL 旋转立方体
void gl_setup();
int  gl_should_close();
void gl_frame();
void gl_teardown();

int main() {
    gl_setup();
    while (!gl_should_close()) gl_frame();
    gl_teardown();
}
VML 程序→SYSCALL #370 dl_open→#371 dl_sym→#373/375 native_call→原生 .dylib/.so

17 个目标架构后端

VML 汇编翻译到任意 CPU 架构,支持 HEX 烧录

65028-bitApple II / 复古计算
Z808-bitCP/M / ZX Spectrum
80518-bit嵌入式 MCU
AVR8-bitArduino
PIC8-bitMicrochip MCU
MSP43016-bitTi 超低功耗
PIC2416-bitMicrochip 16位
ARM-CM32-bitSTM32 嵌入式
x8632-bit通用 PC
MIPS32-bit网络设备 / 教学
RISC-V32-bit开源 ISA
6800032-bit复古计算
PowerPC32-bit嵌入式 / 游戏机
SPARC32-bit工作站
JVMVMJava 字节码
.NETVMCLR 平台
WasmVM浏览器 / WebAssembly

OpenGL 旋转立方体

22 种语言实现的 OpenGL 旋转立方体,共用同一个 VML FFI 封装库

CC++BASICPascal PythonLuaRustGo JavaJavaScriptC#Swift KotlinForthLadderScheme RubyDartObjCRDFortran
每种语言的主循环(以 Go 为例):
func main() {
    gl_setup()                       // 初始化 OpenGL 窗口
    for gl_should_close() == 0 {    // 检查窗口是否关闭
        gl_frame()                     // 渲染一帧
    }
    gl_teardown()                     // 清理资源
}

WASM 浏览器多边形 Demo

22 种语言编译到 WebAssembly,在浏览器中绘制 Canvas2D 多边形

22 语言源码.c .py .rs .go .java …
→
VML 编译器VML 汇编
→
TranslatorWasmWAT → WASM
→
浏览器Canvas2D 渲染

每种语言绘制相同的 3 个多边形:红色三角形 + 蓝色矩形 + 绿色五边形,深蓝背景

开始使用

1
git clone https://gitee.com/aleckstygit/vml.git
2
dotnet build VMLToolchain.sln
3
vmltool hello.c -o hello.vml
vmltool -r hello.vml