介绍
介绍
BT(BT Programming Language)是一门由 Rust 实现的解释型语言,采用接近 JavaScript 的语法风格,并通过词法分析、语法分析、字节码编译和寄存器式虚拟机执行代码。它面向脚本、Web 服务、桌面应用、网络通信和设备通信等场景,目标是在保持语法直观的同时,让运行时保持轻量、可常驻。
BT 的核心特点是“表达式有值”。函数体、if 代码块、include() 引入的文件和模板片段都会返回最后一条语句的值;函数中也可以使用 return 提前返回。这使 BT 可以用更少的样板代码组织业务逻辑。
设计目标
- 类 JavaScript 的直观语法,降低学习成本。
- 字节码加寄存器式 VM 执行,减少解释器热路径开销。
- 标准库按对象能力拆分,支持链式调用和按需扩展。
- 支持 CLI、Web 服务和桌面 App 三种主要运行环境。
- 适合常驻内存服务,缓存和后台任务必须可控。
执行机制
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:设备扫描、打开、读写、关闭,当前以串口能力为主。 -
bytes:二进制字节值,服务串口、网络和工业协议边界。 -
modbus:Modbus RTU/TCP 请求帧、响应解析和 CRC16 辅助能力。 -
process:命令参数、环境变量、工作目录和子进程管理。 -
date、math、md5、base64、mysql:日期、数学、摘要、编码和数据库相关能力。
Web 服务
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 命名。二进制回调可通过 binary: true 返回 Bytes。
device 标准库用于设备通信,当前可以扫描和操作串口:
ports = device.scan('serial') println(ports)
应用场景
- CLI 脚本和自动化工具。
- Web 网站、后台管理系统和 API 服务。
- 桌面应用、本地工具和 WebView 壳应用。
- TCP、UDP、WebSocket 长连接服务。
- 串口设备控制、Modbus 工业自动化和物联网原型。
总结
BT 把脚本语法、字节码 VM、Web 服务、网络通信、设备访问和桌面打包放在同一套语言体系中。它适合需要快速开发、长期运行、可扩展标准库和轻量部署的项目。