V语言 (Vlang) 发布 0.4.1,安全快速可编译的静态语言


V语言 (Vlang) 0.4.1 已发布。主要变化集中在改进语言特性、解析器、标准库,以及编译器内部相关的变化等。

  • 实现Enum.from_string(name string)将字符串转换为枚举值
  • 禁止使用未初始化的函数指针
  • 使用默认 expr 修复匿名结构
  • 支持使用 const 作为枚举值
  • 禁止将静态函数声明为方法接收者 (method receivers)
  • 修复for i++; i<10; i++ {

详情查看 release notes。


V 是一个集合了 Go 的简单和 Rust 的安全特性的静态语言,作者表示 V 与 Go 非常相似,如果你了解 Go,那么就已经了解 80% 的 V。V 在 Go 的基础上进行改进之处:https://vlang.io/compare#go。

V 主要特性

  • 简单(作者声称可以在不到一小时内学习 V)
  • 快速编译(编译器只有 400kb,而且无第三方依赖)
  • 易于开发:V 在不到一秒钟的时间内完成编译
  • 安全:没有 null、没有全局变量、没有未定义的值、边界检测、默认使用 Immutable 结构体
  • 支持 C/C++ 转换
  • 方便使用的交叉编译
  • 提供跨平台 UI 库
  • 内置图形库
  • 内置 ORM
  • 内置 Web 框架
  • ……

示例代码

数据库访问:

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
}
} 

网络开发:

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 
} 

相關推薦

2023-09-22

技术都能四世同堂,凭什么开发 30 岁就要被干掉? V 语言终于有 lambdas 了。 V 是一个集合了 Go 的简单和 Rust 的安全特性的静态语言,作者表示 V 与 Go 非常相似,如果你了解 Go,那么就已经了解 80% 的 V。V 在 Go 的基础

2022-07-06

这对编写内核和没有 FPU 的嵌入式系统很有用 TCC 现在与语言捆绑在一起,这允许在不依赖外部 C 编译器的情况下构建 V 程序 Null 可以只在 unsafe 的情况下使用 新模块 compress.gzip 大量的 net/ net.http/ vweb 修正 支持 IPv6 Go2V

2024-04-01

Scala 2.13.13 现已发布。这是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。此版本更新亮点如下: 语言 支持 binary integer literals using 0b,如 Java 中一样(#10656) 兼容性 TASTy

2024-08-20

MoonBit beta 预览版比大部分主流语言更早推出现代化泛型、精准错误处理和高效迭代器等重要特性,在云计算、边缘计算、人工智能和教育等领域快速实现落地应用。Beta 预览版标志着 MoonBit 生态进入全新阶段,为用户提供更稳定

2022-08-16

(non-latin scripts)的行高 - Android 13 通过使用适合每种语言的行高来改进非拉丁脚本(例如泰米尔语、缅甸语、泰卢固语和藏语)的显示,新的行高可防止剪裁并改善字符的定位。 颜色矢量字体 - Android 13 增加了对 C

2024-06-22

华为终端BG软件部总裁龚体宣布,下一代编程语言仓颉今日起正式开启预览。 仓颉编程语言官网:https://developer.huawei.com/consumer/cn/cangjie/ 仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成

2023-02-03

在美国国家安全局 (NSA) 建议组织从 C/C++ 切换到内存安全语言 (如 C#、Rust、Go、Java、Ruby 或 Swift) 之后。C++ 之父 Bjarne Stroustrup 回应称,在他看来,NSA 报告中提到的“安全”编程语言在重要应用程序中实际上并不优于 C++。

2023-03-08

态点位等功能,这些新驱动和新功能将在 2.4 版本中正式发布。 IEC61850 驱动 IEC61850 标准是电力系统自动化领域的通用标准。Neuron IEC61850 驱动实现了该标准中 MMS 协议的连接和读写操作。MMS 中的多种数据类型也已经映射到 Neuron

2024-03-04

An Design 5.15.0 现已发布,主要变化如下: ConfigProvider ConfigProvider 支持 Input.TextArea 组件 allowClear、autoComplete、className、style、classNames、styles 属性。#47589 ConfigProvider 支持 Input 组件 allowClear 属性。#47602 ConfigPro

2023-09-27

定义 temp 文件与静态库进行交互 nature struct 调整为与 C 语言同构,能够直接将 nature struct 传递给 c 语言 数据类型arr<T,len>支持,其在 stack 中进行分配,和 C 语言中T ident[len]同构 new 语法支持,nature struct 默认为 stack 分配

2022-12-10

根据 Dart 的开发进度,Dart 编程语言的第三个主要版本(Dart 3)将于 2023 年中期亮相,届时 Dart 将成为 100% 健全的空安全语言,变量默认是「非空」的。 空值引用可以追溯到 1964 年左右,当时英国计算机科学家 Tony Hoare 在 ALGOL

2023-04-10

Haxe 是开源的高级严格类型编程语言,具有快速且经过优化的交叉编译器。 Haxe 可以构建目标平台是 JavaScript、C++、C#、Java、JVM、Python、Lua、PHP、Flash 的跨平台应用程序,并支持访问每个平台的原生功能。Haxe 有自己的 VM(HashLink

2024-10-29

Zig 语言通用代码生成器:逻辑,冒烟测试版发布二 Zig 语言是一种新的系统编程语言,其生态位类同与 C,是前一段时间大热的 rust 语言的竞品。它某种意义上的确非常像 rust,尤其是在开发过程中无穷无尽抛错的过程,简直和

2023-03-04

打下了基础。 围绕着这些原则,项目选择基于 **CUE 配置语言 [ 4] **来作为动态编程能力的基石,KubeVela 1.0 及早期版本给出了一个非常灵活的 OAM 实现。但项目的演进也使得 KubeVela 及 OAM 模型与早期发布的版本形成了较为明显的