V語(yǔ)言學(xué)習(xí)筆記-總覽

最新版本學(xué)習(xí)筆記:github電子書(shū)

利用閑暇時(shí)間,體驗(yàn)了V語(yǔ)言,邊看邊動(dòng)手記錄,所以有了這個(gè)V語(yǔ)言學(xué)習(xí)筆記

寫在前頭的話

畢竟這是一門新發(fā)布的語(yǔ)言,開(kāi)源時(shí)間不到1年,穩(wěn)定性和成熟度肯定還需要時(shí)間完善,目前不能期望太高

不過(guò)V語(yǔ)言作者還是實(shí)現(xiàn)了很多不錯(cuò)的語(yǔ)言特性,也很佩服他有勇氣,有能力,又開(kāi)發(fā)了一門新語(yǔ)言,并且很努力地全職開(kāi)發(fā),快速更新

總之,V語(yǔ)言還算是很有潛力的一門新語(yǔ)言,不喜歡的人可以忽略,喜歡的人不妨抽點(diǎn)時(shí)間跟進(jìn)一下,一起跟著V語(yǔ)言成長(zhǎng)...

V語(yǔ)言github:https://github.com/vlang

為什么喜歡V

V感覺(jué)就是go+rust+c的結(jié)合體罚渐,吸收了這三者的優(yōu)點(diǎn),不過(guò)像go更多一點(diǎn)

V實(shí)現(xiàn)了自舉却汉,編譯器把V代碼生成C代碼,然后再調(diào)用gcc或者clang來(lái)編譯生成的C代碼

V的語(yǔ)法看著荷并,寫著都很舒服病涨,比go和rust都好

吸收了go和rust中的各種簡(jiǎn)潔和優(yōu)秀的特性

主要還是看重:

1.簡(jiǎn)潔,干凈的語(yǔ)法,看起來(lái),寫起來(lái)都很舒服

2.沒(méi)有GC,編譯快,生成的執(zhí)行文件很小,執(zhí)行很快

感覺(jué)V才是 "better C"

當(dāng)然,目前V的階段還是比較早期的,還是不夠穩(wěn)定

開(kāi)發(fā)的速度挺快的,新語(yǔ)法特性一直在完善璧坟,bug也還挺多的既穆,還不能用到實(shí)際的項(xiàng)目中

即使1.0發(fā)布了,也有挺長(zhǎng)的路要走,畢竟一門編譯語(yǔ)言的發(fā)展是按年來(lái)計(jì)算的


安裝

源代碼安裝

目前V語(yǔ)言還處在快速開(kāi)發(fā)的不穩(wěn)定階段,首選源代碼安裝方式.

編譯準(zhǔn)備

目前V語(yǔ)言的編譯需要依賴C編譯器:gcc或clang

如果沒(méi)有C編譯器,可以參考以下文檔,進(jìn)行安裝:

windows下安裝C編譯器

linux/macOS下安裝C編譯器

下載源碼/編譯

git clone https://github.com/vlang/v
cd v    
make

編譯成功后,會(huì)在當(dāng)前目錄生成V編譯器的可執(zhí)行文件,大小700k左右,小巧得很.

可以使用v version查看當(dāng)前的版本

后續(xù)升級(jí)

方式一:

v up //抓取github上V代碼庫(kù)的主干代碼,然后自動(dòng)重新編譯

方式二:

git pull
make

下載預(yù)編譯安裝包

官網(wǎng)直接下載對(duì)應(yīng)平臺(tái)的安裝包

這個(gè)目前不推薦使用,更新太慢


快速總覽

這個(gè)部分試圖展示V語(yǔ)言的總體特性,形成對(duì)V語(yǔ)言的一個(gè)總體印象,后續(xù)章節(jié)再展開(kāi)逐個(gè)部分詳細(xì)介紹

  • V語(yǔ)言是一門靜態(tài)類型,編譯型語(yǔ)言

  • 語(yǔ)法追求簡(jiǎn)潔,基本就是吸收了go和rust中各自簡(jiǎn)潔的部分,go的部分更多一些,代碼看起來(lái),寫起來(lái)都很舒服,這個(gè)應(yīng)該也是大多數(shù)人第一眼看到V語(yǔ)言的感覺(jué),被吸引的主要原因之一

  • 無(wú)GC,錯(cuò)誤處理機(jī)制,支持泛型,這三點(diǎn)一直是go有爭(zhēng)議的地方,V語(yǔ)言都有

  • 無(wú)全局變量,無(wú)空值null,變量默認(rèn)不可變,結(jié)構(gòu)體默認(rèn)不可變,從rust那邊吸收了一些

  • 模塊化支持,包管理工具

  • 提供跟go一樣的并發(fā)

  • 7個(gè)1級(jí)元素:const常量,enum枚舉,function函數(shù),struct結(jié)構(gòu)體,method方法,interface接口,type類型


  • 編譯速度很快,可以跨平臺(tái)交叉編譯,編譯出來(lái)的可執(zhí)行文件很小,運(yùn)行速度就是C的速度

  • 實(shí)現(xiàn)自舉,編譯器也是用V語(yǔ)言寫的

  • 基本的編譯器思路是:把V源代碼編譯生成C源代碼,然后調(diào)用C編譯器編譯生成單一可執(zhí)行文件

  • 很容易跟C集成,方便使用C成熟豐富的代碼庫(kù)

  • 可以使用C手動(dòng)管理內(nèi)存malloc,calloc,memmove,memcpy實(shí)現(xiàn)對(duì)內(nèi)存進(jìn)行手工控制


  • Vscript可以像python腳本那樣簡(jiǎn)單,方便地寫系統(tǒng)shell

  • 內(nèi)置json支持,非運(yùn)行時(shí)反射實(shí)現(xiàn),性能更好

  • 內(nèi)置SQL語(yǔ)法支持,實(shí)現(xiàn)更簡(jiǎn)單的ORM

  • 內(nèi)置一個(gè)輕量的跨平臺(tái)GUI庫(kù)

  • 內(nèi)置一個(gè)web框架

  • 代碼熱更新,修改代碼,實(shí)時(shí)顯示結(jié)果


  • V代碼生成javascript,webassembly代碼

  • C/C++代碼生成V代碼


