问题标签 [zig]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
allocator - 在 Zig lang 中分配通用结构
是否可以为struct
包含类型作为属性创建分配?
例如
示例结构是
然后,我想分配内存,例如2
*Content
我知道我可以使用
但是如何使用它们来实现相同的目标allocators
?
这行不通。
我收到错误
简而言之
是否可以为Box
Rust 中的类似功能构建功能?
zig - Slice 在 zig 语言中引用超出范围的数据
下面的 get 函数在我看来就像它返回一个引用数组中数据的切片,一旦函数返回,它将超出范围,因此是错误的。假设这是真的,有没有办法在编译时甚至在调试模式下运行时检测到这一点?
我找不到在编译时或运行时检测到此错误的任何编译器标志,并想知道我是否错过了任何可以提供帮助的东西,或者这不是 zig 目前可以检测到的东西,这很好,我只是必须更加小心:)
这是我遇到的一个实际问题的简化示例,需要一些时间来诊断以证明问题
unix - 编译器将打印版本但在构建时冻结
我正在尝试遵循本教程。我从 2016 年开始在 13" Macbook pro 上运行 MacOS Catalina, 10.15.3 。我从这里下载了Mac 的最新版本。我解压缩了文件,并移动了 zig 可执行文件(但不是文件夹)到 usr/local/bin 以便我可以从任何地方调用它。现在,无论我在哪里运行它,我都可以调用zig version
并按预期获取输出0.6.0+352976ed2
。但是,每当我尝试类似的东西zig run main.zig
或者zig build main.zig
它只是冻结并且什么都不做。
现在教程确实说它不支持 zig 0.6.0。但我假设这仍然有效,并且教程更多地指的是当它说它不支持 0.6.0 时更改打印方式之类的事情。显然这可能是一个不正确的假设,但我不知道为什么这不起作用。由于 zig 还年轻,缺乏入门教程,所以我不知道该去哪里找。
我之前已经让 zig 0.6.0 与 homebrew 一起工作,但是由于我可能正在考虑贡献或尝试编译器的实验分支,我希望能够运行任意 zig 可执行文件。
zig - zig 创建一个 C 库
已关闭- 见条目末尾
我想使用 zig 语言制作一个 C 可调用库。我决定从 Zig 文档中的两个示例开始。“导出 C 库”和“混合目标文件”。在每种情况下,我都复制了三个相关文件(来自 0.6.0 文档)。
- 名为 test.c 的 AC 文件,
- 一个 zig 文件,分别称为 mathtest.zig(用于导出 C 库示例)和 base64.zig(用于混合对象文件示例),以及
- 一个 build.zig 文件。
这两个示例都无法构建。
导出 C 库示例无法编译 test.c 并显示消息找不到 mathtest.h
混合对象文件示例无法编译 test.c 并找不到 base64.h
以下是导出 C 库示例的三个文件:
数学测试.zig
测试.c
构建.zig
部分错误信息
我找不到mathtest.h
在我的系统上命名的文件,所以我认为它没有生成,这与 test.c 文件中的声明相反。
我错过了什么?帮助感激地接受了。
答案和更多问题
我发现了以下-femit-h
选项:
将创建一个mathtest.h
文件,然后
会成功的。
我进一步发现build.zig
文件中的这些行
将确保
如文档中所示,将成功并生成答案 1379。
但是 - build.zig 文件的这个 mod 在运行后不会留下mathtest.h
文件。
这似乎是从 Zig 代码生成可用 C 库的最后障碍。
拼图中的最后一块
如果我添加
到build.zig
文件。和mathtest.h
(libmathtest.a
或 .so)文件将保存到build
目录中。
称这为关闭
arrays - 如何创建任意大小的多维数组?
我正在用 Zig 编写一个函数,它应该接受任意大小的多维数组。可能有限制,但我无法提前对尺寸进行硬编码。
这是一个例子:
这会编译并运行,但如果我将函数签名更改为
我收到错误
这可以用 Zig 表达吗?
segmentation-fault - 使用带有 Zig 的 X11 C 库时出现分段错误
我正在尝试将 X11 与 Zig 一起使用。以https://rosettacode.org/wiki/Window_creation/X11#Xlib中的代码为例,我想出了这个最小的例子:
使用最新版本的 Zig (0.6.0) 编译:
在执行时,我收到以下错误:
zig - 为什么zig中的用户定义类型需要是const?
如果我需要在 Zig 中声明一个结构,我必须在它前面加上一个const
但是它可以以两种方式初始化var
,const
那么为什么类型声明需要一个常量关键字,而只关心结构的实例是否const
存在呢?
zig - 为什么字符串数组需要中缀 const?
我正在慢慢学习 zig,但我不了解 const 以及它如何与数组/类型交互 - 我正在浏览https://ziglang.org/documentation/0.6.0/#Introduction 但他们经常使用 const字符串。
这编译:
没有const
是一个错误:
同样,将 const 放在左侧也是同样的错误:
将 const 关键字放在中间实际上指示编译器执行的操作是什么?
unicode - 如何在 Zig 中打印 UTF-16 字符串?
我一直在尝试编写一个 UTF-16 字符串结构,虽然标准库提供了一个unicode
模块,但它似乎没有提供一种方法来打印出u16
. 我试过这个:
这输出:
有没有办法在[]u16
不将其转换回非 unicode 字符串 () 的情况下打印 unicode 字符串 ( []u8
)?
struct - 访问 Zig 0.7.0 中 C 函数按值返回的结构
这是我在 Zig 0.7.0 中通过 linux-x86_64 上的 @cImport 导入 Zig 的一些 C 代码。当我直接在 Zig 中创建一个struct Point
结构时,它按预期工作,但是当我从getPoint
方法中按值返回一个时,有错误的数据(参见下面的“输出”)。我做错了什么,还是这是一个错误?
- 点.h
- 点.c
- 主要的.zig
- 输出
- 构建.zig