2023-02-09
包管理器自 #14265 合并后一直在不断推进,以下两个是最主要的改变:
build system terminology update: package, project, module, dependency
这里重新梳理了现在的术语,主要有以下几个:
package
文件的集合,由文件的 hash 值唯一指定,一个 package 可能包含任意数目的 compilation artifacts 与 modules。dependency
不同 package 之间的有向边,一个 package 可以有任意个依赖,一个 package 也可以用作任意项目的依赖module
文件的集合,每一个模块都有一个 root 文件,在被 @import
时用到。compilation artifact
编译构建产物,可以是 static library,dynamic library,an executable 或 an object file,对应之前版本的 LibExeObjStep
introduce Zig Object Notation and use it for the build manifest file (build.zig.zon)
使用 zon 格式替代之前的 ini,格式如下:
.{
.name = "awesome-cli",
.version = "0.1.0",
.dependencies = .{
.simargs = .{
.url = "https://github.com/jiacai2050/simargs/archive/0a1a2afd072cc915009a063075743192fc6b1fd5.tar.gz",
.hash = "1220a6554eccb2e9a9d7d63047e062314851ffd11315b9e6d1b5e06a9dde3275f150",
},
},
}
一些使用了包管理的实际项目:
也欢迎大家给自己熟悉的 C/C++ 项目提 PR 让其支持 zig build,让构建不再那么痛苦。
Zig tips: v0.11 std.build API / package manager changes | Hexops’ devlog
Zig’s Curious Multi-Sequence For Loops,Lobster 评论 上面这两篇的文章都是演示了最新的 for 语法,开始支持了 range:
for (0..4) |n| {
std.debug.print("{} ", .{n});
}
同时也支持了一次性迭代多个数组的功能:
var elems = [_][]const u8 { "water", "earth", "fire", "wind" };
var nats = [_][]const u8 { "tribes", "kingdom", "nation", "nomads" };
for (elems, nats) |e, n| {
std.debug.print("{s} {s}\n", .{e, n});
}
Zig Bits 0x1: Returning slices from functions 这篇文章演示了从一个函数内返回局部变量的问题与解法