Zig 0.6.0 发布,想要替换 C 的编程语言

2020年04月15日

Zig 0.6.0 已发布,这是一门通用编程语言,专为稳定性、可维护性和性能而设计,追求替代 C 语言在系统编程上的最佳地位。Zig 具有以下值得关注的特性:

  • 手动管理内存
  • 与 C 语言竞争而非依赖它,Zig 标准库不依赖于 libc
  • 轻量而简单,专注于调试应用而不是调试编程语言的知识
  • 新的错误处理方法,与编写良好的 C 语言错误处理类似,但减少了很多冗余
  • 调试模式下优化了快速编译时间,并在不确定行为发生时使用堆栈跟踪崩溃
  • ReleaseFast 模式和 ReleaseSafe 模式
  • 泛型数据结构和函数
  • 通过协程实现并发
  • 导入 .h 头文件并直接使用 C 语言的类型、变量和函数
  • 导出要依赖 C 语言代码的函数,变量和类型,自动生成 .h 头文件
  • 可选类型而非空指针
  • 交叉编译是主要用例

eaa95b1fffa94c4319d5ae6be7bb8deafda.jpg

此版本的开发周期历时 6 个月,有 122 名不同贡献者提交了 2527 次 commit。

Zig 0.6.0 保持与 LLVM 一致的更新节奏,已将 LLVM 升级到最新版 LLVM 10,并且不再兼容 LLVM 9。新的 LLVM 版本主要是修复 Bug,尤其是对 ARM 支持、MIPS 支持、RISC-V 支持等方面的错误修复。

这也是第一个将 Zig 的所有补丁合并到上游的 LLD 版本。因此,Zig 的源码库中不再包含 LLD 源码的 fork,也就意味着源码的 tarball zig-0.6.0.tar.xz 比 zig-0.5.0.tar.xz 小了 0.5MiB,因为删除 LLD 源码比这个发布周期中所有其他的改动加起来还节省了更多的空间。请注意,新的 Bootstrap Tarball 捆绑了 Zig 编译器的所有依赖项,其中包括 LLVM、LLD 和 Clang。

语言特性层面的主要更新包括:

  • 类型强制语法(Type Coercion Syntax):类型强制(以前称为"implicit casting")现在通过@as内置的方式来执行,而不是通过调用一个类型作为函数来执行。
  • Sentinel-Terminated 指针:通过这次修改,Zig 语言既增加了一项特性,同时也删除了一项特性。不再有像c"hello"这样的C语言字符串字面量。取而代之的是所有字符串字面量的类型从 []const u8 转变为 *const [N:0]u8,其中 N 是字符串字面量的字节数。
  • 移除 Array-to-Reference 类型强制转换
  • 数值比较:无论类型组合如何,所有数值都可进行比较。例如,小的有符号整数可以和大的无符号整数进行比较,而浮点数也可以和整数进行比较。
  • 匿名的结构体字面量(Anonymous Struct Literals):Zig 现在支持省略结构类型的字面量。
  • 增加 Tuples,删除 Var Args:与匿名的枚举字面量和匿名的结构体字面量类似,类型也可以从数组字面量中省略。
  • SIMD:对 SIMD 的支持还远未完成,但已经取得重大进展。
  • 删除 @newStackCall 方法:@newStackCall 最初用于研究安全递归,但现在安全递归计划通过 Async 函数实现。
  • 非穷举式枚举:可以通过添加尾部的'_'字段来创建一个非穷举式枚举。它必须指定一个整数标记类型,并且不能消耗每个枚举值。
  • Unicode 字符字面量:实现此功能是因为 Zig 被定义为使用 UTF-8 进行源码编码。一个 unicode 字符字面量是一个 comptime_int,其值等于编码点。

详细内容查看发布公告 https://ziglang.org/download/0.6.0/release-notes.html

展开阅读全文
11 收藏
分享
加载中
精彩评论
C:总有刁民想害我!
2020-04-15 12:39
22
举报
Clojure 会强迫提升你段位的语言
2020-04-15 08:11
4
举报
不,你不想。
2020-04-15 10:17
3
举报
zig 混编也是完全参照 DLang 那一套,而且 D语言在二进制层面早就完全兼容了C和OC等语言,混编也都是夸macOS Linux Windows 等,对于这个 zig 没啥大的兴趣是因为没啥创新,并且我们团队也在 DLang 社区搭建了 Hunt Framework 一系列的服务端生态,目前也没深入关注过其他语言
2020-04-20 17:08
2
举报
只要用LLVM,咋替代C?LLVM就是C++开发的。
2020-04-20 08:54
2
举报
最新评论 (27)
ZIG 出的的确比较尴尬,像是 rust 和 dlang 的结合体,而且啥东西都缺少,完成度很差。
2020-04-20 18:53
0
回复
举报
我是冲着标题来的
2020-04-20 17:24
0
回复
举报
如果没有try,就可以考虑试一试。
2020-04-20 16:46
0
回复
举报
设使天下无有孤,不知几人称帝几人称王!
2020-04-20 13:52
0
回复
举报
我只需要c支持重载即可
2020-04-20 13:49
0
回复
举报
那么多年了一直有刁民想代替C,我觉得只能成为C的子孙分支罢了
2020-04-20 12:03
0
回复
举报
zig 主要优点是:足够简单,交叉编译,无gc,与C无缝交互,first class type,编译期代码执行
另外介绍一个点:
zig 本身利用 libclang/llvm 实现了完整的 c/cpp 编译,意思是可以拿 zig cc 直接编译 c/cpp 项目,而且还支持交叉编译,没错,真的是交叉编译。zig 自己的 builder 也比 cmake/make 之类的好用,因为直接就是 zig 代码,有兴趣的可以尝试一下。
zig 目前算是较为早期,有一起追的可进群:930564004
2020-04-20 10:10
1
回复
举报
噢哟 又是标题党!
2020-04-20 08:58
0
回复
举报
只要用LLVM,咋替代C?LLVM就是C++开发的。
2020-04-20 08:54
2
回复
举报
注意 "LLVM " 划重点
2020-04-20 07:27
0
回复
举报
更多评论
27 评论
11 收藏
分享
返回顶部
顶部