編按:本文綜合整理自 elm-lang.org 官方公告〈Road to Elm 1.0〉、Elm 官方 Discourse 論壇預發布討論串,以及 Hacker News 熱門討論串(181 分、80 則留言),並加入 Siami 編輯部觀點與分析。
Elm 語言創辦人 Evan Czaplicki 於 2026 年 7 月 6 日正式釋出 Elm 0.19.2,這是他在標題定為「Road to Elm 1.0」的一系列小版本中的第一步。雖然是 patch release(修補版本),卻在編譯器效能上交出相當亮眼的成績單——85 萬行 Elm 程式碼的全量編譯只要 5.7 秒,增量編譯更壓到 350 毫秒以下,正式跨越 Czaplicki 心中「讓工程師不會分心去切換瀏覽器分頁」的那條 400 毫秒門檻。
這次改的到底是什麼
Czaplicki 在公告中直白地說,這次的核心優化集中在 parser(解析器)階段的記憶體配置。整體實測下來,三個關鍵指標全面改善:
- GC 複製量降低 20%
- 峰值記憶體使用降低 10%
- 整體編譯速度提升 7%
「換句話說,在 GC 上花比較少的時間,編譯當然就比較快!誰能想到呢?」Czaplicki 在公告中半開玩笑地寫道。對 50 萬行以下的小型專案,開發者可能感覺不太出差異;但對 50 萬行以上的中大型專案,這次升級會帶來明顯可感的回饋。
實測數據中,最具體的案例是某個擁有 351 個模組的專案:從零編譯時間從原本的 4.981 秒縮短為 2.595 秒,相當於 1.9 倍的提升。Czaplicki 也向社群喊話,希望使用大型專案的開發者能回報升級後的體驗差異。
為什麼這件事重要
Elm 自 2012 年由 Czaplicki 在 Prezi 內部孵育、2016 年發布 0.17 後,給人最鮮明的印象一直是「零 runtime 例外」與「The Elm Architecture」的純函數前端哲學。然而這個語言近年也承受不少社群質疑——最大的一條是:自 0.19(2018)之後,語言本身近乎停滯,commit 活動主要在 compiler 與 platform 維護,社群開始擔心 Elm 是否已進入維護模式。這次公告給出的訊號其實非常明確:Elm 沒有死,而且正在為 1.0 鋪路。公告中揭露的「Acadia」是 Czaplicki 私下進行的資料庫相關編譯器計畫,目前處於 private alpha 階段,預計今年稍晚公開。Acadia 過程中累積的編譯器與語言設計點子,部分會以小幅、不破壞相容性的方式回灌 Elm,最終收束為 1.0 版的「最後一哩」。換句話說,0.19.2 不只是效能 patch,更是 1.0 路線圖的第一張明牌。
從工程心理學角度看,Czaplicki 把目標訂在「增量編譯 < 400 毫秒」是深思熟慮的選擇——這條門檻對應到人機互動研究中「無感延遲」(no perceived latency)的邊界,過了這條線,開發者就不會因為等編譯而分心去開社群媒體,等同於直接提升專注時數。
Siami 觀點
Elm 路線圖 = 1.0 版的「極簡主義宣言」。對比 TypeScript、Rust 等同樣強調「強型別+工具鏈」的語言都在瘋狂加 feature,Elm 卻選擇用「一系列小版本」逐步回灌,最後才一次定錨為 1.0。這條路徑其實呼應了 Czaplicki 多年來的設計哲學——「語言的核心應該小到可以放進腦袋」。1.0 之前不破壞 API、1.0 之後象徵性收尾,這個節奏對一個以穩定性著稱的語言來說,反而是最合適的策略。
Acadia 的伏筆比 0.19.2 本體更有料。把資料庫編譯器的設計經驗帶回前端語言,這條路徑在歷史上並不常見——ScyllaDB、CockroachDB 這類高效能資料庫確實把編譯器視為核心競爭力,但那是為了榨硬體效能;Elm 是純前端語言,Acadia 的點子回灌到 Elm 後會長出什麼,目前還難以預測。可以確定的是,equatable 與 hashable types 這類「可見的功能」會在 1.0 之前分批進場。
數據解讀
- 5.7 秒編譯 85 萬行——這是 Elm 0.19.2 在 Czaplicki 自己的實驗專案(推測是內部 Elm 開發的某個大型應用)測出的數字。對比 TypeScript 在大型 React 專案的全量編譯時間,Elm 這個數字仍然顯著領先。
- 1.9x 提速(351 模組專案)——這是公告中唯一揭露的第三方專案數字,而且是「真實世界測試」中的最佳值。實際上 1.9x 屬於公告提到的「範圍從些微改善到 1.9x」的最好情況,並非所有專案都能拿到這個倍數。
- 7% 整體加速——這是公告中對 85 萬行實驗專案的實測值,相較於 1.9x 案例更具有代表性,因為它來自同一份程式碼的前後對比。
- 20% GC 複製量降低——這是更底層的指標,代表 parser 配置策略改變後,runtime 對短期物件的回收壓力下降。
對開發者的實際意義這次是 patch release,意味著開發者可以直接下載新版本、沿用現有專案而不必擔心 breaking change。對於仍在維護 Elm 0.19.x 專案的團隊,升級的成本極低,效益卻是立即可感的——尤其如果專案規模在數十萬行等級。對於正在觀望 Elm 是否值得投入的新進開發者,這次公告釋出的訊號是:Elm 社群沒有解散、Czaplicki 仍在第一線、1.0 路線圖明確。在 Rust 與 TypeScript 統治前端/系統級開發的當下,這種「小而穩」的語言策略反而是一種差異化選擇。
參考來源
- Elm 官方公告〈Road to Elm 1.0〉
- Elm Discourse 預發布討論串〈Pre-release for Elm 0.19.2〉(含 351 模組 / 1.9x 實測數據)
- Elm Discourse〈Help me profile Elm 0.19.2 compiler speed!〉(1 月 7 日的徵求協助文)
- Hacker News 討論串〈Faster Builds with Elm 0.19.2〉(181 分、80 則留言)
網友熱門留言 (4)