V是最新出現(xiàn)的一種靜態(tài)編譯型語(yǔ)言,用于構(gòu)建可維護(hù)的軟件。它與Go類似,也受到Oberon、Rust、Swift的影響。
開發(fā)者從來(lái)就不缺新語(yǔ)言。今天新智元為大家?guī)?lái)的,是一款最新推出的語(yǔ)言:V。目前處于很早期的階段,暫時(shí)還沒(méi)有在維基百科上擁有姓名。
V是一種靜態(tài)編譯型語(yǔ)言,用于構(gòu)建可維護(hù)的軟件。它與Go類似,也受到Oberon、Rust、Swift的影響。

作者號(hào)稱V是一種非常簡(jiǎn)單的語(yǔ)言,看官方文檔半個(gè)小時(shí)就能完全掌握。盡管很簡(jiǎn)單,但功能一點(diǎn)都不弱,其它語(yǔ)言可以做的事情V也可以。
作者嘗試使編譯器和vlib的代碼盡可能簡(jiǎn)單易讀。用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ù)不能重載。這簡(jiǎn)化了代碼并提高了可維護(hù)性和可讀性。
函數(shù)可以在聲明之前使用:add和sub在main之后聲明,但仍然可以從main調(diào)用。對(duì)于V中的所有聲明都是如此,并且不需要頭文件或考慮文件和聲明的順序。
V的目標(biāo)之一是向具有不同編譯器開發(fā)經(jīng)驗(yàn)的開發(fā)人員開放。作者希望編譯器不再是讓人捉摸不透、只有極少數(shù)人才能理解的黑盒子。

編譯器介紹
在編譯器目錄下,有8個(gè)文件,未來(lái)有望減少到7個(gè)。分別是:
入口函數(shù):main.v
main.v用于V計(jì)算出構(gòu)建模式、構(gòu)造編譯器對(duì)象(struct V)
創(chuàng)建需要解析的.v文件列表、為每個(gè)文件創(chuàng)建一個(gè)解析器對(duì)象并運(yùn)行parse()。
出于性能原因,解析器直接發(fā)出C或x64代碼,沒(méi)有AST或匯編代碼生成。如果解析成功,則通過(guò)合并解析器的輸出并仔細(xì)排列所有定義來(lái)生成單個(gè)C文件。
最后,調(diào)用C編譯器來(lái)編譯此C文件并生成可執(zhí)行文件或庫(kù)。
parser.v
這是編譯器的核心。parse()方法請(qǐng)求掃描程序?yàn)槠湫枰馕龅奈募闪钆屏斜恚缓笾饌€(gè)遍歷所有的標(biāo)記即可。
在V中,可以在聲明之前使用對(duì)象,因此有2次傳遞。在第一次傳遞期間,它只查看聲明并跳過(guò)函數(shù)體。它記憶所有函數(shù)簽名、類型、常數(shù)等;在第二次傳遞期間,它查看函數(shù)體并生成C例如cgen('if($ expr){')或機(jī)器代碼例如gen.mov(EDI,1)。
Formatter嵌入在解析器中,在解析時(shí)會(huì)發(fā)出格式正確的標(biāo)記,可以簡(jiǎn)化編譯器并避免重復(fù),但會(huì)犧牲速度。
在將來(lái),這將通過(guò)構(gòu)建標(biāo)志和單獨(dú)的二進(jìn)制文件來(lái)修復(fù),用于C生成,機(jī)器代碼生成和格式化,這樣就不會(huì)有不必要的分支和函數(shù)調(diào)用。
scanner.v
scanner的工作是解析字符列表并將其轉(zhuǎn)換為令牌。它還負(fù)責(zé)字符串插值,目前這塊還比較混亂。
token.v
只是所有標(biāo)記的簡(jiǎn)單列表,包括一些字符串值以及一些輔助函數(shù)。
table.v
V創(chuàng)建一個(gè)由所有解析器共享的表對(duì)象。它包含所有類型、常數(shù)和函數(shù),以及按名稱搜索對(duì)象、注冊(cè)新對(duì)象、修改類型字段等的幾個(gè)幫助器。
cgen.v
Cgen結(jié)構(gòu)有助于生成C代碼,所有解析器也共享它。它有一些函數(shù)可以返回并設(shè)置以前未知的東西(比如:= 0 => int a = 0;)。這塊還需要進(jìn)一步優(yōu)化和改進(jìn)。
fn.v
處理聲明和調(diào)用普通和異步函數(shù)和方法。大約有1000行代碼,并且有一些復(fù)雜的邏輯,這塊還需要一些簡(jiǎn)化和整理。
json.v
定義json代碼生成。一旦V支持生成comptime代碼,該文件將被刪除,并且可以使用該語(yǔ)言的工具執(zhí)行此操作。
x64/
包含所有機(jī)器代碼生成邏輯的目錄,將于7月初完成。顯然,這是編譯器中最復(fù)雜的部分。它定義了一組將匯編指令轉(zhuǎn)換為機(jī)器代碼的函數(shù);逐字節(jié)地從頭開始構(gòu)建復(fù)雜的二進(jìn)制文件;手動(dòng)構(gòu)建所有header、segment、section,symtable,重定位等。
V的功能及表現(xiàn)
整個(gè)語(yǔ)言及其標(biāo)準(zhǔn)庫(kù)小于400KB。V就是用V語(yǔ)言攜程的,你可以在0.4秒內(nèi)構(gòu)建它,到今年年底,這個(gè)數(shù)字將下降到≈0.15秒。

請(qǐng)看對(duì)比:

現(xiàn)在V編譯器確實(shí)有一個(gè)依賴:C編譯器。但是無(wú)論如何都需要引導(dǎo)語(yǔ)言,如果你正在從事開發(fā),顯然已經(jīng)是安裝了C編譯器。這是一個(gè)小的依賴,一旦x64 generation足夠成熟就不需要了。
V可以轉(zhuǎn)換整個(gè)C或C ++項(xiàng)目,提供安全性,簡(jiǎn)單性和高達(dá)400倍的編譯速度。
無(wú)需重新編譯即可立即獲取更改,每次編譯后也無(wú)需進(jìn)入正在處理的狀態(tài),因此可以節(jié)省大量寶貴的開發(fā)時(shí)間。
基于GDI+/Cocoa Drawing構(gòu)建的跨平臺(tái)繪圖庫(kù),以及基于OpenGL的圖形庫(kù),用于更復(fù)雜的2D/3D應(yīng)用程序。
V有一個(gè)使用本機(jī)GUI工具包的ui模塊:Windows上的WinAPI/GDI+,macOS上的Cocoa。在Linux上使用自定義繪圖。
交叉編譯也很簡(jiǎn)單,只需運(yùn)行v -os windows或v -os linux。即使對(duì)于GUI和圖形應(yīng)用程序,也無(wú)需額外的步驟!
其他更多特性可以去官網(wǎng)閱讀開發(fā)文檔。
最終表現(xiàn)如何呢?根據(jù)作者介紹,V和C一樣快;C interop無(wú)需任何成本;分配數(shù)量最少;沒(méi)有運(yùn)行時(shí)反射的內(nèi)置序列化;編譯本地二進(jìn)制文件不需要任何依賴:一個(gè)簡(jiǎn)單的Web服務(wù)器只有65KB。
-
語(yǔ)言
+關(guān)注
關(guān)注
1文章
97瀏覽量
24866 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4420瀏覽量
67788 -
編譯器
+關(guān)注
關(guān)注
1文章
1672瀏覽量
51866
原文標(biāo)題:V,新編程語(yǔ)言來(lái)襲!與Go類似,跟C一樣快
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linear推出一款60V的DC/DC控制器LT3761
如果設(shè)計(jì)一款桌面款的機(jī)器玩具,最吸引人的外觀與功能要有哪些?
求助一款變壓器?
俄羅斯科技巨頭Yandex推出一款智能音箱 售價(jià)160美元
求一款12V轉(zhuǎn)5V低功耗的電壓芯片
東芝推出一款800萬(wàn)像素的CMOS圖像傳感器
華為海思已推出一款RISC-V開發(fā)板
求一款24V轉(zhuǎn)12V穩(wěn)壓電路
Cree推出一款LED LMH6 模組
蘋果將推出一款名為 AirTag 的新產(chǎn)品
推薦一款基于RISC-V MCU的開源SoC平臺(tái)
介紹一款輕量級(jí)的RISC-V解釋型模擬器
Meta發(fā)布一款可以使用文本提示生成代碼的大型語(yǔ)言模型Code Llama
一款最新推出的語(yǔ)言:V
評(píng)論