Forge: 一种基于栈的 Web 开发方法"}],

现代 Web 开发领域通常由庞大的框架和复杂的构建流水线主导。然而,一个名为 Forge 的新实验性项目提出了一种激进的变革,它将基于栈的语言原则——特别是受 Forth 启发——应用于网站的创建。

通过将 HTML 生成视为一系列栈操作,Forge 旨在简化开发者定义页面结构和 microformats 的方式,同时利用现代浏览器的能力来提供无缝的用户体验。

核心概念:用于 Web 的 Forth

Forge 的核心是一种基于栈的语言。在传统的命令式语言中,你可能会调用一个带有参数的函数;在 Forge 中,你将值推入栈中,然后调用一个消耗这些值的 "word"(函数)。

例如,在 Forge 中创建一个简单的标题如下:

: h1  ( s -- )  "<h1>" emit  .  "</h1>" emit ;

"Hello, World!" h1

在这个代码片段中,: h1 定义创建了一个新的 word。字符串 "Hello, World!" 被推入栈中,然后 h1 word 消耗该字符串,将其包装在 <h1> 标签中。这种方法允许开发者构建一个可重用的 word 库,有效地为他们特定的站点架构创建一种领域特定语言 (DSL)。

使用 Microformats 进行高级结构化

Forge 的主要优势之一在于它如何轻松实现像 microformats 这样复杂的 HTML 结构。开发者无需嵌套深层的 divs 和 spans,而是可以定义高-level word 来处理样板代码。

考虑一个博客文章正文的定义:

: post-body
  h-entry-start
    "<p class='byline'>" emit
      "2026-05-21T14:00:00Z"  "May 21, 2026"  dt-published
      " · by " emit
      "Beto"  "/about"  p-author
    "</p>" emit
  h-entry-end

  "On building a tiny stack-based web language." p-summary
  "post-content"                                 e-content
  "/hello-world"  "permalink"                    u-url ;

"Hello, world!" "post-body" blog-post

通过将 HTML 标签抽象为 h-entry-startp-summary 等 word,代码保持了简洁并专注于内容,而不是标记语言的语法。

混合渲染架构

Forge 采用了一种复杂的部署模型,融合了服务端渲染 (SSR) 和单页应用 (SPA) 的优点。

  1. 服务端渲染: 一个单一的二进制文件运行网站。当爬虫或首次访问者访问页面时,后端编译器从 .forge 文件生成 HTML 并提供服务。这确保了网站对 SEO 友好并兼容 WebMentions。
  2. 客户端渲染: 一旦网站加载,service worker 会拦截后续的网络请求。当用户导航到新页面(例如 /notes)时,service worker 会获取 .forge 源文件,并直接在浏览器中运行 WebAssembly 编译的编译器来即时生成 HTML。

这种混合方法提供了 SPA 的即时感,同时又不牺牲静态网站的可访问性。

状态与持久化

Forge 通过在服务器上使用仅追加日志 (append-only log) 来简化后端交互。开发者不再需要复杂的 API 端点和数据库模式,而是可以使用 log-append word 来持久化数据。

例如,一个 "like" 按钮可以实现如下:

: like-button  ( -- )
    "❤"  "do-like"  on-click ;

: do-like
  "1" "likes:demo" log-append ;

当用户点击按钮时,值 "1" 会被追加到服务器上 likes:demo 主题下的一个 JSONL (JSON Lines) 文件中。这种极简的持久化方法减少了通常与动态 Web 元素相关的开销。

社区反思

该项目引发了关于现代工具在创建 "weird" 实验性语言方面的作用的有趣讨论。一位观察者指出,当前 LLM 辅助编程的时代显著降低了复杂系统的准入门槛:

LLM-based coding is enabling so much! The crazy weekend project now can have compilation to native code and web assembly... without breaking a sweat.

虽然这种语言是实验性的,但它提醒了我们,个人博客——一个用于个人表达的空间——或许是实验非常规编程范式的最佳场所。无论 Forge 是否成为主流工具,还是仅仅作为一个奇观,它都展示了将老派的基于栈的逻辑与 WebAssembly 和 Service Workers 等现代 Web 标准相结合的力量。

Sources