• 0 Posts
  • 561 Comments
Joined 1 year ago
cake
Cake day: June 21st, 2023

help-circle




  • I’m not going to say that C is unusable by any means (and I’m not saying you are saying that). It’s a perfectly usable language. I do think that more people would benefit from exploring other options though. Programming languages are tools, not sports teams. People should familiarize themselves with many tools so they always have a good tool to use for any job.

    I think a lot of people believe this because there is some truth to parts of it. I think we see languages like Rust and Zig (and others) popping up to try and solve specific problems better than others.

    As for OP’s post, there is no single “C successor” or anything like that. People will use the best tool they know of for the job whether that’s C, Rust, C++, Zig, Python, C#, etc. Many languages will “replace” C in some projects, and at the same time, C will replace other languages in some projects (likely to a lesser extent though).

    (Not /s this time)


  • Honestly C is the future. I don’t know why people would move from C to any other language. It does the job well enough that there’s no reason not to use it.

    Think about it. Every modern application depends on a piece of code written in C, not Rust or Zig or any other language (except assembly). It can be used to solve any problem, and works in more places than any other language.

    These arguments about “security” and “memory safety” are all pointless anyway in the face of modern code scanning tools. Cross-platform dev can be done trivially with preprocessors. If that’s not enough, I don’t know what to say. Get better at writing C obviously.

    Lifetimes and UB should all be kept in mind at all times. You can explicitly mark lifetimes in your C code if you want using comments. Any index-out-of-bounds bugs, use-after-free, etc are just signs that your team needs more training and better code scanning utils. Write more tests!

    Anything more complex than a simple typedef is just a sign that you’re over-engineering your solution. #include is both simple, and does exactly what you’d expect any reasonable language to do - paste your referenced code inline. It’s genius, and doesn’t require any complicated explanations on namespaces and classes and subclasses and so on.

    So which will be the future? C obviously.

    /s





  • Correct - Rust’s attribute grammar allows any parseable sequence of tokens enclosed in #[attr ...] basically. Serde specifically requires things to be in strings, but this is not a requirement of modern Rust or modern versions of syn (if you’re comfortable writing your own parser for the meta).

    The author is not a Rust expert though, so I’m not surprised to see this assumption. It doesn’t take away from the article though.

    Edit: for fun, syn has an example parsing an attribute in an attribute







  • I made the mistake of starting Frostpunk (1) since I saw that 2 released. It’s an incredibly well-made game. The art style is beautiful, the game is intense, there is a lot of emotion, and it does its one thing just so well. Unlike a lot of modern games these days, Frostpunk wants you to lose, which is fitting for its setting. It sees that you’re behind, then kicks you in the shins for good measure rather than lending a helping hand. I’ve lost so many hours of my time to this game in the past week.

    I’ve read that Frostpunk 2 is a completely different game. That one might be next on my list if I get to it before Factorio updates and the expansion for it comes out.


  • The “‘modern’ development stack” we used at my school when I was in a CS program was C++98 or something, compiled using gcc directly. This was in the last decade. It technically wasn’t C!

    But we did use C in my computer engineering classes so I guess they technically did teach it. I feel very fortunate that I haven’t needed to use it since then.




  • Adding a single unused function should no effect on runtime performance. The compiler removes dead code during compilation, and there’s no concept at runtime anyway of “creating a function” since it’s just a compile-time construct to group reusable code (generally speaking - yes the pedants will be right when they say functions appear in the compiled output, to some extent).

    Anyway, this can all be tested on Godbolt anyway if you want to verify yourself. Make a function with and without a nested unused function and check the output.