# BT编程语言
**Repository Path**: bt-lang/bt
## Basic Information
- **Project Name**: BT编程语言
- **Description**: BT是一种基于Rust构建的轻量级解释语言,以单个二进制文件的形式分发。
单个.bt文件可以为脚本或web服务提供动力,而bt还可以用于跨Windows、Linux和macOS构建CLI工具和桌面应用程序。
PHP的现代替代品,专注于性能、简单性和易于部署。
- **Primary Language**: Rust
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: https://btlang.org
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-29
- **Last Updated**: 2026-09-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
BT 是一门使用 Rust 实现的轻量级解释型编程语言。源码以类 JavaScript 语法编写并编译为寄存器式字节码,同一套运行时可用于命令行程序、Web 服务、桌面应用、原生 FFI 和可安装扩展。
## 核心特点
- **语法直观**——支持类 JavaScript 表达式、函数、类、闭包、解构和链式 API。
- **寄存器式虚拟机**——源码先编译为字节码,再由 VM 执行。
- **一套运行时,多种场景**——可开发 CLI 工具、并发 Web 服务和可打包桌面应用。
- **明确的空值语义**——`empty` 表示值不存在,`null` 始终保留为显式值。
- **可扩展设计**——支持原生 FFI、WASM/WASI 扩展、纯 BT 扩展和对象绑定。
- **面向常驻服务**——通过有界运行时资源和可观测统计支持长期运行负载。
## 初识 BT
```bt
fn greet(name) {
'Hello, ' + name
}
// 输出:Hello, BT
print greet('BT')
```
BT 中每个表达式都有运行时结果。花括号多行代码块默认返回最后一条语句的结果,函数仍可使用 `return` 提前返回。
BT 还明确区分两种空值:
- `empty` 表示“值不存在”,例如字段缺失、下标越界或函数没有结果。
- `null` 是明确存在的空值,用于 JSON null、数据库 NULL 或转换失败。
## 快速开始
先安装稳定版 Rust 工具链,然后在仓库根目录直接运行已经提交的 BT 示例:
```text
cargo run --release --bin bt -- -c examples/compat/empty-null.bt
```
当前目录存在 `main.bt` 时,直接运行 `bt` 会执行该文件;不存在时进入交互模式。
运行基础桌面示例:
```text
cargo run --release --features desktop --bin bt-app -- run examples/desktop
```
### 为当前用户安装解释器
此功能待下一版本发布。使用包含该功能的构建,在解压目录中执行:Linux/macOS 使用 `./bt install`,Windows PowerShell 使用 `.\bt.exe install`。使用 `bt update` 联网检查官网并把已有用户安装更新到最新正式版。在 `bt>` 交互提示符中输入 `install` 或 `update` 也可执行。已移除原 `--install` 别名。使用 `bt update [--project ]` 更新已安装的官方扩展,不会降级。`bt install ` 继续用于安装官方扩展。
安装会把当前解释器复制到 Windows 的 `%USERPROFILE%\.bt\bin\bt.exe`、Linux 的 `~/.local/bin/bt` 或 macOS 的 `~/.bt/bin/bt`,并配置用户 `PATH`;完成后请打开新终端。只有语义版本较新的解释器才会替换安装版,同版或旧版保留已安装二进制。直接运行下载的旧版二进制时,仍然使用该旧版。
如果 Windows 报告安装文件正在使用,请关闭使用该文件的程序,并从下载的解释器重试;替换失败会保留安装文件。安装程序不会强制结束程序。遇到权限或手动修改 shell 配置的问题时,请按提示修复,再执行 `install` 完成此前未完成的集成。
安装还会为 `.bt` 文件注册已安装的解释器。Windows 使用用户级文件关联;Linux 在有桌面会话时创建终端桌面启动器;macOS 生成 `~/Applications/BT.app`,作为 Finder 和终端之间的辅助入口。ZIP 仍保留独立解释器,无须额外放入应用包。系统可能要求用户选择一次 BT 作为默认打开方式。通过该关联打开的脚本执行完成、报错或调用 `exit()` 后,启动器会等待按 Enter,不修改源码,也不追加 `pause()`。
安装只由显式命令触发:双击解释器、执行脚本以及其他软件调用均不会检查安装状态、`PATH` 或安装版本。普通脚本执行不会额外暂停退出。平台细节见[环境搭建](https://btlang.org/zh-hans/docs/build)。
## AI 知识库
[BT AI 知识库](https://btlang.org/ai)是提供给 AI 助手和编程智能体使用的官方机器可读入口。它通过可发现的清单和按主题拆分的知识模块,提供带版本的 BT 语言语义、标准库 API、Web 与桌面开发、扩展、FFI 及项目约束说明。当你让 AI 编写、审查或解释 BT 代码时,可以把这个链接交给它,并要求它只读取与当前任务有关的模块;这样既能让结果遵循最新版 BT 规范,也不会让无关文档占用过多上下文。
例如,可以在提示词中加入:
```text
处理这个 BT 任务前,请先阅读 https://btlang.org/ai,然后只加载与任务相关的知识模块。
```
## 编译与测试
| 目标 | 命令 |
|---|---|
| CLI 运行时 | `cargo build --release --bin bt` |
| 桌面运行时 | `cargo build --release --features desktop --bin bt-app` |
| 默认测试 | `cargo test` |
| 桌面功能测试 | `cargo test --features desktop` |
Windows 桌面构建需要 MSVC 工具链、Windows SDK 和 WebView2 Runtime。CI 使用的 Linux、macOS 依赖可查看[发布工作流](.github/workflows/build.yml)。
在包含 `app.json` 的桌面项目目录中,可使用已编译的运行时生成独立可执行文件:
```text
path/to/bt-app build
```
## 示例
下表覆盖 [`examples/`](examples/) 中的全部顶层条目。其中既有面向使用者的完整示例,也有针对回归、压力和验收场景的测试夹具。
### 语言与运行时
| 示例 | 简介 |
|---|---|
| [`compat/`](examples/compat/) | 覆盖代码块返回值、类与闭包、解构、`empty`/`null` 和标准库 snake_case 命名的语义回归脚本。 |
| [`bytes-modbus.bt`](examples/bytes-modbus.bt) | 构造 Modbus TCP 请求帧并解析包含寄存器数据的二进制响应。 |
| [`permission-stats.bt`](examples/permission-stats.bt) | 验证权限允许/拒绝配置及运行时拒绝计数。 |
| [`process-pipe.bt`](examples/process-pipe.bt) | 启动子进程并读取标准输出、标准错误和退出信息。 |
| [`reqwest-pool-bench.bt`](examples/reqwest-pool-bench.bt) | 重复请求本地 HTTP 地址并输出连接池复用统计。 |
| [`runtime-pools-stats.bt`](examples/runtime-pools-stats.bt) | 输出 HTTP、MySQL 连接池上限和当前事务状态。 |
| [`runtime-stats.bt`](examples/runtime-stats.bt) | 读取共享运行时及有界 I/O 配置的最小状态快照。 |
### 网络与 Web
| 示例 | 简介 |
|---|---|
| [`net-phase2-tcp-server.bt`](examples/net-phase2-tcp-server.bt) | 启动带连接、消息、关闭和错误回调的事件驱动 TCP 回显服务。 |
| [`net-phase2-tcp-client.bt`](examples/net-phase2-tcp-client.bt) | 连接 TCP 示例服务,完成一次消息收发后关闭连接。 |
| [`net-phase2-udp-server.bt`](examples/net-phase2-udp-server.bt) | 启动 UDP 回显 socket,并按来源地址返回消息。 |
| [`net-phase2-udp-client.bt`](examples/net-phase2-udp-client.bt) | 向本地 UDP 示例发送一个数据报。 |
| [`net-phase2-ws-server.bt`](examples/net-phase2-ws-server.bt) | 创建包含生命周期回调和回显消息的 WebSocket 路由。 |
| [`net-phase2-ws-client.bt`](examples/net-phase2-ws-client.bt) | 连接 WebSocket 示例并异步处理服务端消息。 |
| [`net-phase3-stats.bt`](examples/net-phase3-stats.bt) | 查看有界网络队列、消息限制和空闲超时配置。 |
| [`net-phase3-tcp-burst-client.bt`](examples/net-phase3-tcp-burst-client.bt) | 连续发送一组 TCP 请求,验证重复收发处理。 |
| [`net-stress-tcp-server.bt`](examples/net-stress-tcp-server.bt) | 对持续 TCP 消息负载进行计数和回显,用于压力验证。 |
| [`net-stress-tcp-client.bt`](examples/net-stress-tcp-client.bt) | 通过重复连接和批量载荷驱动 TCP 压力服务。 |
| [`net-stress-udp-server.bt`](examples/net-stress-udp-server.bt) | 持续统计高频 UDP 数据报,直到收到明确的停止消息。 |
| [`net-stress-udp-client.bt`](examples/net-stress-udp-client.bt) | 发送带编号载荷的高频 UDP 压力数据。 |
| [`net-stress-ws-server.bt`](examples/net-stress-ws-server.bt) | 对 WebSocket 消息进行回显和计数,验证长连接负载。 |
| [`net-stress-ws-client.bt`](examples/net-stress-ws-client.bt) | 驱动 WebSocket 压力服务并校验回显响应。 |
| [`net-web/`](examples/net-web/) | 通过 `net.listen({type: 'web'})` 和本地站点入口启动 BT Web 引擎。 |
| [`web-blocking-policy/`](examples/web-blocking-policy/) | 演示 Web 请求处理中允许或拒绝的阻塞操作边界。 |
| [`longrun-audit/`](examples/longrun-audit/) | 组合本地 Web 服务与探针负载,用于长期运行资源审计。 |
### 桌面应用
| 示例 | 简介 |
|---|---|
| [`desktop/`](examples/desktop/) | 小型日记本应用,展示静态前端和 `window.bt.call()` 后端桥接。 |
| [`desktop-api/`](examples/desktop-api/) | 验证通过 `window.bt` 暴露的公开桌面 API。 |
| [`desktop-dev-reload/`](examples/desktop-dev-reload/) | 演示资源监听、排除规则和开发期热刷新。 |
| [`desktop-html/`](examples/desktop-html/) | 不使用 BT 后端,直接打包 HTML、CSS 和 JavaScript 前端应用。 |
| [`desktop-icon-appjson/`](examples/desktop-icon-appjson/) | 验证通过 `app.json` 配置应用图标。 |
| [`desktop-icon-html/`](examples/desktop-icon-html/) | 验证带 HTML 入口和 ICO 资源的静态应用打包。 |
| [`desktop-remote/`](examples/desktop-remote/) | 加载远程网页,同时保留本地 BT 桥接能力。 |
| [`desktop-server/`](examples/desktop-server/) | 启动本地 BT 服务并在桌面窗口中加载页面。 |
| [`desktop-starter-cdp/`](examples/desktop-starter-cdp/) | 用于 WebView2 CDP 桥接验收的初始化项目夹具。 |
| [`desktop-starter-auto-cdp/`](examples/desktop-starter-auto-cdp/) | 验证自动创建初始化项目及首次 CDP 启动流程。 |
| [`desktop-starter-auto-cdp2/`](examples/desktop-starter-auto-cdp2/) | 重复自动初始化与 CDP 流程,覆盖后续启动行为。 |
### 扩展、FFI 与设备
| 示例 | 简介 |
|---|---|
| [`device-serial.bt`](examples/device-serial.bt) | 通过设备 API 扫描当前可用的串口。 |
| [`extension-development/`](examples/extension-development/) | 包含 shared WASM 运行时超时测试夹具。官方扩展源码统一维护在 [`extension/`](extension/README.md)。 |
| [`ffi-testlib/`](examples/ffi-testlib/) | 使用完整 FFI 签名调用跨平台原生测试库,并包含长稳检查。 |
| [`ffi-user32/`](examples/ffi-user32/) | 演示在 Windows 上使用推断签名和完整签名调用 `user32.dll`。 |
## 仓库结构
| 路径 | 用途 |
|---|---|
| `.github/` | 对外 CI 工作流、贡献指南和 README 资源。 |
| `src/` | 词法、语法、编译器、字节码 VM、标准库、Web、桌面和 Bundle 核心源码。 |
| `src-tauri/` | Tauri 配置、权限、能力和编译所需的最小前端占位页。 |
| `crates/` | Cargo 工作区内的扩展 SDK 与原生 FFI 测试库。 |
| [`extension/`](extension/README.md) | 独立构建的官方扩展库,包含 SQLite 源码与回归测试。 |
| `src-tauri/icons/` | 编译期嵌入 `bt` 和 `bt-app` 的图标。 |
| `examples/` | 供使用者、贡献者和 CI 运行的语言、扩展、Web 与桌面示例。 |
| `benches/` | 可重复执行的质量与性能工作负载。 |
| `tools/quality/` | 对外公开的回归、基准和长稳验证脚本。 |
## 文档与贡献
- 阅读[简体中文文档](https://btlang.org/zh-hans/docs/index)或 [English documentation](https://btlang.org/en/docs/index)。
- 提交 Pull Request 前请先查看[贡献指南](.github/CONTRIBUTING.md)。
- 所有项目交流均应遵守[行为准则](CODE_OF_CONDUCT.md);安全漏洞请按[安全策略](SECURITY.md)通过私密渠道报告。
- 发布版本前请执行[发布质量门禁](tools/quality/release-gate.zh-CN.md)。
## 许可证
BT 采用双许可证,使用者可任选以下一种:
- [Apache License 2.0](LICENSE-APACHE)
- [MIT License](LICENSE-MIT)
版权归属见 [COPYRIGHT](COPYRIGHT)。二进制发布归档会附带按目标平台和实际
feature 生成的 `THIRD-PARTY-NOTICES.txt`;打包的扩展包按需携带自身声明。