5 ms·
Zig is so cool, C is cooler
- forgotpwd16 11mo agoObviously the answer to https://nilostolte.github.io/tech/articles/ZigCool.html https://nilostolte.github.io/tech/articles/ZigCool.html (discussed in https://news.ycombinator.com/item?id=45852328 https://news.ycombinator.com/item?id=45852328 ; currently both at first page alongside each other).
- tamnd 11mo agoYes, I wrote that because of the interesting discussion here, not because of the article content.
- dj902ihda 11mo agoWhat a dumb writeup.
- nepthar 11mo agoFriendly reminder to take a look at our posting guidelines, found at the bottom of the page. What specifically did you find dumb about this?
- n42 11mo agoIt’s hard to see this article as being written in good faith. We’re at the point that we are responding to low quality LLM outputs with low quality LLM retorts and voting them both to the front page because of feelings.
- averms 11mo agothe entire github organization looks to be ai slop books... why even do this?
- n42 11mo agoAs a fan and user of Zig I found the original post embarrassing, but chalked it up to the enthusiasm of a new user discovering the joy of something that clicked for them Taking offense to that enthusiasm and generating this weirdly defensive and uninformed take is something else, though
- fwip 11mo agoEdit: Apologies, it looks like I misunderstood. Original response left below for posterity. It's not "weirdly defensive and uninformed" to question the value of posting a bunch of inaccurate LLM slop, especially without any disclosures. If you're pro-AI, you should be against this too, before these errors get used as training data.
- wasabi991011 11mo agoI think you are misunderstanding, they are calling TFA a defensive and uninformed reply to the pro-Zig post from yesterday.
- e2le 11mo agoI'm at the point now where I simply stop reading the article once it has too many red flags, something that is happening increasingly often. I don't enjoy reading AI slop but it feels worse when users of AI tools have chosen not to disclose the authors of these articles as Claude/ChatGPT/etc. Rather than being honest upfront, they choose to hide this fact.
- tamnd 11mo agoI added some sentences at the top, so it wont waste people's time: Some parts of this article were refined with help from LLMs to improve clarity and technical accuracy. These are just personal notes, but I would really appreciate feedback: feel free to share your thoughts, open an issue, or send a pull request! If you prefer to read only fully human-written articles, feel free to skip this one.
- abnercoimbre 11mo agoWe've flagged it. Please don't waste our time in the future.
- detaro 11mo agoIt clearly wasn't "refined" using LLMs when it contained commands that plainly don't work. Don't lie.
- 0manrho 11mo ago> but I would really appreciate feedback very well > Some parts of this article were refined with help from LLMs to improve clarity and technical accuracy Perhaps you should stick to writing about things you can write with clarity and and accuracy yourself instead of relying on an LLM to do it for you. Alternatively, properly cite and highlight what portions you used AI on/for from the outset as failure to do so reads at best as lazy slop and more often as intentional duplicity
- jasonjmcghee 11mo agoSomething I didn't see mentioned are alternative compilers like tcc that provide ~9x faster compilation - very useful during development etc https://www.bellard.org/tcc/ https://www.bellard.org/tcc/
- scottlamb 11mo agoI'm not rooting for Zig [1] but I think there are some misses here, e.g.: > Cross-compilation looks like a standout feature in Zig, although C developers have been doing the same thing for decades. ... You can target an embedded ARM board or a RISC-V chip with one flag: Disagree: Zig's cross-compilation support is better than anything else. For one, installing a toolchain for a different OS/arch combo is not necessarily so easy with C. For another, with Zig you can target an arbitrary Linux glibc version with a commandline argument. Without Zig's toolchain, [2] the best I've seen is to run within a Docker container with that glibc version installed. [1] almost entirely because I think all new languages should have memory safety (via GC or borrow checking). [2] I see people linking Rust programs with Zig's toolchain for this reason: https://github.com/rust-cross/cargo-zigbuild https://github.com/rust-cross/cargo-zigbuild
- tamnd 11mo ago> [2] the best I've seen is to run within a Docker container with that glibc version installed. Agreed. I will revise that section tomorrow. Also, for compiling Go with CGO enabled, using Docker is the only reliable way to produce a binary correctly linked against glibc, especially when working with RHEL.
- binary132 11mo agonone of this needs to be batteries-included, and there is no reason it cannot be done just as straightforwardly for C-family languages as it has been for Zig and Rust.
- estebank 11mo agoThis is true of almost everything: it's not that Zig or Rust are unique on most features. Most of them have existed in one shape or another before. The praise they receive is because of the level of polish their design and implementation have and how they interact with their other features. There's no one stopping other projects from doing the same thing (modulo technical and organisational considerations), but they haven't yet, so it is reasonable to highlight them. If people talk about how good X is in language Y enough, people from language Z might notice and "steal" it. That's a good thing!
- pyrolistical 11mo agoThe main reason why C is used everywhere is because the C ABI is the de facto ABI. This is why Zig was smart to have first party support for C libs. In fact the fact Zig pointer types are more precise, it allows imported C libs to be more correct than the original C.
- do_not_redeem 11mo agoNot a single mention of defer? There's no way I'll ever go back to writing goto towers. Yes, I'm aware that some specific C toolchains have nonstandard extensions that accomplish the same thing, but if you lock yourself into one of those, the "Portability and Presence" section (and really, the first 20% of the article) goes out the window.
- 0x696C6961 11mo agoC is actually getting defer!
- lelanthran 11mo ago> Not a single mention of defer? There's no way I'll ever go back to writing goto towers. What's a goto tower? (Repeating sibling post, `defer` is in the works for C as well)
- benatkin 11mo agoThis feels wrong. > Zig's compiler is self-contained. It includes a build system, cross-compilers, and package management features. This makes it simple for small projects or single-language codebases. > C follows a different philosophy. Its toolchain is composable. The compiler, linker, build system, and package manager are independent pieces. You can use GCC or Clang, build with Make or Ninja, manage dependencies with apt or brew, and link with ld, lld, or mold. Zig would be more composable, as rather than being separate programs, you can write code to compose them in different ways. You are composing in zig rather than bash.
- tamnd 11mo agoI see it a bit differently. Zig's toolchain is self-contained: one binary gives you the compiler, build system, cross-compilers, and a package manager. It doesnt depend on the system toolchain, which makes builds reproducible and easy to move between machines. C's ecosystem is the opposite. It is modular, built from separate tools like GCC, ld, Make, and apt. You compose them externally.
- omgtehlion 11mo agoI have read both articles (this and zig-cool), and I regret the time wasted. IMO, both articles fail to deliver on their titles :( Both fail to list really cool parts, and both reiterate same arguments several times. This one even looks like an LLM output, but I'm not sure.
- 201984 11mo ago>You can target an embedded ARM board or a RISC-V chip with one flag: gcc main.c --target=arm-linux-gnueabihf -o app AI hallucination? --target does not exist in GCC. Clang has -target, but you still need to install libc for the target architecture.
- cesarb 11mo ago> AI hallucination? --target does not exist in GCC. It might also be someone used to a system which symlinks "gcc" to clang for compatibility (IIRC, that's the case at least on OS X).
- 201984 11mo agoIt's still just a single hyphen on clang, double hyphen like in the post does not work on clang either.
- abnercoimbre 11mo agoUnfortunate to say the article does smell like LLMs had a heavy hand in it.
- e2le 11mo agoThey fixed this "mistake" a few minutes ago. https://github.com/little-book-of/c/commit/43b0a89852a507bddfd74bbf9a356fee472cb922 https://github.com/little-book-of/c/commit/43b0a89852a507bdd...
- 201984 11mo agoAnd that "fix" is not "one flag" any more either since you have to install that compiler somehow.
- e2le 11mo agoI wonder if they are simply pasting your criticism into an AI prompt. https://github.com/little-book-of/c/commit/349d475a5922cf00512721dc2d205ae828410f02 https://github.com/little-book-of/c/commit/349d475a5922cf005...
- synergy20 11mo agogcc main.c --target=arm-linux-gnueabihf -o app this is definitely wrong, the correct way is to use arm-linux-gnueabihf-gcc main.c instead, there is no such flag called --target per se
- tamnd 11mo agoFixed, thanks for pointing this out.
- 201984 11mo agoDid you not even try the original command? As you've now updated it (https://github.com/little-book-of/c/commit/43b0a89852a507bddfd74bbf9a356fee472cb922 https://github.com/little-book-of/c/commit/43b0a89852a507bdd...), it is definitely not one simple flag since arm-linux-gnueabihf-gcc has to be installed from somewhere. It doesn't exist in a default installation of GCC that only targets the host, and you'll need to install a GCC version for every architecture you want to target.
- laxd 11mo ago> But before Zig, there was C. For fifty years, C has been the foundation of modern computing. And for fifty years, language theory has made progress. While C, brilliant as it once was, has given us never ending problems with security and reliability. The software world is saturated anyways. It's time to revise rather than just layering new junk in chase of profit. > This article does not aim to dismiss Zig. Its focus is on the fact that C never stopped evolving. It didn't stop but it certainly slowed down to glacial pace. There's plenty of fundamental issues that will never be fixed. That said. I wish the software world would just keep its cool and not commit to Rust so fast. Rust was the first in a trend of new low level languages. It snowballed and now we may not get to make an informed decision on how the future of low level programming should be. I personally like Zig a lot more. Unfortunately people seem to be neither adequately scared of complexity nor sufficiently impressed by simplicity.
- stephc_int13 11mo agoThe Zig self-contained toolchain is one of the most appealing feature IMO, and it can also be used to compile C. That said, I was very interested in Zig 2-3 years ago but that has mostly cooled off, C is not perfect but good/flexible enough for what I am building. Zig has some opinionated language features/idiosyncrasies that I don't like and the syntax feels somewhat less clean. Also, while I really like the memory management approach (passing allocators as parameters) the way it is implemented is conflicting some of my needs. There are probably some workarounds but I don't feel the need to invest much time in this language as the added QoL benefits are not simply not outweighing the cost for me.
- bbkane 11mo agoI feel like passing allocators is the most flexible design (if cumbersome to use). What needs does it conflict with?
- Cieric 11mo agoI really wish I could like zig more, I started using it heavily around 0.11, but I feel like as more features get implemented there is more that I like and more that I hate. They've recently fallen into the trap of the wrong whitespace will now error compilation, which has effected me directly. All the none blocking IO was stuck behind async, which when I was trying to use it it literally didn't exist (this might have changed in 0.15 from the videos I've seen, but all my code fails to compile now do to the former issue with whitespace). I might come back at Zig 1.0 as long as some of the stupid decisions can be reverted or worked around in some way I find acceptable, otherwise I might just fork it myself to fix it so I can still have some fun with the language.
- TheMagicHorsey 11mo agoThis is like that situation where a kid goes up to the dad who abandoned him and says, "You have given me nothing! I had to do everything myself." And the dad says back, "By giving you nothing I have given you everything. Look at the tough guy you have become!"
- lelanthran 11mo agoLike that Johnny Cash song, A Boy Named Sue.
- deleted 11mo ago[deleted]
- xigoi 11mo agoAh yes, the “portable” language where different implementations can’t even agree on how big an integer is. Don’t get me started about the “transparency in behavior” that’s not even close to how any modern computer works.
- jokoon 11mo agoI like neither C nor zig C is too verbose, Zig has too many features and things. I would rather have some sort of "improved C", without the complexity of C++, but with things map, string, vector math, etc, just standard quality-of-life stuff. Zig has the same problems rust has: its syntax is too complicated, too modern and sophisticated. Language designers need to understand that programmers are not always patient, smart or motivated to learn all those things. It's the 101 of user experience: make it easy and intuitive. The programming language who dominate, dominate because they are accessible to lesser skilled people. The more complex it is, the fewer chance it will reach adoption.
- Too 11mo ago> It includes some of the most advanced tools in computing Half of them which shouldn’t be needed if the language didn’t let you shoot yourself in the foot in the first place. > Transparency in Behavior Undefined behavior has entered the chat > Loop structures are clean and readable If you like fiddling with i-variables and sizeof like foreach never happened. > Error handling and optional results use simple, explicit patterns. Proceeds and ignores the return code of fread(), leaving errors unhandled. At this point I lost it as became more and more obvious it’s both AI slop and it’s ignoring the past 20 years of progress in programming languages. C may have its uses but jeez don’t pretend it is ergonomic.
- em-bee 11mo agothe part where C syntax examples are shown misses the same examples in zig to really allow a comparison. i am already familiar with C. giving me a C example and telling me it's better than zig does not tell me anything. i'd need to see the equivalent zig example too.