軟體開發社群正在積極討論統一語言集的概念,作為解決跨專案使用多種程式語言挑戰的潛在解決方案。這一討論源於一篇文章,該文章提出了基於執行模型和型別系統將程式語言分為四個不同級別的分類系統,並建議圍繞 Rust 構建統一語言集。
多語言開發問題
現代軟體開發通常要求團隊同時使用多種程式語言,每種語言在專案生態系統中服務於不同目的。正如一位評論者指出,我們傾向於在不同環境(前端、後端、系統)中使用不同級別的語言,並且我們花費大量時間編寫膠水程式碼使它們相互通訊。這一現實在互操作性方面造成了顯著的開銷,需要在語言邊界之間進行大量的外部函式介面(FFI)和序列化/反序列化工作。提出的語言集方法旨在透過建立一系列語法相似的語言來解決這個問題,這些語言可以無縫協作,同時針對不同的效能和易用性需求。
現有方法和替代方案
幾位評論者強調了已經嘗試解決這個問題的現有生態系統。Clojure 生態系統被提及為擁有非常有用的方言,這些方言在不同環境中有廣泛的重疊,包括用於瀏覽器的 ClojureScript、用於 JVM 的 Clojure、用於指令碼編寫的 Babashka 以及用於 C/C++ 互操作性的 Jank。同樣,Dart 被認為是一種擁有即時編譯功能的語言,可以快速啟動並即時解釋,同時在準備釋出時能夠提前編譯為高效的機器程式碼,有效地橋接了提議的第2級和第3級。
反對強制統一的觀點
並非所有社群成員都對統一語言方法感到熱情。有些人認為,特定領域語言提供了重要的好處,不應為了語法統一而犧牲:
「特別是在有 LLM 輔助的情況下,我們不再能從讓所有東西使用一種語法、一種語言等方面獲得太多好處。像 Dotnet Blazor/ASP.NET 或 Python Streamlit/Dash 這樣的專案在我看來是強制的,並且帶來的麻煩比它們的價值更大。原帖建議的一切都是 Rust 的方案也有同樣的問題;它太強制了。」
這一觀點表明,相比於嘗試建立一個萬能的解決方案,擁抱專業化語言可能更有成效,特別是隨著大型語言模型等工具越來越多地幫助開發者跨不同語法工作。
程式語言分類級別
- 級別 4:解釋型,動態型別( JavaScript 、 Python 、 PHP )
- 級別 3:解釋型,靜態型別( Hack 、 Flow 、 TypeScript 、 mypy )
- 級別 2:編譯型,自動記憶體管理( Go 、 Java 、 C# 、 Haskell 、 Objective-C 、 Swift )
- 級別 1:編譯型,手動記憶體管理( Rust 、 C 、 C++ )
提議的語言集
- Rust:級別 1 - 手動記憶體管理下的最高效能
- RustGC:級別 2/3 混合 - 帶有垃圾回收且可編譯部署
- RustScript:級別 4 - 用於快速原型設計的動態型別
技術可行性和方向
討論中一個有趣的技術見解涉及語言相容性的方向性。一位評論者指出,解釋一種受限制的語言比編譯一種為直譯器設計的動態語言更容易。這表明,從像 Rust 這樣的低階語言開始,構建更高階的變體(如提議的 RustGC 和 RustScript)可能比試圖使 JavaScript 或 Python 等語言更具可編譯性更為可行。
社群還討論了向 Rust 新增自動垃圾收集的可能性,一位評論者表示強烈支援,同時承認 RustGC 程式碼轉換為傳統 Rust 並非易事。但朝相反方向轉換應該是簡單的。
圍繞語言集的討論反映了軟體開發中標準化和專業化之間更廣泛的張力。雖然統一方法可以減少多語言開發的認知負擔和整合挑戰,但它也可能犧牲專業語言提供的特定領域優勢。隨著開發工具的不斷發展,特別是在人工智慧輔助下,這些方法之間的平衡可能會發生變化,有可能在不需要語法統一的情況下減輕跨語言開發的負擔。