专栏首页CSDN技术头条V 语言强势登顶 GitHub TOP1,欲取 Go 而代之?

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

这个结合了 Go 和 Rust 特性的新语言 V,正式发布了首个可用版本。

长久以来,编程语言在语法、语义和标准库等方面都存在着千差万别,使得程序员在选择时不得不面临着差异化等难题。自然选择下,就会有旧语言的淘汰(PHP 是个意外,至今还存在)和新语言的诞生。在 JetBrains 最新发布的《2019 开发人员生态系统现状》报告中,Java、Python、C/C#、JavaScript 等主流的编程语言在历经实践考验后依然是开发者们的心头好。

而本文的主角 V 语言,在千呼万唤之后,终于于近日开源了,并正式发布了首个可用版本(预构建的二进制文件也即将推出)!其一经发布,便强势登顶 GitHub TOP1,引来开发者们的热议围观。

(https://github.com/vlang/v/releases/tag/v0.0.12)

根据介绍,V 是一种新型的静态编译型语言,可以“快速编译、安全且和 C/C++ 转换”,其提供了方便、快捷、安全的编程语言和工具包,还能够很好地服务于区块链技术。

V 语言作者 Reishi Saza 就表示,它是一种非常简单的语言,看官方文档 30 分钟就能完全掌握。而且,其编译器只有 400KB,无任何第三方依赖。

(作者展示的应用示例:V 语言建立的 macOS Demo)

V 的核心 CPU 每秒可以编译大约 120 万行代码,这种速度是通过生成的机器代码和强大的模块化来实现的,但是目前仅支持 x64/Mach-O,预计到今年年底才能足够稳定。而在性能表现上,V 可以做到和 C 一样快,且能够翻译整个 C 或 C++ 项目,实现高达 400x 的编译速度。

std::vector<std::string> s;
s.push_back("V is ");
s.push_back("awesome");
std::cout << s.size();

mut s := []
s << 'V is '
s << 'awesome'
println(s.len)

目前,整个 V 语言及其标准库小于 400 KB,开发者在 0.4 秒内就可以构建它。并且到今年年底,这个数字还将下降到大约 0.15 秒。

此外,开发者们还在官网上放出了部分示例代码。更多编译器函数介绍可参见官方网站:https://vlang.io/。

1、数据库访问:

struct User { /* ... */ }
struct Post { /* ... */ }
struct DB   { /* ... */ }

struct Repo <T> {
    db DB
}

fn new_repo<T>(db DB) Repo {
    return Repo<T>{db: db}
}

fn (r Repo) find_by_id(id int) T? { // `?` means the function returns an optional
    table_name := T.name // in this example getting the name of the type gives us the table name
    return r.db.query_one<T>('select * from $table_name where id = ?', id)
}

fn main() {
    db := new_db()
    users_repo := new_repo<User>(db)
    posts_repo := new_repo<Post>(db)
    user := users_repo.find_by_id(1) or {
        eprintln('User not found')
        return
    }
    post := posts_repo.find_by_id(1) or {
        eprintln('Post not found')
        return
    }
} 

2、网络开发:

struct Story {
    title string
}

// Fetches top HN stories in 8 coroutines 
fn main() {
    resp := http.get('https://hacker-news.firebaseio.com/v0/topstories.json')?
    ids := json.decode([]int, resp.body)?
    mut cursor := 0
    for _ in 0..8 {
        go fn() {
            for  {
                lock { // Without this lock the program will not compile 
                    if cursor >= ids.len {
                        break
                    }
                    id := ids[cursor]
                    cursor++
                }
                resp := http.get('https://hacker-news.firebaseio.com/v0/item/$id.json')? 
                story := json.decode(Story, resp.body)?
                println(story.title)
            }
        }()
    }
    runtime.wait() // Waits for all coroutines to finish 
} 

当然,目前V 语言的开发仍处于早期阶段,很多方面还不够完善,尤其是内存管理上还面临着与 Go 和 Rust 同样繁琐的生命期管理问题,但对比 C++ 等手动和半自动的管理方式还是更省心一些的。

那么开发者们怎么看?

@三川走刀口:还是要得到开发者认可,但是对于安卓开发好像没用? @淡定的龙哥:Go语言同父异母的弟弟? @Heisenber哥:语言特性只是一方面,生态也很重要。 @王的凝视:这个新语言提出来是为了解决什么问题?每种语言都有适合场景,如果没有合适场景迟早也要被淘汰。 @楚小欢:执行效率比C高应该不可能,C现在都被认为是汇编语言,本身语义也十分接近汇编。别的语言只要有高级点的特性,效率就不可能超过C。

总之,这个新生的 V 语言还是需要不断的发展,得到开发者的广泛应用才能焕发生机,也才能有望助力程序员做到真正的“人剑合一”。

本文分享自微信公众号 - GitChat精品课(CSDN_Tech),作者:CSDN App

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【SDCC讲师专访】华为李元佳:我对Postgres未来的发展是非常乐观的

    本期我们采访的嘉宾是Postgres中国用户会发起人,开源爱好者李元佳先生,目前在华为担任数据库方面的产品规划,曾经在Nortel Networks、NTT、E...

    CSDN技术头条
  • 2016年企业级软件的5个预测

    如今是数码时代,作为IT行业的支柱,软件几乎渗透了人类生活的方方面面。那么作为世界上最热门的行业之一,它的未来又是怎样的呢?本文总结了来自Skyport Sys...

    CSDN技术头条
  • 我猜,每个程序员对着电梯都想过调度算法吧!

    但说起电梯调度算法,我觉得还是可以给大家科普一下,好为大家在等电梯之余,打发时间而做出一点贡献。(电梯调度算法可以参考各种硬盘换道算法,下面内容整理自网络)

    CSDN技术头条
  • 时间约束的自适应影响最大化(Social and Information Networks)

    众所周知,影响最大化问题的目的是通过在扩散过程之前选择合适的种子用户来最大化一个信息级联在社交网络中的影响。在其自适应版本中,可以通过观察一定的扩散结果来选择额...

    用户6869393
  • 使用SAP CRM AET工具创建类型为下拉列表的扩展字段

    When you create extension field via Application Extension Tool, it seems the cod...

    Jerry Wang
  • 蚂蚁能够定向盗窃案中的偷盗者(CS Artificial Intelligence)

    我们强调了偷盗者定向问题(Thop),一个组合了两个经典组合,优化问题的多元问题,即为定向问题和背包问题。鉴于给定的时间约束和作负荷而定的移动速度与选定路线的相...

    Donuts_choco
  • SAP Fiori里两种弹出对话框(popup dialog)设计

    This blogs introduces the tips how to find the location of source code where the...

    Jerry Wang
  • UNPv1第六章:IO复用select&poll

    有些进程需要一种预先告知内核的能力,使得内核一旦发现进程指定的一个或多个I/O条件就绪(也就是说输入已准备好被读取,或者描述符已能承受更多的输出),他就通知进程...

    提莫队长
  • Scaling data to the standard normal缩放数据到标准正态形式

    A preprocessing step that is almost recommended is to scale columns to the stand...

    到不了的都叫做远方
  • 剑指offer 33 把数组排成最小的数

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/28128551

    bear_fish

扫码关注云+社区

领取腾讯云代金券