News for hackers. Stuff that matters.
Re:Banned C standard library functions in Git source code by segfaultbuserr on Sunday August 25, 2019 @11:36AM (#20793522)
Every C programmer has his/her own standard library...
Re:Banned C standard library functions in Git source code by r3trohack3r on Sunday August 25, 2019 @01:25PM (#20794173)
I wonder about this every time I read C.

There is talk about npm/rust having massive dependency trees (and they do) because it makes taking on dependencies too easy. But I feel like C is on the opposite side of the spectrum, where managing dependencies is difficult so every C code base is rolling it’s own version of everything.

C also has an expansive standard library but it hasn’t offset re-invention of that stdlib in the ecosystem. I just see those implementations trapped inside code bases that don’t export them in a consumable way for other projects...

Personally I love writing C but rarely do because dependency management makes innovation in those code bases so time consuming for me.

Re:Banned C standard library functions in Git source code by jancsika on Sunday August 25, 2019 @03:35PM (#20795000)
It's bad that C devs have rolled their own awful, buggy custom solutions.

However, here's the upshot-- that awful, buggy, custom solution is guaranteed to remain compatible with the codebase that contains it. You won't find a single instance where such a dev "improved", "refactored", "optimized", or "modernized" that awful, buggy code in a way that stopped the rest of the code from working and then shipped that broken blob of junk. And if you did find that, there's no way they'd convince the rest of the devs that this is a useful thing to do in the interest of "moving forward" or whatever.

On the other hand you'll find zillions of dollars spent on systems to keep dependency management tools from causing exactly that problem.

Just to give a real-world example-- a user reported that an abandoned C++ plugin wasn't working. We did a race:

1. Three devs try to get a single C++ dependency of that plugin to work cross platform (OSX, Windows, Linux).

2. I tried to port the C++ plugin to a C plugin with no deps.

By the time I ported, tested, and shipped, those three devs were tracking down a bug with the build script of the C++ dependency on Windows.

Edit: granted the plugin itself is only about 2000 lines of code.

Re:Banned C standard library functions in Git source code by ShinTakuya on Sunday August 25, 2019 @08:37PM (#20796660)
Regarding remaining compatible, I would argue that this is why modern languages implement lock files and version pinning. If you don't like a particular change but need some extra functionality or a security fix you can fork the relevant libraries or extend the functionality with an extra self written library.
Re:Banned C standard library functions in Git source code by riquito on Sunday August 25, 2019 @08:51PM (#20796713)
It's not a guarantee that it will work, it's not that rare to encounter a minor/patch version in a library that introduced some subtle incompatible change (usually unbeknownst to the author)
Re:Banned C standard library functions in Git source code by ShinTakuya on Sunday August 25, 2019 @09:53PM (#20796914)
That's literally the purpose of the lock file. The lock file locks the entire dependency tree. So unless you're bumping versions or you fail to save the lock file, the entire dependency tree's versions will remain the same.

>some subtle incompatible change

In statically typed languages this normally isn't an issue. Of course I'm aware that logic can also be changed, but in that case it's up to you to write appropriate tests (or just don't bump the versions of your libraries without a good reason).

Re:Banned C standard library functions in Git source code by Volt on Monday August 26, 2019 @12:21AM (#20797445)
It still sucks. I have a few Haskell projects from a few years ago that I wanted to compile on another system. So I froze the dependencies, moved the project, and tried to build. Solver failed. I gave up.
Re:Banned C standard library functions in Git source code by ShinTakuya on Monday August 26, 2019 @12:30AM (#20797472)
As far as I'm aware, Haskell's dependency system doesn't have a lock file. That's the key part to keeping things stable. Version pinning alone isn't enough.
Re:Banned C standard library functions in Git source code by rubber_duck on Sunday August 25, 2019 @06:58PM (#20796199)
You had the unfair advantage of working on your own :)
Re:Banned C standard library functions in Git source code by adamnemecek on Sunday August 25, 2019 @05:22PM (#20795687)
This is a C++ dependency manager problem though.
Re:Banned C standard library functions in Git source code by Volt on Monday August 26, 2019 @12:23AM (#20797449)
That's the point
Re:Banned C standard library functions in Git source code by oblio on Monday August 26, 2019 @04:56AM (#20798311)
From a modern package manager perspective, C++ is almost as archaic as C.
Re:Banned C standard library functions in Git source code by needs on Sunday August 25, 2019 @05:08PM (#20795601)
That was very true for a long time. But now with cmake and a package manager like hunter, it became quite easy and pleasant to work with dependencies. ExternalProject_Add() may also work.
Re:Banned C standard library functions in Git source code by segfaultbuserr on Sunday August 25, 2019 @02:34PM (#20794631)
Creating a lightweight library would make C programming much more productive, and I'm sure many have tried, but I wonder why none of them see widespread applications, instead of writing some half-baked, ad-hoc helper functions.

One reason, I guess, is the diverse range of applications of C, another reason is the lack of advanced features like generics and templates.

But it would still be useful to create a simple library, intended for Unix-like platforms (beyond the BSD extension of stdlib). So it's more of a cultural problem?

Re:Banned C standard library functions in Git source code by needs on Sunday August 25, 2019 @05:15PM (#20795642)
If I had to guess why there are no such lightweight library, it is because when somehow the library API doesn't provide what you want, you cannot hack the library itself easily. If you import the source code you may have trouble building it, and maintening such "patch" is not a lot of fun.
Re:Banned C standard library functions in Git source code by segfaultbuserr on Sunday August 25, 2019 @06:36PM (#20796068)
Yes. I guess the fact C doesn't have advanced features like generics and templates probably have made the problem worse, making it difficult to create a "drop-in" API.
Re:Banned C standard library functions in Git source code by goatinaboat on Sunday August 25, 2019 @02:58PM (#20794786)
There is a powerful C library that covers nearly all use cases, you merely need to write a configuration file for it. Perhaps you’ve already heard of it? Tcl.
Re:Banned C standard library functions in Git source code by StreamBright on Sunday August 25, 2019 @01:18PM (#20794116)
All of them are null pointer exception & segfault free I bet.
Re:Banned C standard library functions in Git source code by sfkdjf9j3j on Sunday August 25, 2019 @02:26PM (#20794584)
Due to the language's design, C programs are in fact guaranteed to be free of exceptions.
Re:Banned C standard library functions in Git source code by teddyh on Sunday August 25, 2019 @04:18PM (#20795295)
Except SIGFPE.
Re:Banned C standard library functions in Git source code by segfaultbuserr on Sunday August 25, 2019 @06:58PM (#20796200)
I nominate your comment for the HN comment of the day.
Re:Banned C standard library functions in Git source code by StreamBright on Sunday August 25, 2019 @03:39PM (#20795020)
Nitpicking but you are right. Null pointer bugs (null pointer dereference to be precise) are all over the place in C though.

https://stackoverflow.com/questions/4007268/what-exactly-is-...