27 种语言
同一套 VML 接口,27 个前端都能用。你熟悉哪门就用哪门写,编出来的东西跑在同一台虚拟机上。
每种语言一份说明
点进任意一门,里面有它的语言规范(语法/类型/标准库)、这个前端支持什么、以及实测踩过的坑 —— 后两类是直接从 VML 源码各编译器的 README.md / <语言>_LANGUAGE_SPEC.md 带过来的,上游一改、这里重新生成就是最新的。
| 语言 | 一句话 |
|---|---|
| C | 最完整的一条路:绘图、输入、音效、存档、手柄全都用得上。仓库里那几个完整的游戏(俄罗斯方块、五子棋、吃豆人)都是 C 写的。 |
| C++ | 与 C 同一套接口,可以写类。适合把游戏逻辑整理成对象。 |
| C# | 写得像桌面 C#,入口固定是一个叫 P 的类。 |
| Objective-C | 语法是 C 的超集,UI 接口用法与 C 完全相同。 |
| Java | 写法与桌面 Java 接近,外部函数用 native 声明。 |
| Kotlin | 与 Java 同一套写法,语法更短。 |
| Swift | 写法自然,示例里那个飞机大战是完整可玩的。 |
| Go | 写法与桌面 Go 接近,示例里的贪吃蛇是完整游戏。 |
| Rust | 能写,但别指望完整的标准库。 |
| D | C 风格的语法,写起来比 C 宽松一些。 |
| Dart | 写法接近,外部函数用 external 声明。 |
| Python | 写起来最快的一门。语法几乎就是桌面 Python,改一行跑一次很舒服。 |
| JavaScript | 写法接近,但入口要自己调一次。 |
| Lua | 轻快的小语言,写小游戏很舒服,编译也快。 |
| Ruby | 能写,但这个前端支持的特性最少 —— 完全平铺着写。 |
| R | 向量语言,写法与桌面 R 接近。 |
| Pascal | 结构清楚,写游戏状态机很合适。 |
| Fortran | 科学计算那套写法在这里也能用。 |
| BASIC | 老式写法,命令式一行一行往下走。 |
| Forth | 栈式语言,写起来完全是另一种思路。 |
| Scheme | Lisp 方言,括号就是一切。 |
| Ada | 静态强类型,骨架像 Pascal 但语法独立(is … begin … end、procedure / function、loop … exit when、一基数组)。 |
| COBOL | 两种书写格式都收(经典固定格式与自由格式,自动判别)。执行模型是 COBOL 的段落与落穿:主流程把每段按顺序 CALL 一遍,PERFORM 就是 CALL。 |
| dBase | xBase 系(dBASE III/IV、FoxPro、Clipper 风格)的 .prg:IF / DO WHILE / FOR / DO CASE、PROCEDURE / FUNCTION / RETURN / DO … WITH,以及一组字符串 / 数值内置函数。 |
| Perl | 「完整运算 + 控制流 + 函数调用」那一档:数组(@a)、哈希(%h)、子程序、字符串处理、循环、递归都能写 —— 覆盖到词频统计那种规模。 |
| PHP | 能写一般程序的子集:<?php … ?> 标签(标签外按 HTML 原样输出,没有任何开标签时整份文件当 PHP)、$变量、echo / print、完整算术 / 比较 / 逻辑 / 位运算、if / while / do-while / for / foreach / switch、函数(含默认参数、递归、global)、下标数组([] 与 array() 两种字面量)。 |
| Ladder | 梯形图(PLC)风格的前端 —— 它做不了手机界面程序。 |
先跑一个看看
vml run examples/c/app/tetris.c # 俄罗斯方块
vml run examples/python/app/tetris.py # 同一个游戏,Python 版
vml run examples/c/app/gomoku.c # 五子棋
vml run examples/lua/app/life.lua # 生命游戏
vml run examples/basic/app/whack.bas # 打地鼠
多数语言目录下还有一个 sysinfo.<扩展名>,它调用 ui_call_json("sysinfo", "") 把设备信息打出来 —— 想知道这门语言能不能用,先跑它。(Ada / COBOL / dBase / Perl / PHP 这五门暂时还没有它,跑它们各自的 hello / fizzbuzz 即可。)