BT(BT Programming Language)是一门由 Rust 实现的解释型语言,采用接近 JavaScript 的语法风格,并通过词法分析、语法分析、字节码编译和寄存器式虚拟机执行代码。它面向脚本、Web 服务、桌面应用、网络通信和设备通信等场景,目标是在保持语法直观的同时,让运行时保持轻量、可常驻。
BT 的核心特点是“表达式有值”。函数体、if 代码块、include() 引入的文件和模板片段都会返回最后一条语句的值;函数中也可以使用 return 提前返回。这使 BT 可以用更少的样板代码组织业务逻辑。
BT 源码会先编译成字节码,再由 VM 执行:
BT 源码 ↓ 词法分析 ↓ 语法分析 ↓ 字节码编译 ↓ 寄存器式虚拟机执行
普通脚本由 bt_cli 运行;桌面项目由 bt_app 读取 app.json 后进入 static、server 或 remote 模式;Web 服务通过 net.listen({type:'web'}) 启动,并在请求中注入 web 上下文。
BT 保持类 JS 写法,同时保留代码块返回值语义:
fn level(score) { if score >= 60 { 'pass' } else { 'fail' } } println(level(72))
数组、对象和回调可以链式组合:
users = [ {name:'Lisa', age:18} {name:'Tom', age:25} {name:'Jack', age:16} ] names = users .filter(user -> user.age >= 18) .map(user -> user.name) println(names)
include() 用于读取并执行其他 BT 文件。相对路径基于当前源码文件所在目录解析,@ 表示项目根目录。
config = include('@/config/app.bt') util = include('common/util.bt')
Web 页面可以使用 # TPL 模板文件,在 HTML 中嵌入 BT 表达式和代码片段,适合官网、后台页面和服务端渲染场景。
当前标准库覆盖常用基础能力:
fs:文件读写、复制、移动、删除、目录遍历和路径信息。
net:Web、TCP、UDP、WebSocket、DNS 和本机网络信息。
web:请求上下文读取、响应头、状态码、跳转和 Cookie/Session 回写。
reqwest:HTTP 客户端请求,支持 header、body、json、form、query、multipart、timeout 等链式配置。
device:设备扫描、打开、读写、关闭,当前以串口能力为主。
process:命令参数、环境变量、工作目录和子进程管理。
date、math、md5、base64、mysql:日期、数学、摘要、编码和数据库相关能力。
BT 的 Web 服务通过 net.listen({type:'web'}) 配置站点、入口脚本、静态资源和 SSL:
net.listen({ type:'web' bind:'0.0.0.0:8080' sites:[ { domains:['0.0.0.0'] root:'www/' entry:'main.bt' static:{ route:'/static/{**}' path:'www/static/' } } ] })
请求进入后,入口 BT 文件可以读取 web.get、web.post、web.server、web.cookie、web.session 等上下文,并通过最后一条语句或 print 输出响应内容。
bt_app 是 BT 的桌面应用运行器和打包工具。它读取 app.json 创建窗口,支持:
static:加载项目内 HTML 资源,并通过 bt://app/... 访问打包资源。
server:执行本地 BT Web 服务,再加载本地 HTTP 地址。
remote:加载可信远程页面。
桌面页面会注入 window.bt,前端可以调用 window.bt.call() 执行 main.bt 中的函数,也可以使用窗口、托盘、剪贴板、通知、对话框和拖拽等桌面 API。构建时,bt_app 会把资源写入 exe 尾部 Bundle,便于单文件分发。
net 标准库面向长连接和本地服务,支持 TCP、UDP、WebSocket 服务端/客户端、DNS 解析和本机 IP 查询。事件回调统一使用 on_connect、on_message、on_close、on_error 这类 snake_case 命名。
device 标准库用于设备通信,当前可以扫描和操作串口:
ports = device.scan('serial') println(ports)
BT 把脚本语法、字节码 VM、Web 服务、网络通信、设备访问和桌面打包放在同一套语言体系中。它适合需要快速开发、长期运行、可扩展标准库和轻量部署的项目。