V是最新出現(xiàn)的一種靜態(tài)編譯型語言,用于構(gòu)建可維護的軟件。它與Go類似,也受到Oberon、Rust、Swift的影響。
開發(fā)者從來就不缺新語言。今天新智元為大家?guī)淼?,是一款最新推出的語言:V。目前處于很早期的階段,暫時還沒有在維基百科上擁有姓名。
V是一種靜態(tài)編譯型語言,用于構(gòu)建可維護的軟件。它與Go類似,也受到Oberon、Rust、Swift的影響。
作者號稱V是一種非常簡單的語言,看官方文檔半個小時就能完全掌握。盡管很簡單,但功能一點都不弱,其它語言可以做的事情V也可以。
作者嘗試使編譯器和vlib的代碼盡可能簡單易讀。用hello world舉例。你可以寫的跟C一樣:
fn main() { //fn是函數(shù)(function) println('hello world')}
也可以寫的像Python:
println('hello world')
下面看一段代碼示例:
fn add(x int, y int) int { return x + y}fn sub(x, y int) int { return x - y}
就像在Go和C中一樣,函數(shù)不能重載。這簡化了代碼并提高了可維護性和可讀性。
函數(shù)可以在聲明之前使用:add和sub在main之后聲明,但仍然可以從main調(diào)用。對于V中的所有聲明都是如此,并且不需要頭文件或考慮文件和聲明的順序。
V的目標(biāo)之一是向具有不同編譯器開發(fā)經(jīng)驗的開發(fā)人員開放。作者希望編譯器不再是讓人捉摸不透、只有極少數(shù)人才能理解的黑盒子。
編譯器介紹
在編譯器目錄下,有8個文件,未來有望減少到7個。分別是:
入口函數(shù):main.v
main.v用于V計算出構(gòu)建模式、構(gòu)造編譯器對象(struct V)
創(chuàng)建需要解析的.v文件列表、為每個文件創(chuàng)建一個解析器對象并運行parse()。
出于性能原因,解析器直接發(fā)出C或x64代碼,沒有AST或匯編代碼生成。如果解析成功,則通過合并解析器的輸出并仔細排列所有定義來生成單個C文件。
最后,調(diào)用C編譯器來編譯此C文件并生成可執(zhí)行文件或庫。
parser.v
這是編譯器的核心。parse()方法請求掃描程序為其需要解析的文件生成令牌列表,然后逐個遍歷所有的標(biāo)記即可。
在V中,可以在聲明之前使用對象,因此有2次傳遞。在第一次傳遞期間,它只查看聲明并跳過函數(shù)體。它記憶所有函數(shù)簽名、類型、常數(shù)等;在第二次傳遞期間,它查看函數(shù)體并生成C例如cgen('if($ expr){')或機器代碼例如gen.mov(EDI,1)。
Formatter嵌入在解析器中,在解析時會發(fā)出格式正確的標(biāo)記,可以簡化編譯器并避免重復(fù),但會犧牲速度。
在將來,這將通過構(gòu)建標(biāo)志和單獨的二進制文件來修復(fù),用于C生成,機器代碼生成和格式化,這樣就不會有不必要的分支和函數(shù)調(diào)用。
scanner.v
scanner的工作是解析字符列表并將其轉(zhuǎn)換為令牌。它還負(fù)責(zé)字符串插值,目前這塊還比較混亂。
token.v
只是所有標(biāo)記的簡單列表,包括一些字符串值以及一些輔助函數(shù)。
table.v
V創(chuàng)建一個由所有解析器共享的表對象。它包含所有類型、常數(shù)和函數(shù),以及按名稱搜索對象、注冊新對象、修改類型字段等的幾個幫助器。
cgen.v
Cgen結(jié)構(gòu)有助于生成C代碼,所有解析器也共享它。它有一些函數(shù)可以返回并設(shè)置以前未知的東西(比如:= 0 => int a = 0;)。這塊還需要進一步優(yōu)化和改進。
fn.v
處理聲明和調(diào)用普通和異步函數(shù)和方法。大約有1000行代碼,并且有一些復(fù)雜的邏輯,這塊還需要一些簡化和整理。
json.v
定義json代碼生成。一旦V支持生成comptime代碼,該文件將被刪除,并且可以使用該語言的工具執(zhí)行此操作。
x64/
包含所有機器代碼生成邏輯的目錄,將于7月初完成。顯然,這是編譯器中最復(fù)雜的部分。它定義了一組將匯編指令轉(zhuǎn)換為機器代碼的函數(shù);逐字節(jié)地從頭開始構(gòu)建復(fù)雜的二進制文件;手動構(gòu)建所有header、segment、section,symtable,重定位等。
V的功能及表現(xiàn)
整個語言及其標(biāo)準(zhǔn)庫小于400KB。V就是用V語言攜程的,你可以在0.4秒內(nèi)構(gòu)建它,到今年年底,這個數(shù)字將下降到≈0.15秒。
請看對比:
現(xiàn)在V編譯器確實有一個依賴:C編譯器。但是無論如何都需要引導(dǎo)語言,如果你正在從事開發(fā),顯然已經(jīng)是安裝了C編譯器。這是一個小的依賴,一旦x64 generation足夠成熟就不需要了。
V可以轉(zhuǎn)換整個C或C ++項目,提供安全性,簡單性和高達400倍的編譯速度。
無需重新編譯即可立即獲取更改,每次編譯后也無需進入正在處理的狀態(tài),因此可以節(jié)省大量寶貴的開發(fā)時間。
基于GDI+/Cocoa Drawing構(gòu)建的跨平臺繪圖庫,以及基于OpenGL的圖形庫,用于更復(fù)雜的2D/3D應(yīng)用程序。
V有一個使用本機GUI工具包的ui模塊:Windows上的WinAPI/GDI+,macOS上的Cocoa。在Linux上使用自定義繪圖。
交叉編譯也很簡單,只需運行v -os windows或v -os linux。即使對于GUI和圖形應(yīng)用程序,也無需額外的步驟!
其他更多特性可以去官網(wǎng)閱讀開發(fā)文檔。
最終表現(xiàn)如何呢?根據(jù)作者介紹,V和C一樣快;C interop無需任何成本;分配數(shù)量最少;沒有運行時反射的內(nèi)置序列化;編譯本地二進制文件不需要任何依賴:一個簡單的Web服務(wù)器只有65KB。
-
語言
+關(guān)注
關(guān)注
1文章
97瀏覽量
24242 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62618 -
編譯器
+關(guān)注
關(guān)注
1文章
1634瀏覽量
49130
原文標(biāo)題:V,新編程語言來襲!與Go類似,跟C一樣快
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論