最近V语言持续在GITHUB上霸屏,而笔者在上周介绍了V语言的一些基础,详见:GITHUB排行榜C位出道-手把手教你玩转V语言版的俄罗斯方块,而这周我也持续关注了V语言的动态,这次带大家玩一下V语言版的毁灭战士。

V语言 VS C/C++

访问V语言的官网https://vlang.io/,可以看到其主打的特点就有

  • C to V translation

在具体介绍时其声称可以用快400倍的速度来整译整个C或者C++语言的工程。

而且还举出了使用V语言使用vector例子

#这是C++使用vector的版本
std::vector<std::string> s;
s.push_back("V is ");
s.push_back("awesome");
std::cout << s.size(); 
#这是V语言的版本
mut s := []
s << 'V is '
s << 'awesome'
println(s.len)
    我看可以看到V语言在语法上与JAVA、.NET等纯面向对象的语言比较接近语法甜点很多,API的调用也不像C++那么刻板,但是其内核其实是C/C++,这就让我们这种金融IT的人士非常的开心,因为纯的面向对象语言都有垃圾回收的问题,延时的不确定性使JAVA不太适合做为量化交易的主要编程语言,而Rust虽然也没有延时,但是他还没有像V一样在不进行改造的情况下,直接完整编译C语言工程的能力。所以V语言不但具备了C的高效率还能能与C兼容、最关键的是语法掌握起来比较简单,这也是V的核心优势。

V语言版的DOOM

在V语言的官网上提到马上有一篇将毁灭战士(DOOM)翻译为V语言的博客PO出,不过使用V语言编译、执行DOOM也能让我们进一步了解V调用C、C++的机制,其Github的地址在github.com/vlang/doom。

