Replies: 4 comments 2 replies
-
|
It's a feature, not bug 😎 |
Beta Was this translation helpful? Give feedback.
-
|
文档有说这个。整个文件就是构成一个类型。 |
Beta Was this translation helpful? Give feedback.
-
|
我觉得 zig 源文件既是 struct 又是命名空间 |
Beta Was this translation helpful? Give feedback.
-
|
因为zig的包括struct在内的容器类型,原生被设计为命名空间。因此没有字段的struct就可以当成普通的命名空间使用。 但个人认为“文件是命名空间”的设计正在受到挑战。这是因为对于命名空间,目前的主流认知是“命名空间用于消除歧义,而不应该用来分门别类”,一个命名空间下的多个相互之间不存在歧义但是分类上有差别的符号,被认为不应该用命名空间对它们进行分类而应该在同一命名空间下平铺。但是,习惯上我们不会使用一个超大的平铺的文件,因此实际上仍然会将这些符号以某种分类放到不同文件中。这就引起了摩擦,如果我们认为文件是命名空间,或者用一个超大的文件平铺收纳这些符号,或者让符号通过命名空间进行层级分类。Odin一类的某些语言的设计中目录是命名空间单元,同一目录下的多个文件之间可以直接相互引用符号。 |
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
-
奇怪的语法
为什么Zig要采用这种看起来十分奇怪的包导入语法?
Zig的设计
深入研究了我发现,Zig的文件就是一个
struct,所以,以下代码在Zig中是合法的这段代码为当前文件所代表的
struct定义了一个名为hello的字段,并成功地实例化了自己。这就说的通了,包导入不是在导包,而是在定义一个类型,可以近似理解成:
所以
Zig并不存在实质上的包导入语法,而是创造了一个由外部文件定义的类型
Beta Was this translation helpful? Give feedback.
All reactions