深入了解 VML 工具链的各个子系统
C / BASIC / Pascal / Python / Lua / Forth / Rust / Go / Ladder / Java / JavaScript / C# / Swift / C++ / Kotlin / Scheme / Ruby / Dart / ObjC / R / D / Fortran — 编译器架构、完成度、代码示例
6502 / Z80 / 8051 / AVR / PIC / MSP430 / PIC24 / ARM-CM / x86 / MIPS / RISC-V / 68000 / PowerPC / SPARC / JVM / .NET / Wasm — 寄存器映射与翻译流程
VMLRuntime 执行引擎、C 跨平台运行时、ConsoleEmulator、FullDevicesEmulator、VMLIde — 运行和调试 VML 程序
VMLTool 主工具、VMLAssembler 汇编器、VMLToHex 烧录工具、VMLPacker 打包器、GenLib 静态库 / GenDyn 动态库 / GenDev 设备代码生成器
SYSCALL 系统调用参考、dl_open/dl_sym 动态加载、native_call 原生调用、OpenGL 旋转立方体示例
Gitee 上的完整源代码、CHANGELOG 更新日志、ROADMAP 路线图、贡献指南
统一的 VML 中间表示 (IR) 连接多语言前端与多架构后端
// hello.c
#include "vmlib.h"
int main() {
puts("Hello from C!");
return 0;
}
# hello.py
print("Hello from Python!")
// hello.rs
fn main() {
println!("Hello from Rust!");
}
// hello.go
package main
func main() {
println("Hello from Go!")
}
// Hello.java
class Hello {
public static void main(String[] args) {
System.out.println("Hello from Java!");
}
}
所有语言的编译命令统一,自动根据扩展名选择编译器。
同一个编译器,既可为桌面 OS 生成 FFI/OpenGL 应用,也可为单片机生成裸机 HEX 固件
vmltool app.c -o app.vml --mode os
vmltool app.c -o app.vml --mode mcu
调用原生动态库,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 汇编翻译到任意 CPU 架构,支持 HEX 烧录
22 种语言实现的 OpenGL 旋转立方体,共用同一个 VML FFI 封装库
每种语言的主循环(以 Go 为例):
func main() {
gl_setup() // 初始化 OpenGL 窗口
for gl_should_close() == 0 { // 检查窗口是否关闭
gl_frame() // 渲染一帧
}
gl_teardown() // 清理资源
}
22 种语言编译到 WebAssembly,在浏览器中绘制 Canvas2D 多边形
每种语言绘制相同的 3 个多边形:红色三角形 + 蓝色矩形 + 绿色五边形,深蓝背景
git clone https://gitee.com/aleckstygit/vml.gitdotnet build VMLToolchain.slnvmltool hello.c -o hello.vml
vmltool -r hello.vml