爱意满满的作品展示区。
hayesh

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

  •  
  •   hayesh · 6h 22m ago · 220 views

    大家好,我最近把自己做的一门系统脚本语言 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 、测试和已知限制都在仓库中。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2765 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:17 · PVG 21:17 · LAX 06:17 · JFK 09:17
    ♥ Do have faith in what you're doing.