[分享创造] 我用 C 写了一门 Flow-first 系统脚本语言 HHY,现在能安全递归抓取网站

hayesh 2026-08-28 14:54 1

大家好,我最近把自己做的一门系统脚本语言 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 ;

  • 保持输入顺序的有界并发与取消;

  • checkfmt、脱敏 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 更快,或者应该替代通用语言。


我现在最想听到的不是“支持”,而是具体批评:



  1. Flow 与单次消费 Stream 的语义是否容易理解?

  2. 独立进程扩展这个边界是否值得序列化成本?

  3. 安全 Spider 还缺少哪个会阻止你实际使用的能力?


项目采用 Apache-2.0 ,源码、规范、Release 、测试和已知限制都在仓库中。

最新回复 (0)
    没有回复
* 帖子来源V2EX
返回