下面我来给带大家整理一下ubantu下的安装过程(V语言的安装过程请参考https://blog.csdn.net/BEYONDMA/article/details/94349691,这里假设读者已经装好不再赘述)

1.安装sdl库

sudo apt install libsdl2-dev
sudo apt install libsdl2-mixer-dev

   注意这步在官网上并未说明,如果不装后面在MAKE的阶段会报sdl::mixer库missing

2.编译doom代码

git clone https://github.com/chocolate-doom/chocolate-doom
cd chocolate-doom
cmake .
make chocolate-doom

3.下载V的调用DOOM工程的代码

wget https://raw.githubusercontent.com/vlang/doom/master/p_enemy.v
v -lib translated p_enemy.v
cp p_enemy.o src/doom/CMakeFiles/doom.dir/p_enemy.c.o

4.运行程序

make chocolate-doom
src/chocolate-doom -width 640 #640是指程序运行界面的宽度

5.p_enemy.v调用C的机制

下面我再给大家展示一下p_enemy.v,我们可以看到如果想调用C的函数,只需要在声明加上fn C.函数名(函数签名) 返回类型,即可完成,另外调用__global标签就能调用全局变量了。可以说是非常方便啊。

struct C.FILE{}
fn C.memcpy(voidptr, voidptr, int)#调用C的函数
fn C.memmove(voidptr, voidptr, int)
fn C.memset(voidptr, voidptr, int)
fn C.puts(voidptr)
fn C.printf(voidptr, ..)
fn C.sscanf(voidptr,voidptr, ..) voidptr
fn C.strcasecmp(voidptr, voidptr) int
fn C.strncasecmp(voidptr, voidptr, int) int
fn C.strcmp(voidptr, voidptr) int
fn C.strncmp(voidptr, voidptr, int) int
fn C.fopen(byteptr, byteptr) *C.FILE
fn C.fclose(*C.FILE)
fn C.ftell(*C.FILE) int
fn C.remove (byteptr)
fn C.rename ( byteptr, byteptr)
fn C.isspace(byte) int
fn C.atoi(byteptr) int __global video_driver byteptr#调用全局变量 __global screenvisible bool __global vanilla_keyboard_mapping int __global screensaver_mode bool __global usegamma int

具体效果是这样的,虽然只是DOOM一代的画质,但是笔者还是很喜欢,玩了一下午。纯V语言版DOOM出炉笔者会在第一时间向大家分享。

持续排名GITHUB榜首的V语言竟是C++的孪生兄弟-V版毁灭战士值得点赞相关推荐

  1. V 语言强势登顶 GitHub TOP1,欲取 Go 而代之?

    这个结合了 Go 和 Rust 特性的新语言 V,正式发布了首个可用版本. 整理 | 郭芮 出品 | CSDN(ID:CSDNnews) 长久以来,编程语言在语法.语义和标准库等方面都存在着千差万别, ...

  2. 诞生一年来,V 语言还好吗?

    问题在于,V语言真的这么好吗?好到足以每个月赚915美元? 作者 | Robin Martijn 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 去年2月, ...

  3. GITHUB排行榜C位出道-手把手教你玩转V语言版的俄罗斯方块

    最近 V 语言-一个GO语言最吸晴的项目,在千呼万唤之后,终于迎来开源,并正式发布了首个可用版本,其一经推出,便强势登顶 GitHub的榜首,引来各方热议.目前V已经可以实现自我编译迭代,笔者大致了解 ...

  4. 【GitHub探索】v语言上手,用vlang写一个聊天应用

    前言 vlang(v语言)自从6月份突然炒热起来,不知不觉到了11月,正式版就要出来了,在11月的GitHub Trending榜中依然排在前10.这着实令人好奇,因此笔者决定试用一下vlang,写一 ...

  5. 最详细的v语言(vlang)的编译器的安装与运行!

    ​在这里给有兴趣的人提供最详细的安装过程. 其间过程是艰难的,体验是痛苦的. 相信大多数人在安装新语言的ide和环境配置的过程中都会遇到的各种各样的坑,一踩就拔不出来了.如下我们开始安装过程. 再提一 ...

  6. delphi windows编程_2020年值得关注的新编程V语言Vlang,对标Golang、Rust、Swift

    编程语言的世界总是能搞出新花样,虽然基本原理都是万变不离其宗,但是对我们个人而言,选择好一个语言的确可以事半功倍,何乐而不为呢? 要说目前2020年比较新奇的语言,就得说说V语言Vlang了,MIT开 ...

  7. V语言环境部署教程-linux

    在linux系统上,目前有两种搭建V语言环境的方法: 一:git 下载源码并编译出可执行文件,然后创建软链接 二:直接下载别人编译好的可执行文件v  ,然后改权限为可执行文件,再创建软链接 下面用ub ...

  8. v语言初体验,安装,使用

    6.23号v发布当天并没有安装使用,只是简单阅读了一下文档,6.23号看还是0.0.12版本,今天已经更新到0.1.1,前期的版本的更新确实很快,今天体验一下 由于是发布不久,目前还没有打包好的可执行 ...

  9. C语言设备管理器作业,你知道到吗,C语言竟是如何调用硬件的?

    原标题:你知道到吗,C语言竟是如何调用硬件的? 大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗? 网友北极 c语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C语言 ...

最新文章

  1. 话里话外:新顾问答疑解惑对话大公开
  2. Machine Learning | (7) Scikit-learn的分类器算法-决策树(Decision Tree)
  3. Q+会带来什么样的互联网时代?
  4. python100个必背知识-python编程面试中必考的知识点,数据类型全解,笔记超全面...
  5. python项目-这4个Python实战项目,让你瞬间读懂Python!
  6. [How TO]-How to install maven
  7. LoadRunner脚本篇
  8. python iterator iterable_Python中Iterator和Iterable的区别
  9. python类继承返回值_python继承threading.Thread实现有返回值的子类实例
  10. staf工作笔记-扩展stax官方实例的补坑说明
  11. 【java】docker容器内使用jstack等命令报错 The VM does not support the attach mechanism
  12. 在C#中,List struct中的值是否装箱?
  13. Java方法的局限,Java接口有的局限性,它良好而解决了这个问题
  14. 剑指offer 数字在排序数组中出现的次数
  15. Oracle常见的Hint(二)
  16. Snipaste安装教程及软件(截图工具)
  17. 人脸识别产品问题及改进方法
  18. MMA-关于mathematica中添加注释的一些方法(包括排版技巧)
  19. 国家开放大学2021春1259西方行政学说题目
  20. JVM GC(垃圾回收机制)Minro GC,Major GC/Full GC

热门文章

  1. android 分区存储适配总结
  2. 机器学习 标量、向量、矩阵的求导 PyTorch自动求导
  3. 译算法交易策略的成功测一
  4. 手机cpu缓冲区大小怎么设置_手机怎么设置dns 手机设置dns方法【详解】
  5. Python ,SVM模型效果的评估指标
  6. 非零基础自学Golang 1 前景
  7. ffmpeg 直播流截图
  8. CentOS7做ssh免密登录
  9. GDOI2016游记
  10. DataGrip 初探:如何离线安装数据库驱动