放眼編程榜單如?TIOBE,雖然排名靠前依然是我們熟悉的 Python、C、C++、Java 等語言,但是近日來,似乎是看到了文章伊始所述的趨勢,我們見證了不少劍指老牌語言的新編程語言誕生,譬如有的是一群 Go 語言愛好者發起的凹語言,也有的是來自大廠的一線員工如 Oracle 核心團隊成員創建的 Vely,還有的是科技巨頭如 Google 自身研發的 Carbon。
接下來,我們將與大家一起了解一下最新誕生的編程語言,看其能否填補老牌語言們留下的遺憾。
1、國內 Gopher 發起的「凹語言」
凹語言(凹讀 wa),作為一門剛剛起步的實驗性編程語言,它是由國內的一群 Go 語言愛好者發起的,主要設計目標之一是「成為 Go 和 Rust 語法外衣的 C++ 語言」。
在創建伊始,柴樹杉、丁爾男和史斌三位 Gopher 便決定以開源的方式來推動凹語言的發展,其開源地址為:https://github.com/wa-lang/wa。
具體的安裝和測試方法如下:
-
安裝?Clang,確保本地?clang?命令有效
-
go install github.com/wa-lang/wa@latest
-
wa init -name=_examples/hi
-
wa run _examples/hi
目前該項目提供了簡單可執行的示例,如“打印 30 以內的素數”:
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
fn?main()?{
for n := 2; n <= 30; n = n + 1 {
let isPrime int = 1
for i := 2; i*i <= n; i = i + 1 {
if x := n % i; x == 0 {
isPrime = 0
}
}
if isPrime != 0 {
println(n)
}
}
}
運行并輸出結果:
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
$ go run main.go run _examples/prime
2
3
5
7
11
13
17
19
23
29
另一個 Demo 如下圖所示:
?
?
現下,凹語言處于非常早期的實驗階段,該團隊在凹語言特性和編譯器實現方面都進行了預期設定。其中,凹語包含兩套相互等價的語法,即凹語法與 WaGo 語法。這里“等價”的含義是:二者可生成相同的 AST 并無損的互相轉換。使用凹語法編寫的源文件后綴為 .wa,使用 WaGo 語法編寫的源文件后綴為 .wa.go。WaGo 語法是 Go 語法的真子集,換句話說:一個合法的 WaGo 包必然是合法的 Go 包。對此,創建者之一柴樹杉也在知乎上進一步表示,「等價不是最終目標,只是為了方便習慣 Go 的用戶。」
在凹編譯器方面,該團隊發布了如下工作流程圖,希望支持 C/C++、LLVM IR、WASM 等多種輸出以滿足不同的目標場景。
作為個人業余項目,幾位創建者表示,“縱觀編程界,沒有哪門被廣泛使用的通用語言誕生于 KPI 制度之下”,因此當前該項目不存在明確的 KPI 指標,在其個人時間、精力、興趣的支持下,從成果分類的角度,該團隊希望能夠在第一階段完成:
-
確定凹語言語法規則;
-
實現可用的凹語言編譯器;
-
使用凹語言創建一個網頁應用。
對于設計凹語言的初心,在 GitHub 的 README.md 文件中,該團隊也非常直白地寫道,「本項目啟動時大量借鑒了 Go 的設計思想和具體實現——這是在有限投入下不得不作出的折衷,我們希望隨著項目的發展,積累更多原創的設計,為自主創新的大潮貢獻一點力量。」
同時,對于凹語言未來的發展,該團隊也將「持以開放態度」,希望能夠有更多的開發者參與進來,共建凹語言。
2、以 C 為宿主語言的新嵌入式編程語言——Vely 語言
和凹語言一樣,新誕生的 Vely 語言同樣屬于個人項目。它的作者 Sergio Mijatovic 是一位在 Oracle 核心工程工作超過十年,擔任中間件的高級軟件工程師。
根據官方介紹(https://vely.dev/)顯示,Vely 是一種嵌入式編程語言,以 C 為宿主語言。它被預編譯為 C,創建一個本機可執行文件。Vely 的 Logo 是一頭可愛的大象,對此,Sergio Mijatovic 給出的解釋是,“大象很聰明,盡管它們既不快也不輕,但我知道它們會喜歡 Vely,因為 Vely 兩者都兼備。”
?
為什么創建 Vely?
相比其他編程語言,當談及 Vely 的優勢時,Sergio Mijatovic 表示,性能和簡單性是這個問題簡短的回答。
從定位上來看,Vely 語言自身就是為了快速構建具有最大性能的服務器端應用程序而生。
Sergio Mijatovic 表示,通過使用 Vely 語言,這意味著生成高效和安全的 C 代碼的簡單語句。這樣的語句是直接用 C 代碼編寫,所以根據定義,它不是一種新的語言。它是 C 和生成 C 語言的嵌入式語言的合并。因此,Vely 的目標是偏向嵌入式語言的一側,因為構建應用程序會更安全,更豐富,更快捷,并在需要時編寫 C。
簡單來看,Vely 語句很簡單,是在 C 代碼中編寫的,因此無需學習有關下面層的任何新知識。大多數 Vely 語句都會生成許多 C 語句。
Vely 功能特性
Vely 應用程序是本地可執行文件,沒有解釋器或字節碼方案,這帶來性能高、占用空間小等特點。
此外,Vely 語言可以輕松地使用數據庫(MariaDB、PostgreSQL、SQLite),并通過 FastCGI 服務器為網絡應用程序編寫后端。在命令行上運行相同的代碼。
Vely 編碼涵蓋了 Web、數據庫、字符串、文件、流程和執行、編碼/加密、時間、錯誤處理、守護神化代碼和其他常見任務。它自帶自動內存管理和垃圾回收功能。
使用者也可以將 Vely 用于 Web 應用、命令行程序,還可以作為中間件、數據庫應用、服務軟件、數據集成、物聯網(IOT)和其他地方。由于資源要求低,而且易于容器化,此語言也非常適合云計算應用中。
Hello World 示例
目前 Vely 在 Linux 上可用于 amd64 或 aarch64 架構(下載地址:https://vely.dev/pkg/)。
在安裝好 Vely 之后,創建 Hello World 源文件(hello.v):
- ?
- ?
- ?
echo '#include "vely.h"void hello()
{ out-header default @Hello World!
}' > hello.v
創建 Hello World 應用程序:
- ?
sudo vf -i -u $(whoami) helloworld
制作 Hello World 運行程序:
- ?
vv -q helloworld
運行——可以將 Hello World 作為服務運行,也可以從命令行運行。
-
作為一個服務,首先啟動你的 Hello World FastCGI 應用服務器。
- ?
vf helloworld
然后連接到它。
- ?
- ?
- ?
export REQUEST_METHOD=GET
export QUERY_STRING="req=hello"
cgi-fcgi?-connect?/var/lib/vv/helloworld/sock/sock??/
-
從命令行運行:
- ?
- ?
- ?
- ?
export REQUEST_METHOD=GET
export QUERY_STRING="req=hello"
export VV_SILENT_HEADER=yes
/var/lib/vv/bld/helloworld/helloworld
預期的結果:
最終結果如下(注意黑體字是來自網絡應用程序和命令行的響應):
?
?
Sergio Mijatovic?表示,“我不會說 Vely 是優雅的,這當然也不是它的目標,但 Vely 可以稱得上很簡單,更多的是圍繞人們的實際需求來落地的。我們的想法是不犧牲性能,并顯著提高生產率和安全性。”
對于 Vely 的創建,Sergio Mijatovic?稱,「是在沒有資金支持的情況下利用自己的時間創建的」。目前,Vely 不接受公眾的貢獻,這也是為了能夠更聚焦和更少的開銷來考慮。
當前,Vely 是一款自由開源軟件,根據?GNU 通用公共許可證 v3.0?(GPL 3),開發者可以使用 Vely 編寫應用程序(包括專有和商業),而無需發布源代碼。
「我為 Vely 斷斷續續工作了幾年,經歷了幾次完整的重寫,主要是為了學習如何把事情做得更好。我也希望它可以幫助你做同樣的事情」,Sergio Mijatovic 說道。
3、對標 C 語言,Hare 語言發布!
另一款對標 C 語言的是于今年 4 月面世的?Hare 語言,由軟件開發者 Drew DeVault 創建,它是基于 qbe 編譯器后端,在占用空間小的情況下提供了良好的性能,讓程序員能夠用上好的工具。
在應用場景上,Hare 使用靜態類型系統、手動內存管理和最小運行時,由此它非常適合編寫操作系統、系統工具、編譯器、網絡軟件和其他低級高性能任務。
據外媒 The Register 報道,Hare 的標準庫中還融合了 Google 的 Go 編程語言思想,特別是在標準庫以及“電池”中內置了許多功能,以此避免需要導入外部的依賴項。這樣做,能避免程序員去尋找依賴項,同時也有一個可管控的范圍。
根據作者?Drew?DeVault?的解釋,其將 Hare 描述為一種避免 C 語言陷阱的方式,并表示道,“許多旨在和 C 語言競爭的語言實則相差太遠了。Hare 是一種保守的語言,旨在將過去 30 年的經驗教訓提煉成一種小型的、簡單的、穩健的語言,可以在未來 30 年內讓程序員依賴。我們并不關注大膽創新,而是關注精心的工程設計。”
Hello World 示例如下:
- ?
- ?
- ?
- ?
use fmt;
export fn main() void = {
fmt::println("Hello world!")!;
};
4、旨在成為 C++ 繼任者,Google 發布 Carbon
不久之前,綜合安全因素考慮,也旨在幫助開發者創建“性能關鍵型軟件”,Google 開源并發布了新型語言 Carbon。此前,CSDN 也曾發文剖析了 Carbon 語言的設計目標:
1. 速度快,可與 C++ 一起使用
-
性能與使用LLVM的C++相匹配,具有對位和地址的低級訪問
-
從“遺產”到模板,實現與現有的 C++ 代碼互操作
-
快速和可擴展的構建,與現有的 C++ 構建系統一起工作
2. 現代化和并且能不斷發展
-
堅實的語言基礎,易于學習,特別是對于已經使用過 C++ 的人
-
簡單的、基于工具的 Carbon 版本之間的升級
-
更安全的基本原理,以及逐步實現內存安全子集的途徑
3. 打造受歡迎的開源社區
-
明確的目標和優先級,具有強大的管理能力
-
社區致力于成為一個歡迎、包容和友好的社區
-
包含“電池”的方法:編譯器、庫、文檔、工具、包管理器等
對于其未來發展,Google 表示,Carbon 需要成為一個“獨立的并且由社區驅動的項目",而不僅僅是為谷歌自用。
5、寫在最后
除了以上,早在 2012 年,由于在開發大型應用時,處理復雜的 JavaScript 代碼帶來的種種挑戰,微軟推出了 TypeScript,作為 JavaScript 的語法超集,面向開發者開放使用;2014 年,蘋果推出了 Swift,旨在取代自己推出的另一款語言 Objective-C;2017 年,Google 在 I/O 大會也重磅宣布 Jetbrains 的 Kotlin 成為 Android 開發的官方語言,迅速掀起一波 Kotlin 取代 Java 的技術潮。
在此牽引下,新編程語言推陳出新,快速崛起,其中尤其是對標 C、C++、Java 等老牌語言的最勝。但眾人皆知,老牌編程語言能有如今的地位,非一日之功。從上述已推出的幾款語言中也不難看出,在兩兩對標的語言中,最為成功的莫過于蘋果的 Swift 了,只因為無論是在開發環境、功能,還是性能、工具包以及社區支持上,蘋果從根部推動了舊工具的淘汰,可供 iOS 開發者選擇的選項實在有限,也才能有 Swift 的今天。
如今依靠開源,新語言的崛起,也只是一個開始。面對這種趨勢的崛起,C++ 之父 Bjarne Stroustrup 在一封電子郵件中評價道,“總是有新的語言試圖成為 C++?的繼承者。我歡迎對編程語言和編程風格的實驗,但并不希望助長爭論。批評已有的語言很容易,因為我們知道它們的問題所在,但通常很難在不產生語言規則、庫和管理方面的全新問題的情況下提供替代品。Carbon 是如此之新,而且規范不足,我無法真正做出有意義的技術評論。”
雖然每款新誕生的編程語言勢必有著自己的目標,但未來究竟會如何,我們也將拭目以待。
評論
查看更多