BT编程语言文档

介绍

BT(BT Programming Language)是一门由 Rust 实现的解释型语言,采用接近 JavaScript 的语法风格,并通过词法分析、语法分析、字节码编译和寄存器式虚拟机执行代码。它面向脚本、Web 服务、桌面应用、网络通信和设备通信等场景,目标是在保持语法直观的同时,让运行时保持轻量、可常驻。

BT 的核心特点是“表达式有值”。函数体、if 代码块、include() 引入的文件和模板片段都会返回最后一条语句的值;函数中也可以使用 return 提前返回。这使 BT 可以用更少的样板代码组织业务逻辑。

设计目标

  • 类 JavaScript 的直观语法,降低学习成本。
  • 字节码加寄存器式 VM 执行,减少解释器热路径开销。
  • 标准库按对象能力拆分,支持链式调用和按需扩展。
  • 支持 CLI、Web 服务和桌面 App 三种主要运行环境。
  • 适合常驻内存服务,缓存和后台任务必须可控。

执行机制

BT 源码会先编译成字节码,再由 VM 执行:

普通脚本由 bt_cli 运行;桌面项目由 bt_app 读取 app.json 后进入 staticserverremote 模式;Web 服务通过 net.listen({type:'web'}) 启动,并在请求中注入 web 上下文。

基础语法

BT 保持类 JS 写法,同时保留代码块返回值语义:

数组、对象和回调可以链式组合:

模块与模板

include() 用于读取并执行其他 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:命令参数、环境变量、工作目录和子进程管理。
  • datemathmd5base64mysql:日期、数学、摘要、编码和数据库相关能力。

Web 服务

BT 的 Web 服务通过 net.listen({type:'web'}) 配置站点、入口脚本、静态资源和 SSL:

请求进入后,入口 BT 文件可以读取 web.getweb.postweb.serverweb.cookieweb.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_connecton_messageon_closeon_error 这类 snake_case 命名。

device 标准库用于设备通信,当前可以扫描和操作串口:

应用场景

  • CLI 脚本和自动化工具。
  • Web 网站、后台管理系统和 API 服务。
  • 桌面应用、本地工具和 WebView 壳应用。
  • TCP、UDP、WebSocket 长连接服务。
  • 串口设备控制、工业自动化和物联网原型。

总结

BT 把脚本语法、字节码 VM、Web 服务、网络通信、设备访问和桌面打包放在同一套语言体系中。它适合需要快速开发、长期运行、可扩展标准库和轻量部署的项目。