XML 原來是最便宜的 DSL?讀《XML is a Cheap DSL》後的深度筆記

本篇文章更新時間:2026/03/15
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


XML 為何在現代軟體還活得好好的?讀《XML is a Cheap DSL》的一些思考

編輯前言:這篇文章的作者從 IRS(美國國稅局)最新開源的 Tax Withholding Estimator(TWE)專案談起,反思為什麼在 2026 年的今天,XML 竟然成了構建稅務邏輯的最佳選擇。這篇筆記整理了文章重點與筆者自己的延伸思考。

文章來源:XML is a Cheap DSL

核心觀點 (Key Takeaways)

  • XML 可能笨重、冗長,但對於跨平台的「宣告式邏輯 DSL」來說,它依然是成本最低、可移植性最高的方案。
  • 稅務邏輯非常適合用宣告式(declarative)方式描述,而非一般程式語言的命令式(imperative)寫法。
  • XML 帶來的「可解析性」、「跨語言工具鏈」、「審計能力」與「可追溯性」遠遠超過 JSON 或 YAML 能提供的。

深入解析

作者從 TWE 的 Fact Dictionary 談起。這是一個用 XML 描述美國稅法邏輯的 DSL。所有的稅務計算規則並不是用 JavaScript、Scala 或 Python 寫的,而是用 XML 這種結構化標記語言宣告出來的。例如:

"This fact describes a /totalOwed fact that’s derived by subtracting /totalPayments from /totalTax."

看起來冗長,但事實上邏輯清晰且極具一致性。

1. 為什麼不用更自然的 JavaScript?

作者展示了用 JS 寫的邏輯雖然更短,但會產生兩個問題:

  • 命令式語言會隱藏中間狀態,讓「追溯邏輯」變得困難。
  • 執行順序會影響邏輯,例如 getInput() 必須在某一步被呼叫後才能算下一步。

相比之下,XML:

  • 不描述步驟,而是描述「事實彼此的依賴關係」。
  • Fact Graph 引擎會自動決定執行順序。
  • 每個中間值都是可查詢、可審計的節點。

這種透明度對稅務系統尤其重要,因為稅務計算牽涉「數百個中間值」,沒有明確抽象會非常難 debug。

2. JSON 聽起來是更現代的選擇,為何失敗?

作者示範了用 JSON 描述同一段邏輯,看起來立刻變得更糟:

  • JSON 缺乏型別與結構的語義。
  • 嵌套表達式極度冗長,因為每個部分都要「type」、「kind」地描述。
  • 多層巢狀的情況下,JSON 基本上不適合人類閱讀。

對比 XML:「語意藏在標籤裡」,自然得多。

3. YAML 更簡潔,但為何完全不適合?

作者引用一句原文金句:

“whatever you do, don’t try to express the logic of the Internal Revenue Code as YAML”

原因不難想像:YAML 對結構、語意、縮排敏感,不適合構建複雜、嚴格的 DSL。

4. 那為什麼不用 Lisp 的 S-expressions 或 Prolog?

作者承認那些語法其實更漂亮、更抽象,對複雜邏輯也更合適。然而,他點破了決定性關鍵:

XML 給你一套「跨所有語言都能使用的工具鏈」。

只要你選 XML:

  • 可以用 XPath 查詢
  • 可以用 shell 工具簡單處理
  • 可以透過轉換輕鬆生成 Prolog / Lisp / JSON
  • 可以在任何語言、任何平台解析

這就是作者說的:

“XML is a great canonical, cross-platform data format.”

也因此,用 XML 做 DSL 是成本最低且可擴展性最好的做法。

筆者心得與啟發

老實說,讀完這篇文章後我重新認識了 XML。過去我也像作者一樣,把 XML 和過時技術畫上等號。但文章讓我重新思考一件事:

一個語言是否好用,不在於語法有多潮,而在於它是否能最有效率地解決你手上的問題。

在 TWE 的案例裡,需求包含:

  • 可審計性
  • 可追溯性
  • 一致性
  • 跨平台工具鏈
  • 類似知識圖譜的結構

XML 在這些面向的成本/效益比,竟然是所有選項之中最高的。甚至讓本文作者從原本想推行 S-expressions,到最後心甘情願擁抱 XML。

那我從這篇文章得到了什麼啟發?

  • 選技術不應從喜好、風格出發,而要從「最終價值」出發。
  • 宣告式模型的威力遠超過一般工程師的直覺。
  • 工具鏈的普及度遠比語法美不美重要。

下次當我需要為一個跨團隊、跨平台、長期維護的邏輯系統選擇表達方式時,XML 可能會回到我的選項列表中,至少不再被第一時間排除。

對 XML 程式語言 DSL 的興趣,我想我真的被重新點燃了。


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon