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