Aro – Zig's new C compiler
A new C23-compatible compiler called Aro, written in Zig, aims to replace Zig’s current reliance on Clang/LLVM for C interoperability while remaining optional alongside the existing LLVM backend. Commenters highlight Zig’s broader strategy of shipping a self-contained, cross-platform toolchain (including linker and libc), praise the ecosystem’s infrastructure focus, and compare this approach with languages like D and Go. Others note that Aro is still early-stage with limited backend support and documentation, but see it as a promising step toward faster, more maintainable C and Zig builds, particularly for cross-compilation and embedded use.
Purpose and Design of Aro
- Aro is a self-contained C compiler written in Zig, targeting C23 and common GNU extensions.
- Main goal: remove Zig’s dependency on libclang/LLVM for C while still allowing LLVM as an optional backend.
- Currently integrated into the Zig repo primarily for
translate-c; long-term intent is to replace libclang for parsing C, including for header translation.
Zig Ecosystem and Philosophy
- Several comments praise Zig’s tooling (cross-compilation, bundled libc, linker) as a major strength, sometimes more impressive than the language itself.
- Zig is seen as “infrastructure-oriented”: minimal features, strong focus on build, cross-compile, and low-level control, contrasting with “feature-rich” languages.
- Some see Zig as a good candidate for embedded and systems work; others argue its allocator-centric model perpetuates unsafe C-style memory management, though Zig improves null and pointer safety.
LLVM Independence and Compiler Architecture
- Removing the LLVM/Clang dependency is a central roadmap item; Aro is one piece, Zig’s self-hosted backends and linker are others.
- Discussion references data-oriented design in the compiler and ongoing work on fast self-hosted backends and incremental compilation; recent reports say Zig can self-compile without LLVM in under ~10 seconds.
- Plan: deprecate
@cImportin favor of build steps that translate headers to Zig modules.
Status, Limitations, and Tooling
- Aro currently has limited backend support; full compilation isn’t complete.
- System header search paths work only on Linux; elsewhere, even
stdio.hmay fail. - Documentation is considered sparse; Zig has its own doc generator using structured comments.
Interop, FFI, and Comparisons
- Several comments contrast Aro/Zig’s C story with other languages that embed C compilers or parse headers directly.
- A Bun FFI maintainer is interested in using Aro to infer types from C headers automatically.
- Some debate whether comments about other languages’ C integration are on-topic, but others view them as useful design comparisons.
Language Features Debates
- Brief debate on whether Zig should add native complex numbers and richer numeric types.
- Objection raised that, without operator overloading, user-defined numeric types are awkward, making built-in complex types more compelling.