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