v语言怎么玩

news/2024/11/24 21:07:29/

直接上github: https://github.com/vlang/v

前戏

大概是在6月份的时候,在github上看到了这个玩意,我以为是???

V字仇杀队 ??

我下意识的去查了一下有没有人在讨论这个语言,但是关于这货的在国内讨论比较少

giKUoMs2pCRZJlf.png

噱头如下:

  • Simplicity: the language can be learned in less than an hour (有编程基础的人学起来很简单)
  • Fast compilation: ~100k loc/s right now, ~1.2 million loc/s once x64 generation is mature enough (编译速度超级快)
  • Easy to develop: V compiles itself in less than a second (编译快)
  • Performance: within 3% of C (不太理解这个)
  • Safety: no null, no globals, no undefined behavior, immutability by default (没有全局变量, 没有undefined)
  • C to V translation ( c 可以编译到 v :不知道说对没有)
  • Hot code reloading (热编译)
  • Powerful UI and graphics libraries (自带ui库!!!)
  • Easy cross compilation (交叉编译)
  • REPL (命令行..有点鸡肋)
  • Built-in ORM (不太懂)

编译安装

看到是c的东东,我心动了(实际上,最起始几个版本是Go实现的)
废话少说,编译安装(windows的同学请在WSL下试玩)

git clone https://github.com/vlang/v
cd v
make
ln -s $PWD/v /usr/local/bin/v
v --version
# 1.xxx

新手朋友记得不要删除这个v目录,不然会报错(这货是自己编译自己,确实有点6)

现在你就可以进入REPL


☁  /tmp  vlan
V 0.1.18
Use Ctrl-C or `exit` to exit
>>> println('hello world')
hello world
>>>

一个小问题

不知道有小伙伴注意到了,我是进入了/tmp下才开启的,原因是是这货还没完善,当你启动后会在当前目录下留下缓存文件(编译好的.a.out.c或者其他文件),这对于强迫症怎么忍!
给大家分享一个脚本


#/usr/bin/env bash
cd /tmp
vlan

g3Pp5A6TSqnFciK.png

还有你在运行文件的时候同样会生成这些文件,只能说相当难受了,我已经提过issues,看开发者多久弄好吧

https://github.com/vlang/v/issues/1725

63633971-195c3700-c683-11e9-8592-d63a132e759b.png

文档

目前官方的文档写的有些乱,原因是还在开发中,有很多特性还写进去
(在v中变量不能使用大写,所以不能使用js中的命名方法)
v在运行会产生大量的缓存文件,这是c直接编译的结果,希望快点完善这个啊

基础类型

bool
string
byte
int
..

注释

// this is a single line comment

/* fetch */

变量

vlang中变量是一个必须使用的, 而且在未加修饰符的前提下将不可改变


name := ‘d1y’ // string
age := 20 // intprintln(name)
println(age)

需要改变的变量必须添加修饰符 mut


mut name := ‘d1y’name = ‘fuck’
println(name)

字符串

字符串是使用最多的一种数据类型,但是在v中字符串类型的方法并不多


mut name := ’1234’println(name.len) // 4
println(name.substr(0,1)) // 1

数组

v中,数组的方法也太少了


mut  nums := [1,2,3]nums << 1 // 添加nums << [4,5,6] // 合并操作,这两个操作都会修改原先的数组println(nums.len)

Maps

Maps 在某些场景下是很有用的东西(目前我还不知)


mut m := map[string]intm[‘1’] = 1

if

v中实现的if语法层面和py有点像

a := 1
b := 2if a<b {println(‘cowsay’)
} else {println(‘runtime’)
}// else if

v中实现了所谓了三元运算符


num := 13s := if num % 2 == 0 {‘env'
} else {‘odd'
}
Println(s)

in

in 是可以判断某个值是否存在


nums := [1,2,3]
pirntln(1 in nums) // => true || 1

for循环


nums := [1,2,3]for i, num in nums {println(i)println(num)
}

可以加上循环条件


mut sum := 0
mut i := 0
for i <= 100 {sum += ii++
}
println(sum) // ==> “5050"

也可是在内部通过 break 来停止循环


mut num := 0
for {num++if num >= 10 {break } 
}
println(num) // ==> "10" 

通过continue来阻断本次循环


for i := 0; i < 10; i++ {// Don't print 6if i == 6 {continue}println(i)
}

需要说明的, 这里的i在循环外是无法获取的

Match ( swtich )

v中是没有switch,但是有一个match来控制流程


os := 'windows' 
print('V is running on ')
match os {'darwin' => println('macOS.')'linux' => println('Linux.')else => println(os) 
}

结构体

v中实现有点啰嗦,暂时不知道它的应用场景是什么


struct Point {x inty int 
} p := Point{x: 10 y: 20 
} 
println(p.x)

修饰符: & 意义不明,暂时不知道它的应用场景

方法


struct User {age int 
} fn (u User) can_register() bool {return u.age > 16 
} user := User{age: 10} 
println(user.can_register()) // ==> "false"  user2 := User{age: 20} 
println(user2.can_register()) // ==> "true"  

高阶函数

用起来感觉很啰嗦.


fn sqr(n int) int {return n * n
}fn run(value int, op fn(int) int) int {return op(value)
}fn main()  {println(run(5, sqr)) // "25"
}

常量

我在这里很疑惑, 因为在定义个变量中,如果没设置修饰符就不能修改,那在这里顶一个const常量的意义何在?


cosnt (PI = 3.14Word = ‘世界'
)println(PI)
println(world)

** 常量永远不能改变 **

