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

Kotlin

与 Java 同一套写法,语法更短。

在手机上怎么跑

vml run examples/kotlin/test/sysinfo.kt

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

写法要点

示例

文件演示什么
test/catch.kt接方块
test/sysinfo.kt设备信息

同目录还有:app/gomoku.kt、app/minesweeper.kt、app/puzzle15.kt、app/snake.kt、demo/demo_std.kt、fibonacci/main.kt、geometry/main.kt、test/libs.kt、tty/demo_tty.kt、ui/demo_ui.kt

实测踩过的坑


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

语言规范

Kotlin 语言编译器规范说明

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

规范标准

字段值
目标标准Kotlin 1.0+ (最小子集)
发布年份2016
完成度~93%
MCU完成度~91%
测试29 通过
更新2026-05-21: data class toString/equals 实现; sealed class 穷尽性检查升级为编译错误; when 表达式返回值确认已实现

概述

本编译器支持 Kotlin 语言子集,将 Kotlin 源代码编译为 VML 汇编。编译器采用 Lexer → Parser → CodeGenerator 三阶段架构,代码规模约 1200 行 C#。

支持的语言特性

1. 数据类型和字面量
2. 变量声明
3. 函数
4. 控制流
5. 类
6. 内置函数
7. 运算符

代码生成 (VML)

Kotlin 语法VML 指令
val/var 声明STORE 到 R12-relative 局部变量帧
算术运算ADD SUB MUL DIV MOD
条件 if/elseJZ/JNE/JMP + LABEL
while/for 循环LABEL + 比较 + JZ/JMP
when 表达式PUSH 主语; 比较分支条件; JNE 下一个; 匹配则 JMP end
println(x)MOVE R0, x; SYSCALL #6; MOVE R0, #10; SYSCALL #4
类构造SYSCALL #40 堆分配; STORE 属性; RET 返回地址
data class自动生成 toString/equals 方法
函数调用PUSH R15, PUSH R12, MOVE R12 R13 (prologue), 调用者清理 R13
returnMOVE R13 R12, POP R12, POP R15, RET (epilogue)
LambdaPUSH R15/R14, MOVE R14 R13, 闭包体, POP R14, POP R15, RET

缺失功能

高级语言特性
标准库

浮点与64位编译模式

与所有 VML 编译器相同的三参数控制:

参数可选值默认值说明
--float32hard/soft/nonehard32位浮点 (Float)
--float64hard/soft/nonesoft64位浮点 (Double)
--int64hard/soft/nonesoft64位整数 (Long)

编译方式

# 直接编译
dotnet run --project VMLTool -- input.kt -o output.vml

# 运行
dotnet run --project VMLEmulators/ConsoleEmulator -- -r output.vml

完成度评估

组件完成度
词法分析~98% (完整 token 集,含 data 关键字)
语法分析~95% (fun/val/var/if/while/for/when/class/data class/is/in/lambda/range/sealed/when穷尽性)
代码生成~93% (表达式/控制流/字符串/类/data class/Lambda/内联汇编/SafeCall/Elvis/泛型擦除)
标准库~50% (Lib/kotlin/ 基础函数已内联)
总体~93%

🆕 字符串类型 (v1.65.19)

该语言编译器默认使用 .wstring (UTF-16LE) 作为内部字符串存储。

模式默认编码VML 伪指令SYSCALL 输出
MCU (默认).string (UTF-8).string#1
OS.wstring (UTF-16LE).wstring#391

预定义宏: VML_WSTRING — OS 模式下自动定义,MCU 模式未定义 输出函数: OS 模式自动使用 shared_print_wstr (UTF-16LE→UTF-8 自动转换)

// 用户代码可通过宏判断编码
#ifdef VML_WSTRING
  // 默认字符串为 wstring (UTF-16LE)
#else
  // 默认字符串为 UTF-8
#endif

编译器 README

Kotlin 1.0 编译器

路径: VMLPrepares/KotlinCompiler/ 完成度: ~93% | 🟢 生产可用 标准库: Lib/kotlin/(待创建)

功能

缺失功能

编译模式

MCU 模式(默认 --mode mcu)

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

跳过(遇到这些语法不生成代码):

保留(由 BIOS 实现底层):

OS 模式(--mode os,预留)

OS 模式针对带操作系统环境(如 Linux 嵌入式、RTOS 等),届时支持全部语言特性(文件系统、多线程、异步、异常、反射等)。

使用

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

测试

29 测试通过(内嵌在编译器源代码验证中)