这个项目能做什么
Block 是一种本地优先的多语言编程语言与执行引擎,允许开发者在一个可读文档中跨多个宿主运行时组合工作流。它不是通过 shell 脚本或临时文件拼接 Python、JavaScript、Lua、PHP、SQL、Ruby、PowerShell 等语言,而是使用基于标签的语法(py、js、sql 等),每个语言块保留其原生语法,由 Block 管理顺序执行、序列化以及跨进程边界的状态传递。
### 工作方式
Block 文档会被解析和验证,然后每个语言阶段作为独立宿主进程启动。Block 会将共享可序列化状态的预处理表示从一个阶段传递到下一个阶段。这意味着打开的文件句柄、套接字、活动的数据库连接和循环引用不能跨块传递,只能传递整数、浮点数、字符串、布尔值、数组和字典等纯数据类型。这种进程边界模型使工作流可检查、可移植,但需要有意设计状态。
### 版本与文件格式
提供三个版本:
- Lite(.blkl):轻量本地多语言脚本,包含基础语言块。
- Standard(.blk):通用开发用途,增加了导入、项目发现、原生控制流和本地服务器支持。
- Plus(.blkp):完整功能面,包括自定义运行时定义、格式化、lint、文档生成和扩展集成。
可执行命令对应于版本:block-lite、block、block-plus。
### 支持的语言
Block 委托给 PATH 中可找到的宿主运行时。常见标签包括用于 Python 的 py、用于 JavaScript/Node.js 的 js、php、lua、ruby、用于 PowerShell 的 ps、用于 SQLite 的 sql、用于模板化输出的 html 和 json,以及在有编译器时提供的 go、rust、zig、ts、cs、kotlin、dart、perl、r、c 和 cpp。并非所有标签在每个版本中都启用。
### 共享状态管道
核心功能是在块之间传递可序列化状态,例如:py 块中计算 total = 40 + 2,js 块中输出 total,html 块中输出包含 total 的段落。一个块中生成的值在下一个块中可用。最佳实践是生成一个小的显式结果对象,而不是依赖导出每个局部变量。
### 原生 Block 控制流
所有版本都包含一个确定性的、沙盒化的原生语言核心,支持赋值、if/elif/else、while 和 for 循环、range()、函数、列表和字典字面量、索引,以及 len、str、int、sum、keys 等内置函数。该核心有意不提供文件、网络、进程或包 API;需要时请使用宿主运行时块。
### 本地 HTTP 服务器
Standard 和 Plus 版本可以声明路由和静态文件服务。例如在 server 块中定义 8080 端口,route 中设置 /hello 路径,py 块生成消息,json 块返回包含该消息的 JSON。路由默认需要 X-Api-Token 请求头。该服务器仅用于本地开发。
### 项目管理
项目通过 block project init 初始化,并通过 block.project.json 管理。可以为多项目设置配置一次工作区根目录。导入使用相对路径,受沙盒目录限制、递归深度上限和循环导入检测约束。
### CLI 命令
主要命令包括:block 后接文件名执行文件,block check 后接文件名解析而不运行,block plan --json 提供只读执行预览,block errors 提供诊断代码,block ast 提供结构化语法树,block runtimes 检测已安装宿主,block doctor 进行环境诊断,block-plus fmt/doc 在 Plus 中提供格式化和文档功能。
### 安全与沙盒
导入被限制在沙盒目录内,并设有文件数量和大小限制。阻止通过 ../ 越出项目根目录的目录遍历。PowerShell 执行在新配置中默认禁用。原生控制流核心是只读的,没有文件或网络访问。安全安装程序验证 SHA-256 校验和,从不调用 Winget、Chocolatey 或下载的脚本。
### 编辑器支持
提供 VS Code 扩展和 Acode 插件。编辑器扩展除了主要扩展名外,还识别 .block、.blocklite 和 .blockplus 别名。
### 发布与构建
当前版本为 2.7.5。Windows 构建通过 build.ps1 使用 .NET Framework 编译器从 C# 源码编译,生成 block.exe、block-lite.exe 和 block-plus.exe。免费代码签名由 SignPath.io 提供;当前 Windows 版本正在审核中,尚未签名。
### Block 不是什么
Block 不是 Python、JavaScript、Rust 或任何成熟语言的替代品。它不模仿它们的语法,也不捆绑宿主运行时。它协调本地运行时,并使阶段之间的数据边界可见。解析错误属于 Block;缺失运行时、包错误和特定语言问题属于宿主环境。
### 许可证
MIT 许可证。仓库源码、文档和示例均开放。
评论
0 评分人数达到10人后显示
登录后参与讨论。