模块

v到这里只有,我感觉文档写的就很烂了(当然,全文档都很烂,现在只是个玩具语言)

要创建一个模块,你需要创建一个同名的文件夹和文件名,例子

mymodule/mymodule.v


// 首先定义一个命名空间
module mymodulepub fn say_hi() {println(‘hello’)reutrn 1
}

在另一一个文件文件中就可以直接import


module mainimport mymodulefn main() {Mymodule.say_hi()
}

interfaces

暂时未知

enums

暂时未知

defer

延迟, 咱未知应用场景


fn read_log() {f := os.open('log.txt')defer { f.close() }...if !ok {// defer statement will be called here, the file will be closedreturn}...// defer statement will be called here, the file will be closed
}

编译相关

如果在if 的前面加上 $, 那么它只能用来检测os typedebug


$if windows {println('Windows')  
}  
$if linux {println('Linux') 
} 
$if mac {println('macOS') 
} $if debug {println('debugging') 
}

热重启模式

v中实现了这种热编译模式,不过这货产生的缓存文件机制真的烦人


module mainimport time
import os// 在需要热更新的地方添加 [live] 字眼
[live]
fn print_message() {println(‘hot reload’)
}fn main() {for {print_message()time.sleep_ms(500)}
}

在需要的地方添加[live], 然后编译的时候vlan -live run.v
(暂时未知)

交叉编译

v的噱头就是快和多平台编译


vlan -os windows run.v
vlan -os linux run.v
vlan -os mac run.v

交叉编译脚本

我只能说牛逼?,这货可以把os模块代理到全局, 来写简单脚本

// 使用 #v 把 os 代理到全局来#v rm('build/*') 
// Same as:  
for file in ls('build/') {rm(file) 
} mv('*.v', 'build/') 
// Same as:  
for file in ls('.') {if file.ends_with('.v') { mv(file, 'build/') } 
} 

后记

总的来说,我很看好这么语言,不过才刚刚起步
作者是个个人开发者,如果没有牛逼点的公司接盘的话,8成要凉
目前项目贡献只有三位老哥

1721118-20190825165206129-1658439440.png

希望越来越好吧,用来写写脚本绰绰有余,编译速度真的超级快
1721118-20190825165247626-401187842.png

要是巨硬接盘就好了
g3Pp5A6TSqnFciK.png

转载于:https://www.cnblogs.com/kozo4/p/11408418.html


http://www.ppmy.cn/news/276776.html

相关文章

V 字仇杀队(V for Vendetta)

如果 50 年后有人撰写世界电影的编年史&#xff0c; 2006 年的代表电影应该有 《V 字仇杀队》的一席之地。 这部电影注定要和《1984》扯上关系&#xff0c;那个无所不在的”伦敦之声”让你没办法不和”老大哥”联想在一起; 没有人知道真相是怎样&#xff0c;真理掌握在少数人手…

电影之记忆1:V字仇杀队

讲述一个时代的政治体系的由来&#xff01; 主人公在里面是政治的悲剧产物&#xff01; 电影讲述了通过个人力量唤醒公众推翻政党的故事&#xff01; 很喜欢主人公说话的语气&#xff01;给我印象非常深&#xff01; 希望你喜欢&#xff01;希望看过后给点评价&#xff01;

九度oj 题目1364:v字仇杀队

题目描述&#xff1a; 最近玄影游侠看了一部非常好看的电影&#xff0c;叫做《v字仇杀队》。下面是这部电影的主角v&#xff1a; 它想说明的一个问题就是&#xff0c;你现在所想的真的是你自己内心所想的吗&#xff1f;还是别人&#xff0c;社会让你这么想的&#xff1f;你要有…

九度笔记之 1364:v字仇杀队

题目1364&#xff1a;v字仇杀队 时间限制&#xff1a;1 秒 内存限制&#xff1a;32 兆 特殊判题&#xff1a;否 提交&#xff1a;302 解决&#xff1a;109 题目描述&#xff1a; v整整策划了一年炸掉英国政府的大楼来推翻独裁统治&#xff0c;在这期间&#xff0c;v遇到了一个问…

九度 1364 v字仇杀队

http://ac.jobdu.com/problem.php?id1364 经典01背包&#xff0c;没有用空间逆序优化。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int S,C; 5 int force[102]; 6 int space[102]; 7 int mat[102][1002]; 8 int max(int a,int b…

风青杨:如何解读央视播放《V字仇杀队》?

12月14日晚&#xff0c;CCTV-6破天荒播出电影《V字别动队》&#xff0c;此举在微博上引起热议。有网友甚至惊呼“这样的电影能在央视上映&#xff0c;我一度怀疑自己是在做梦。”这部曾经一度禁播的电影自上映以来首次在大陆公映&#xff0c;该片中的经典台词“人民不应该害怕政…

V字仇杀队精彩简介_免费下载

1、英国历史上有个人叫盖伊福克斯试图炸毁议会大厦&#xff0c;最终被判处绞刑。有一个男人戴上盖伊的面具&#xff0c;全副武装后出门了。与此同时伊薇哈蒙德也打算出门&#xff0c;听到节目主持人一味的洗脑而厌烦的伊薇关上电视&#xff0c;发现已经过了宵禁时间&#xff0c…

我的GIT练习ONE

目录 前言 GIT安装教程 Git作者 GIT优点 GIT缺点 为什么要使用 Git GIT练习ONE 总结 前言 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照&#xff0c;以此来对整个项目进行版本管理 GIT安装教程 点击进入查看教程&#xff1a;点击进入 Gi…