Forge: 一種基於堆疊的網頁開發方法
現代網頁開發領域通常由龐大的框架和複雜的建置流程所主導。然而,一個名為 Forge 的新實驗性專案提出了一種與此常態截然不同的做法,將基於堆疊的語言原則——特別是受到 Forth 啟發——應用於網站的建立。
透過將 HTML 生成視為一系列的堆疊操作,Forge 旨在簡化開發者定義頁面結構和微格式(microformats)的方式,同時利用現代瀏覽器的功能來提供無縫的使用者體驗。
核心概念:用於 Web 的 Forth
Forge 的核心是一種基於堆疊的語言。在傳統的指令式語言中,您可能會帶參數呼叫一個函數;在 Forge 中,您將值推入堆疊,然後呼叫一個「單字」(word,即函數)來消耗這些值。
例如,在 Forge 中建立一個簡單的標題如下:
: h1 ( s -- ) "<h1>" emit . "</h1>" emit ;
"Hello, World!" h1
在此程式碼片段中,: h1 的定義建立了一個新的單字。字串 "Hello, World!" 被推入堆疊,而 h1 單字會消耗該字串,將其包裹在 <h1> 標籤中。這種方法允許開發者建立一個可重複使用的單字庫,有效地為其特定的網站架構建立一個領域特定語言(DSL)。
使用微格式進行進階結構化
Forge 的主要優勢之一在於它能輕易地實作複雜的 HTML 結構,例如微格式。開發者不需要嵌套深層的 div 和 span 層級,而是可以定義高階單字來處理樣板程式碼。
考慮一個部落格文章內容的定義:
: 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-start 和 p-summary 等單字,程式碼保持簡潔,並專注於於內容而非標記語言的語法。
混合渲染架構
Forge 採用了一種精密的部署模型,結合了伺服器端渲染(SSR)和單頁應用程式(SPA)的優點。
- 伺服器端渲染: 單一二進位檔執行網站。當爬蟲或初次造訪者訪問頁面時,後端編譯器會從
.forge檔案生成 HTML 並提供服務。這確保了網站具備 SEO 友善性並與 WebMentions 相容。 - 客戶端渲染: 一旦網站載入,服務工作員(service worker)會攔截後續的網路請求。當使用者導航到新頁面(例如
/notes)時,服務工作員會抓取.forge原始碼檔案,並直接在瀏覽器中執行 WebAssembly 編譯的編譯器來即時生成 HTML。
這種混合方法提供了 SPA 的即時感,同時又不犧牲靜態網站的可存取性。
狀態與持久化
Forge 透過在伺服器上使用僅限附加(append-only)的日誌來簡身後端互動。開發者不需要複雜的 API 端點和資料庫結構,而是可以使用 log-append 單字來持久化資料。
例如,一個「按讚」按鈕可以如下實作:
: like-button ( -- )
"❤" "do-like" on-click ;
: do-like
"1" "likes:demo" log-append ;
當使用者點擊按鈕時,值 "1" 會被附加到伺服器上 likes:demo 主題下的一個 JSONL (JSON Lines) 檔案中。這種極簡的持久化方法減少了通常與動態網頁元素相關的開銷。
社群反饋
該專案引發了關於現代工具在建立「奇怪」實驗性語言時所扮演角色的有趣討論。一位觀察者指出,當前 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 標準結合的力量。 ",