大家好,我最近把自己做的一门系统脚本语言 HHY 整理到了可以直接安装和运行的状态,想分享一下它为什么存在,以及目前真正做到了什么。
项目地址: https://github.com/hh696-wq/hhy-vm
5 分钟 Quick Start: https://hhylang.dev/zh/learn/quick-start
为什么又做一门脚本语言
我写系统自动化时,经常重复处理同一种流程:发现文件或 URL 、转换结构化记录、限制并发,最后执行文件、进程或网络操作。
Shell 很适合组合进程,但进入 JSON 、HTTP 、重试和并发后,数据与错误边界容易变得分散; Python 完全可以完成这些工作,不过我想试验一件事:把 Pipeline 、资源限制和副作用计划做成语言与 Runtime 的统一契约,而不是依靠不同库约定。
HHY 的核心表达一直是:
source |> transform |> filter |> action
例如:
path("./logs")
|> files("**/*.log")
|> flat_map { file -> read_lines(file.path) }
|> where { line -> contains(line, "ERROR") }
|> take(20)
|> print
它不是自然语言或 AI 包装层,源码有确定的 grammar 、类型规则、执行语义和退出码。
目前实现的东西
- C11 实现的 AST 解释器和标准库;
- 文件、文本、JSON 、CSV 、进程、HTTP 、watch ;
- 惰性、单次消费 Stream ;
- 保持输入顺序的有界并发与取消;
check、fmt、脱敏dry-run和 profiler ;- macOS arm64 、Linux arm64/x86_64 Release ;
- 基于 UTF-8 JSON Lines 的进程扩展协议。
扩展不是直接加载不稳定的 Native ABI 。Runtime 会验证 manifest 和 SHA-256 ,在最小环境中启动独立进程,再通过 stdin/stdout 完成 handshake 、call 和结构化错误交换。这样有序列化成本,但崩溃、权限和协议边界更明确。
最有挑战的实战:安全静态 Spider
HTML 扩展现在不只是“并发请求一组 URL”。它已经形成一个可以安全递归运行的最小闭环:
- URL 规范化和相对链接解析;
- HTML 链接发现和有界 Frontier ;
- 域名、路径、深度、页面、队列和单页链接限制;
- 入队前请求指纹去重;
- 每次实际连接及重定向目标的私网、回环和 link-local 防护。
基于这些能力,我写了 SiteGraph Auditor:递归盘点文档站、构建规范化链接图,并把结构和内容质量变成稳定退出码。项目自测会启动确定性 fixture ,同时覆盖健康站点、404 、重复链接、越界路径和 SSRF 负向用例。
SiteGraph 项目: https://github.com/hh696-wq/hhy-vm/tree/main/practical-projects/sitegraph-auditor
一键体验
curl -fsSL https://hhylang.dev/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
hhy --version
安装器会识别平台、读取最新稳定 Release 、下载对应的 .sha256,校验通过后才切换版本,默认不需要 sudo 。
已知边界
目前还是早期项目:Runtime 是 AST 解释器和 conservative GC ,没有 JIT ; HTTP body 是有界缓冲而不是 streaming body ;不支持 Windows 和 Intel Mac ;第三方扩展暂时只能交换有界 JSON-like values ,还没有 Stream credit 和 opaque handle 。我也没有宣称它比 Python 更快,或者应该替代通用语言。
我现在最想听到的不是“支持”,而是具体批评:
- Flow 与单次消费 Stream 的语义是否容易理解?
- 独立进程扩展这个边界是否值得序列化成本?
- 安全 Spider 还缺少哪个会阻止你实际使用的能力?
项目采用 Apache-2.0 ,源码、规范、Release 、测试和已知限制都在仓库中。