3 ms·
Oh wow I had no idea this was just casually sitting on HN front page while I was streaming live coding of adding this to the Zig compiler! Here's the recording:
by AndyKelley 5y ago
Oh wow I had no idea this was just casually sitting on HN front page while I was streaming live coding of adding this to the Zig compiler! Here's the recording: https://vimeo.com/673819867 https://vimeo.com/673819867
I see WalterBright down there in the comments. Hi! His talk at Handmade Seattle about adding a C compiler to D was amusing and informative: https://media.handmade-seattle.com/importc/ https://media.handmade-seattle.com/importc/
Some interesting differences between the two approaches:
* D ImportC relies on an external preprocessor, while Aro does preprocessing.
* D ImportC lowers to D AST, while Aro lowers Zig AIR. This tweet has an infographic to help you get an idea of where AIR is in the Zig compiler pipeline: https://twitter.com/andy_kelley/status/1457800302946492418 https://twitter.com/andy_kelley/status/1457800302946492418
* D ImportC is shipped, while Aro as a C frontend in Zig is an [unfinished branch](https://github.com/ziglang/zig/pull/10795 https://github.com/ziglang/zig/pull/10795)
It's been really exciting watching Vexu and ehaas (and other contributors) working on Aro.
Looks like there's some confusion as to why this exists when Zig already uses libclang to compile C code. The main reasons are:
* Improved `@cImport`/translate-c functionality, especially with regards to translation of macros. Vexu and ehaas are the main contributors of Zig's C translation implementation.
* Ability to bootstrap a lean Zig binary that does not depend on LLVM, and yet is still able to compile C code and use the `@cImport` language feature to translate C code.
* Ability to more tightly integrate with Zig's linker, bringing some incremental compilation abilities to C. Due to language limitations it can never be as good as Zig but it can still be improved over other C compilers.
* Ability to compile C code to targets that LLVM does not support. Zig plans to support a wider target range than LLVM.
- 2pEXgD0fZ5cF 5y agoHey! Nice to see you posting here. I've been keeping an eye on Zig for a while now because everything around it just looks pretty amazing! 2 questions: - What are some books or resources you would recommend to get into (practical) low level programming with the goal of writing better Zig code? I know my basic self defense in C, and from a gut feeling I'd say C resources carry over the most but I'd be interested in how you see things and which resources you like or see a decent carryover in. - I personally enjoy reading the Zig source code to learn the language. But what is something you'd like to see arise to improve the teaching of Zig in the future and once things get closer to 1.0?
- ksec 5y agoAndrew writes [1]: I have been reading Richard Fabian's book, Data-Oriented Design, and finally things started to "click" for me. I've had these ideas swirling around in my head for years, but only recently do I feel like I have an intuitive grasp on how modern CPUs work, especially with regards to L1 cache, and the relative latencies of uncached memory loads vs computations. [1] https://ziglang.org/download/0.8.0/release-notes.html#Reworked-Memory-Layout https://ziglang.org/download/0.8.0/release-notes.html#Rework...