Zig 0.7.1发布-修复了69个错误

2020-12-14 22:23:04

Zig是用于维护健壮,最佳和可重用软件的通用编程语言和工具链。

起始代码:修复TLS符号冲突,在Windows上针对libc链接时会导致编译错误。

调试:修复不支持调试信息的平台上的编译错误。现在,非第1层平台将返回error.UnsupportedDebugInfo,当尝试打印堆栈跟踪时,而不是编译错误。

调试:避免信号处理程序中的死锁。当我们到达信号处理程序时,仍可能保留stderr_mutex,抓住我们自己的stderr句柄以打印错误消息并避免死锁。 (#7247)

使os.windows.ReadFile允许短读。这使得它的行为类似于unix系统的read()包装器。读取整个缓冲区会破坏一些用例,例如通过套接字缓冲读取器。 (#7121)

将readAllArrayListAligned添加到可以接受任意对齐的Reader。修复了指定对齐方式时fs.File.readToEndAllocOptions中的编译错误。

阶段1:修复包含生成struct / union的类型的零长度数组,错误:struct / union' TYPE'取决于自己(#7058)

阶段1:使用相同名称消除歧义Wasm导入。修复具有相同名称但在不同模块中混用的功能。 (#7088)

阶段1:使用非abi对齐的参数修复asyncCall。使用于将可变槽索引计算到框架中的代码与在结构布局计算过程中所做的匹配。传递此类类型时,可以防止一些讨厌的LLVM错误。

阶段1:在渲染var ptr时添加丢失的位广播。某些类型需要这种额外的位广播,例如。带有由编译器插入的额外填充字段的结构或联合。 (#7250)

CLI:为--help添加-h别名,并使-h,-help在用法文本和解析中保持一致。

CLI:根据第一个C源文件或对象推断--name。以前,仅在存在1个C源文件或1个对象的情况下才能推断出--name。现在将推断出其中至少有一个。

CLI:改进的本地缓存目录逻辑。 (#7342)以前,在选择本地缓存目录时,如果没有根源文件,明确选择的路径或其他线索,zig会选择cwd + zig-cache /作为本地缓存目录。如果在CWD设置为只读目录或与正在编译的实际源文件无关的目录下调用Zig,则可能会出现问题。在现实世界中,当将`zig cc`与CGo一起使用时,我们会看到这种情况,由于某种原因,在运行C编译器之前,它会由于当前原因将当前工作目录更改为只读的go标准库路径。当没有其他合理选择时,此提交保守地选择使用全局缓存目录作为本地缓存目录,并且不再依赖cwd路径来选择本地缓存目录。提醒一下,-cache-dir CLI标志和ZIG_LOCAL_CACHE_DIR环境变量可用于覆盖该决策。对于zig构建系统,它将始终选择build.zig为+ zig-cache /的目录。

build:更新我们要求的最低cmake版本,以便cmake不再抱怨它。

链接:修复了在当前工作目录中静态归档文件引起编译器相关文件(llvm-ar.id)的问题。 (#6943)

链接:通过链接器行中的target-version-gating -syslibroot修复了由于macOS的LLD Mach-O代码不支持较新的macOS系统而导致的回归问题。

链接:男子气概:指定-install_name作为完整dylib的名称。然后,这可以通过运行路径搜索路径列表来正确解析名称,即-rpath @loader_path将在链接的二进制文件中正确解析为@ rpath / libxxx.dylib(...)。

链接:LLD作为子进程而不是库被调用。 LLD库代码不正确地调用exit(),并且具有全局状态,即在两次调用之间不会重置。现在,Zig可以通过使用特殊的CLI参数进行自我调用来解决此问题,然后将其转发给LLD库调用。 (#3825)

重做bundle-compiler-rt功能(#7013)(#6817):现在是-fcompiler-rt和-fno-compiler-rt来覆盖(相当合理的)默认情况下,仅对可执行文件和动态库捆绑compile-rt 。

build.zig API仍称为bundle_compiler_rt,但是现在它是可选的bool而不是bool。将其保留为空意味着使用编译器默认值。

在为ELF文件建立build-obj时,还支持-fcompiler-rt,因为该目标已经支持将多个对象链接到一个对象中。对于非ELF尝试包括此错误消息。将来,还可以通过不依赖链接程序的更高级的实现来支持它。

修复了将绝对路径作为系统库传递时的内部编译器错误。现在发出适当的编译错误。共享对象的绝对路径必须作为位置参数传递。 (#7139)(#6868)

修复了未检测到所有动态库的问题。未检测到位置共享库参数导致动态链接,从而导致无效的链接器行。 LLD在定位x86_64-linux时没有针对此的错误消息,但是在针对aarch64-linux时却发出了错误消息,这就是我注意到该问题的方式。

缓存系统:在缓存中包含根名称。这修复了--name标志更改时缓存系统没有注意到的错误。

缓存系统:将软件包名称和路径添加到根模块缓存哈希中,以便Zig在软件包映射更改时发出通知。

缓存系统:将@cImport文件添加到编译缓存清单中。修复了C头文件更改时通知缓存系统的问题。 (#7007)

缓存系统:检测冗余C / C ++源文件并发出错误而不是死锁。 (#7308)

类型:将zigTagType对于c_longdouble返回的标签更改为Float。函数之前返回Int。

修复文件扩展名剥离。以前,它会查找第一个'。但现在它使用std.fs.path.extension。 (#7404)

显式转换索引以使用。这对于usize与u16大小相同的平台是必需的。 MSP430。

避免在不支持时公开原子内建函数。防止针对特定目标(例如AVR / MSP430或ARM v6m)进行编译/ LLVM错误。通过不再导出任何原子内建函数,用户可以自由地提供自己的实现(禁用IRQ)或提供-单线程开关,而不必理会。

修复bundle_compiler_rt不被尊重的问题。现在是可选布尔。将值保留为空意味着使用编译器选择的默认值。

不要保持build.zig缓存清单文件处于锁定状态。这允许同时具有多个zig生成实例。例如,当您长时间运行zig构建并想要运行zig构建。

添加了用于构建系统的global-cache参数+删除了额外的参数。修复了尝试与zig build一起覆盖缓存目录时崩溃的问题。

将缺少的-m< os> -version-min CLI参数添加到Clang。这解决了针对macOS和编译C / C ++代码时的一些代码生成问题。

zig cc不再强制动态库使​​用匹配C编译器行为的soname。 ((##5861)

当object_format为PE / COFF时,始终使用codeview(pdb)。以前,当为Windows-gnu目标混合Zig和C / C ++代码时,zig将获得代码视图格式,但C / C ++代码将不会获得任何调试信息。现在,C / C ++代码可以正确地以代码视图格式发出调试信息,并且一切正常。

Zig不成熟。即使使用Zig 0.7.1,使用Zig进行非常规项目也可能需要参与开发过程。

这些发行说明已被编辑,以避免过多的细节,以免使读者不知所措。为了确保每个人都可以贡献自己的功劳,这是此发行周期中所有提交提交的人的列表(由git shortlog -sne 0.7.0..0.7.1生成):

特别感谢赞助Zig的人。有了您,Zig受到开源社区的驱动,而不是获利的目标。特别是,这些优秀的捐助者以每月50美元或更高的价格赞助Zig: