路线图 · 尚未实现

扩展系统路线图

了解扩展安装、加载、进程协议与 Redis 扩展示例的后续设计;这些能力尚未在 v1.0 实现。

先看状态:v1.0 尚不支持扩展

能力v1.0 状态计划
扩展模块名与核心 contract已预留内部边界v1.0
本地扩展安装与加载未实现v1.1
官方 office 扩展未实现v1.2
公开 Native ABI未承诺Runtime 稳定后按需评估

v1.0 已允许带点的模块名,例如 import office.excel;未安装的模块会得到 ModuleNotFoundError。这只是为未来扩展保留语法空间,不代表模块已经存在。

版本路线

text
v1.0   Core contract 与命名空间预留
v1.1   Process Extension Protocol + 本地包安装
v1.2   官方 office 扩展验证协议
以后    Runtime 稳定后再评估公开 Native ABI

核心继续负责 Pipe、Value、Stream、Error、取消、副作用与资源生命周期;扩展只注册新的 callable、类型或数据流,不得改变 HHY 语法或另建一套 Stream 语义。

计划中的安装、查看与移除

text
# 计划中的命令;v1.0 不可执行
hhy install ./hhy-redis
hhy list
hhy remove redis
步骤计划行为
install读取本地 hhy.toml,校验版本、可执行文件与完整性哈希,展示权限后安装
load脚本 import 时启动隔离扩展进程,握手并注册 callable
list列出本地已安装包、版本、协议和权限
remove移除包记录并清理不再使用的扩展资源

计划中的 hhy.toml

text
[package]
name = "redis"
version = "0.1.0"
requires_hhy = ">=1.1,<2.0"

[extension]
kind = "process"
command = "bin/hhy-redis"
protocol = "1"

[capabilities]
read = []
write = []
network = ["redis.example.com:6379"]
process = false

包名提供唯一顶级命名空间;hhy.* 与 std.* 由语言保留。安装器只授予清单声明且经用户确认的最小能力,扩展升级新增权限时必须重新确认。

扩展如何被加载

v1.1 计划优先采用进程扩展:Runtime 启动独立可执行文件,完成协议握手,接收其函数、类型、算子与 action 注册信息,再把它们接入同一 Callable Contract Registry。进程崩溃会转换为 HHY Error,不应拖垮解释器。

协议阶段职责
handshake协商 extension_id、protocol_version 与兼容性
register登记名称、输入输出、effect、lazy、cancel 与 threading 元数据
call / call_result按 request_id 调用并返回值或结构化错误
stream_*通过 item、credit/window 和 close 提供分块 Stream 与背压
cancel / shutdown传播取消并幂等释放进程、Stream 和句柄

Redis 扩展设计示例

text
# 未来可能的目录;v1.0 不会加载它
hhy-redis/
├── hhy.toml
└── bin/hhy-redis

# 未来可能的 HHY 调用;当前不可执行
import redis

let client = redis.connect({ url: require_env("REDIS_URL") })
client |> redis.set("health", "ok")
let value = client |> redis.get("health")
client |> redis.scan("session:*") |> take(100) |> collect()
示意 callableContract 设想
redis.connect有 network 副作用;返回不可序列化的 RedisClient handle
redis.get接收 client 与 key;返回 String、Bytes 或 Null
redis.set有 network 副作用;需要进入 dry-run/权限审计
redis.scan返回惰性 Stream;必须支持背压、取消和提前关闭

扩展作者需要实现什么

部分要求
可执行进程从标准协议通道握手、注册并处理调用
Contract为每个 callable 声明输入输出、副作用、惰性、取消和线程模型
值转换使用协议可序列化值;外部连接使用受控 Opaque handle
Stream遵守拉取、credit 背压、取消、错误和 close 生命周期
安全最小环境变量;秘密通过明确的 secret provider;不得绕过 capability
测试覆盖握手失败、超时、取消、崩溃、资源清理和版本不兼容

公开 Native ABI 不属于 v1.1 的前置条件。只有进程协议无法满足且性能数据证明必要时,才会考虑基于不透明句柄和函数表的稳定 ABI。