玩一玩 vlang

Posted by rarnu on 06-24,2019

初识 vlang 应该是从秋名山群开始的吧,某大佬分享了 vlang 之后自己不玩,于是就我来玩吧2333。

在 github 上找到 vlang 的源码,下载编译之,这里直接遇到第一个坑!

坑!

有没有看到后面有一句话告诉你 code 目录是必要的,至少在当前版本是必需的,像我这种不看文档,下载就编译的人直接吃了个亏。

随后把编译结果 link 到 /usr/local/bin 就完事。

接下去配置一下 vscode,比较出乎意料的是 vscode 上已有 vlang 插件,而且还挺好用的。

插件

同时还需要下载并配置 CodeRunner 插件,加入 vlang 的运行命令,以方便我们直接运行代码。

"v": "v $fileName && ./$fileNameWithoutExt"

接下去自然是看看文档然后写点代码玩玩,由于事先知道这东西和 go 很像,我就直接往后翻了,直到一段代码映入眼帘:

struct Dog {}
struct Cat {}

fn (d Dog) speak() string { 
	return 'woof'
} 

fn (c Cat) speak() string { 
	return 'meow' 
} 

interface Speaker {
	speak() string
}

fn perform(s Speaker) { 
	println(s.speak())
} 

fn main() {
    dog := Dog{} 
    cat := Cat{} 
    perform(dog) // ==> "woof" 
    perform(cat) // ==> "meow" 
}

直接被吓死,第一次看到接口是如此设计的语言,真要用起来,接口的实现上哪找:(

另外还有一些看起来很有特色但是我一点都不喜欢的特性,比如说这些:

特别提一句,v 没有泛型!总体来说,v 并不算出彩的语言,语言特性非常弱,容易上手,但是要实现复杂的内容,恐怕还是会落入到 go 的俗套(当时学习 go 的时候我就吐槽过为什么没有泛型,结果到了现在依然没有,结合其他的一些缺点,我甚至不认为它是一门现代的语言),动态能力不足。

或许对于我来说,玩过一把之后就这样吧,继续等它完善了(别再学 go 了!!!)