← 都来码← 文档索引27 种语言原文English

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能写,但别指望完整的标准库。
DC 风格的语法,写起来比 C 宽松一些。
Dart写法接近,外部函数用 external 声明。
Python写起来最快的一门。语法几乎就是桌面 Python,改一行跑一次很舒服。
JavaScript写法接近,但入口要自己调一次。
Lua轻快的小语言,写小游戏很舒服,编译也快。
Ruby能写,但这个前端支持的特性最少 —— 完全平铺着写。
R向量语言,写法与桌面 R 接近。
Pascal结构清楚,写游戏状态机很合适。
Fortran科学计算那套写法在这里也能用。
BASIC老式写法,命令式一行一行往下走。
Forth栈式语言,写起来完全是另一种思路。
SchemeLisp 方言,括号就是一切。
Ada静态强类型,骨架像 Pascal 但语法独立(is … begin … end、procedure / function、loop … exit when、一基数组)。
COBOL两种书写格式都收(经典固定格式与自由格式,自动判别)。执行模型是 COBOL 的段落与落穿:主流程把每段按顺序 CALL 一遍,PERFORM 就是 CALL。
dBasexBase 系(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 即可。)