Skip to content

Latest commit

 

History

History
29 lines (15 loc) · 1.99 KB

agent.md

File metadata and controls

29 lines (15 loc) · 1.99 KB

Loom 代理须知

新会话先读这份文件,再改运行时、数据库、模型或作用域。脚本是 PHP 语法,运行时是 Go。不要用官方 PHP、php-fpm 或 Zend PDO 推断能力边界。

运行关系

build/loom.exe 是 Go 宿主。它创建 Origami 虚拟机,执行 framework/ 和 app/ 里的脚本。Origami 本身由 Go 实现,标准库和 Loom 的原生函数也是 Go。

能直接使用的 Go 能力就直接用,包括 database/sql、context、网络和并发。语言层缺少业务需要的语义时,用 Go 扩展 Origami:执行帧、原生函数、虚拟机补丁。不要把缺口做成脚本里的全局变量、静态表,或按官方 PHP 模仿出来的对象。

脚本负责业务规则:路由、权限、迁移编排、查询语义、命令。Go 负责池、事务、取消、网络和必须跨请求正确的状态。

数据库

连接池是进程级的 *sql.DB。普通语句结束就把连接还回池。事务只活在该次事务回调里:回调拿到这个事务,模型和原始 SQL 都用它,提交或回滚后连接回池。

ServiceScope 管理一次请求、命令或定时器回调里的服务实例和清理。它不拥有数据库连接,也不代表当前连接。查询上的条件和绑定参数只属于那条查询,不能用来切换作用域或连接。

会话级设置放在物理连接建立时做一次。一次执行不占着一条连接。

PDO 只是 Origami std 里对 database/sql 的一层包装。设计连接、事务和模型时不要以这层包装为前提,也不要再包一层适配去迁就它。

执行帧

执行帧上的 Go context 只跟随这次调用及其子调用,用来传递取消和明确的调用期数据。恢复时写回帧上原来保存的值。不要把 GoContext() 临时借来的截止时间写回帧上,也不要用它选择服务作用域。

改代码之前

先看 runtime/ 里的 Go 实现和实际用到的 Origami 源码,再看脚本。脚本的形状不是能力上限。