以上是對(duì)V語(yǔ)言的特性總覽,里面有的特性已經(jīng)實(shí)現(xiàn),有的還未實(shí)現(xiàn)

有些未實(shí)現(xiàn)的特性好得讓人感覺(jué)不真實(shí),拭目以待吧,畢竟語(yǔ)言的發(fā)展周期都是按年來(lái)計(jì)算的

未實(shí)現(xiàn)的功能正在逐步實(shí)現(xiàn),計(jì)劃在2020年5月份發(fā)布0.2版本,相對(duì)完善一些,穩(wěn)定一些

希望作者和開(kāi)發(fā)團(tuán)隊(duì)能持續(xù)下去,周邊生態(tài)能起來(lái)


V語(yǔ)言代碼初步印象:

//單行注釋

/*
多行注釋
*/

module main     //定義主模塊,編譯生成可執(zhí)行程序

import os       //導(dǎo)入模塊
import strings
import time

fn main() {     //主函數(shù),程序運(yùn)行入口
    println('say hello world')  //語(yǔ)句結(jié)尾不需要分號(hào)
}

//模塊內(nèi)7個(gè)主要一級(jí)元素:常量,枚舉,函數(shù),結(jié)構(gòu)體,方法,接口,類型

//1.常量
pub const (
    Version = '0.1.21'
    supported_platforms = ['windows', 'mac', 'linux']
)

//2.枚舉
pub enum OS {
    mac
    linux
    windows
}

//3.函數(shù)-函數(shù)的定義風(fēng)格基本跟go一樣,只是關(guān)鍵字改為更簡(jiǎn)短的fn雀鹃,支持不確定個(gè)數(shù)參數(shù)幻工,支持多返回值
//pub表示公共級(jí)別的訪問(wèn)控制,可以被模塊外使用黎茎,否則只能在模塊內(nèi)使用
pub fn my_fn(x,y int) int {
    i:=1            //強(qiáng)類型囊颅,類型推斷
    s:='abc'    //變量默認(rèn)不可變,約定用單引號(hào)表示字符串,雙引號(hào)也可以,反引號(hào)才是單字符
    mut a:=3    //可變用var
    a=5             //聲明可變后,才可修改
        println(i)
        println(s)
    return a
}
//3.函數(shù)-泛型函數(shù)
pub fn g_fn<T>(p T) T {
    return p
}

//4.結(jié)構(gòu)體-結(jié)構(gòu)體定義
pub struct Point { //結(jié)構(gòu)體字段一共有5種訪問(wèn)控制
//默認(rèn)私有且不可變
  a int  
//私有,但可變
mut:     
    x int
    y int
//公共,但不可變
pub:    
    d int 
//模塊內(nèi)可訪問(wèn)且可變;模塊外可訪問(wèn),但是只讀
pub mut:
    e int 
//全局字段,模塊內(nèi)部和外部都可訪問(wèn),可修改,這樣等于破壞了封裝性,不推薦使用
__global:
    f int 
}

//4.結(jié)構(gòu)體-泛型結(jié)構(gòu)體
struct Repo<T> {
    db DB
mut:
    model  T
}

//5.方法-方法只是指定了接收者的函數(shù)踢代,跟go一樣
pub fn (mut p Point) move(x,y int) {
    p.x+=x
    p.y+=y
}
//6.接口-接口無(wú)須顯式聲明實(shí)現(xiàn),鴨子類型,跟go一樣
pub interface Walker {
    walk(int,int) int
}

//7.類型-類型別名,可以基于基本類型,也可基于結(jié)構(gòu)體類型創(chuàng)建類型別名
pub type myint = int

//7.類型-函數(shù)類型盲憎,表示這一類相同簽名的函數(shù)
pub type fn_type = fn(int) int

//7.類型-聯(lián)合類型,跟typescript類似胳挎,表示類型Expr可以是這幾種類型的其中一種
pub type Expr = Foo | BoolExpr |  BinExpr | UnaryExpr


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饼疙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慕爬,更是在濱河造成了極大的恐慌窑眯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件医窿,死亡現(xiàn)場(chǎng)離奇詭異磅甩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)姥卢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門卷要,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人独榴,你說(shuō)我怎么就攤上這事却妨。” “怎么了括眠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵彪标,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我掷豺,道長(zhǎng)捞烟,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任当船,我火速辦了婚禮题画,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘德频。我一直安慰自己苍息,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布壹置。 她就那樣靜靜地躺著竞思,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钞护。 梳的紋絲不亂的頭發(fā)上盖喷,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音难咕,去河邊找鬼课梳。 笑死距辆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暮刃。 我是一名探鬼主播跨算,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼椭懊!你這毒婦竟也來(lái)了诸蚕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤灾搏,失蹤者是張志新(化名)和其女友劉穎挫望,沒(méi)想到半個(gè)月后立润,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體狂窑,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年桑腮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泉哈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡破讨,死狀恐怖丛晦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情提陶,我是刑警寧澤烫沙,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站隙笆,受9級(jí)特大地震影響锌蓄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撑柔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一瘸爽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铅忿,春花似錦剪决、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至峻凫,卻和暖如春妒茬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔚晨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工乍钻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肛循,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓银择,卻偏偏與公主長(zhǎng)得像多糠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浩考,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359