那些 Go 語言實(shí)現(xiàn)的語言現(xiàn)在發(fā)展怎么樣了?
大家好,我是站長(zhǎng) polarisxu。
Go 是一門通用編程語言,Go1.5 實(shí)現(xiàn)了自舉,也就是說,Go 語言是用它自身實(shí)現(xiàn)的。經(jīng)過十來年的發(fā)展,開源界使用 Go 語言實(shí)現(xiàn)的編程語言不少,那它們發(fā)展的怎么樣?本文進(jìn)行一下梳理。
01 Go+
這是國(guó)內(nèi)七牛老大許式偉主導(dǎo)的,對(duì) Go 語言的擴(kuò)展,專為數(shù)據(jù)科學(xué)領(lǐng)域打造。目標(biāo)是取代 Python 在數(shù)據(jù)科學(xué)領(lǐng)域的位置。
項(xiàng)目地址:https://github.com/goplus/gop,Star 數(shù):4.2k+。
該語言的前身是 qlang,2020 年 6 月份左右將其重命名為 Go+,并定位為數(shù)據(jù)科學(xué)領(lǐng)域。截止目前最新版本是 2021 年 1 月 8 日發(fā)布的 0.7.17,還不是穩(wěn)定版本。
這是一門靜態(tài)編程語言,完全兼容 Go 語言,類似腳本語言的風(fēng)格,比 Go 更具可讀性的數(shù)據(jù)科學(xué)代碼。
例如下面的 Go 代碼:
- package main
- func main() {
- a := []float64{1, 2, 3.4}
- println(a)
- }
對(duì)應(yīng)的 Go+ 代碼如下:
- a := [1, 2, 3.4]
- println(a)
今天剛看到許大在尋找 Go+ 語言開發(fā)團(tuán)隊(duì)的負(fù)責(zé)人,有興趣的可以聯(lián)系許大(找我轉(zhuǎn)達(dá)也沒問題)。
目前看,距離目標(biāo)還有很長(zhǎng)的路要走,最少先推出穩(wěn)定版本,然后有一個(gè)線上實(shí)際的應(yīng)用。
02 Tengo
Tengo 是一種小型、動(dòng)態(tài)、快速、安全的腳本語言,它使用 Go 語言實(shí)現(xiàn),并且可以嵌入 Go 程序中。它的語法和 Go 語言類似。
項(xiàng)目地址:https://github.com/d5/tengo,Star 數(shù):2.2k+,目前最新版本是 2.6.2(2020 年 9 月 18 日發(fā)布)。
代碼示例:
- /* The Tengo Language */
- fmt := import("fmt")
- each := func(seq, fn) {
- for x in seq { fn(x) }
- }
- sum := func(init, seq) {
- each(seq, func(x) { init += x })
- return init
- }
- fmt.println(sum(0, [1, 2, 3])) // "6"
- fmt.println(sum("", [1, 2, 3])) // "123"
03 CX
CX 是一種用于區(qū)塊鏈的新編程語言,使用 Go 語言實(shí)現(xiàn),語法類似 Go 語言。
項(xiàng)目地址:https://github.com/skycoin/cx,Star 數(shù) 27,很凄慘。目前最新 tag 是 0.7.5,我查了下,該項(xiàng)目幾年前就存在了。目前看屬于半死不活的狀態(tài),是 skycoin 主導(dǎo)開發(fā)的。對(duì)區(qū)塊鏈不太熟悉,不知道這個(gè)語言能為區(qū)塊鏈開發(fā)帶來什么革命性的功能。
我安裝試用了下,寫了一個(gè) Hello World 程序:
- package main
- func main() {
- str.print("Hello, World!")
- }
哈哈哈,我又掌握了一門語言的 Hello World!
04 Goby
受 Ruby 啟發(fā)的面向?qū)ο蟮慕忉屝驼Z言,核心代碼 100% 使用 Go 實(shí)現(xiàn)。它具有標(biāo)準(zhǔn)庫(kù),可提供多種功能,例如插件系統(tǒng)。
項(xiàng)目地址:https://github.com/goby-lang/goby,Star 數(shù) 3.2k+,目前最新版本 0.1.13(2020 年 4 月 26 日發(fā)布)。
Goby 的預(yù)期是用于后端開發(fā)。它具備(但不限于)以下功能:
- 基于 Go goroutine 的 thread/channel 機(jī)制;
- 內(nèi)置 database 庫(kù);
- json 支持;
- 插件系統(tǒng),支持動(dòng)態(tài)加載 Go 庫(kù)(目前不支持 Windows 系統(tǒng));
- 可以直接訪問 Go 對(duì)象;
一個(gè) Server 端 Hello World 的例子:
- require "net/simple_server"
- server = Net::SimpleServer.new("3000")
- i = 0
- server.get("/") do |req, res|
- puts(i)
- i = i+1
- res.body = req.method + " Hello World"
- res.status = 200
- end
- server.get("/not_found") do |req, res|
- res.body = "Not Found"
- res.status = 404
- end
- server.start
不知道 Ruby 愛好者喜歡不?!
05 總結(jié)
除了上面介紹的,還有其他一些 Go 語言實(shí)現(xiàn)的語言,比如 chai2010 的 wa 語言[1],以及其他一些腳本語言,如 Lua 虛擬機(jī) Go 實(shí)現(xiàn)、JS 虛擬機(jī)實(shí)現(xiàn)、Python 解釋器等。
有興趣的可以通過 https://github.com/d5/tengo 項(xiàng)目的性能測(cè)試部分了解。
以上介紹的語言,你有看好的嗎?會(huì)嘗試哪個(gè)語言嗎?如果你對(duì)編程語言實(shí)現(xiàn)感興趣,可以參與其中。
參考資料[1]wa 語言: https://github.com/wa-lang/wa
本文轉(zhuǎn)載自微信公眾號(hào)「polarisxu」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系polarisxu公眾號(hào)。