Zig SDK & Zig Toolsets Progress Report - January 2024 #100
alexrp
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This is part of a series of progress reports that are posted with a monthly-ish cadence when there's notable progress made on the project.
Zig Toolsets v0.11.0.1 Release
Since #72, Zig 0.11.0 has been released. Accordingly, v0.11.0.1 toolset packages were published.
Some notable changes happened with this release:
win-x86
packaging is currently disabled due to an upstream issue zig-toolsets#15 being resolved.We decided to publish the
linux-ppc64le
andlinux-riscv64
toolsets because significant work has been done on these architectures in .NET recently. For the former, see dotnet/runtime#10055, and for the latter, see dotnet/runtime#84834. Note that there's still work needed in Zig (ziglang/zig#4456) for RISC-V to be usable in practice.Zig SDK v4.0.154 Release
After being stuck on Zig 0.9.1 for over a year due to 0.10.0 and 0.10.1 having blocker issues (#46), v4.0.154 finally saw us updating to Zig 0.11.0. To be fair, 0.10.0 saw the introduction of the self-hosted Zig compiler, so some temporary breakage was very much to be expected. We anticipate that things will be smoother from here on out.
Another major change in this release was the addition of
linux-arm
,osx-arm64
, andwin-arm64
to the defaultRuntimeIdentifiers
value. This was done because they're all major supported .NET platforms and Zig's support for these platforms has improved considerably, especially when cross-compiling.In this release, we also fixed a bug where our optimization levels for C/C++ projects didn't match Zig projects. In particular:
Configuration=Debug
was changed from-Og
to-O0
.Configuration=Release
+ReleaseMode=Fast
was changed from-O3
to-O2
.Configuration=Release
+ReleaseMode=Safe
was left unchanged as-O2 -fsanitize=undefined
.Configuration=Release
+ReleaseMode=Small
was changed from-Oz
to-Os
.Some housekeeping was also done in this release:
TargetSystemVersion
value for macOS to11.7
in accordance with Zig support policy.TargetSystemVersion
value for Windows towin10
in accordance with .NET 6 support policy.HostAbi
/TargetAbi
values for macOS fromgnu
tonone
to match a corresponding change in Zig.HostArchitecture
/TargetArchitecture
value for 32-bit x86 fromi386
tox86
to match a corresponding change in Zig.netstandard2.0
, instead ofnet472
andnet6.0
.Zig SDK v4.0.164 Release
This release fixed the aforementioned mistake when changing
TargetSystemVersion
for Windows. The .NET 6 support policy in fact included Windows Server 2012 still, which is very roughly equivalent to Windows 8. So the value was changed towin8
.Additionally,
CoreCompile
was changed to give a friendly error message if a project contains no source files (see #86 for why the previous UX was quite bad).Zig SDK v4.1.3 Release
v4.1.3 added support for
linux-ppc64le
, taking advantage of the aforementioned toolset packages. Note that this RID is not yet part of the defaultRuntimeIdentifiers
value, and whether it ever will be remains to be seen as this is a fairly niche platform.Tracking .NET Releases
Starting with v5.0, we will support .NET LTS releases going forward. This, for example, means that .NET 8 will be supported until November 10, 2026.
Future Plans
The major planned features for v4.2 are:
--subsystem
linker flag #43--allow-shlib-undefined
linker flag #80--stack
linker flag #102--image-base
linker flag #103--dynamicbase
linker flag #104The planned issues for v5.0 are:
Language
property appropriately #108compile_commands.json
is invalid on Unix systems #121-municode
for Windows #127The major planned features for v6.0 are:
.objcproj
) and Objective-C++ (.objcxxproj
) #93All other features are attached to the Future milestone, which basically just means they haven't been included in the working set for a particular version yet.
Note that some of this planning may well be switched up depending on when Zig 0.12.0 releases, and on whether we run into any blocking issues with that version. For example, if Zig 0.12.0 releases with no blocker issues before v4.2 has been finalized, we may decide to move some (or all) of the v4.2 features to v5.0. In general, our planning is always somewhat tied to Zig's release schedule.
Beta Was this translation helpful? Give feedback.
All reactions