3 ms·
https://wikipedia.org/wiki/Poe's_law https://wikipedia.org/wiki/Poe's_law modern languages dont adopt them because they are terrible. a header import just dump
by 38 3y ago
https://wikipedia.org/wiki/Poe's_law https://wikipedia.org/wiki/Poe's_law
modern languages dont adopt them because they are terrible. a header import just dumps all the declarations into the global scope, so you have no idea where function or type usages comes from.
- jprete 3y agoI consider them much worse than that. Header files are explicitly a copy-paste of the included text file into your source. There’s no rule that they have to only contain declarations, or that they have to appear at the top of source files, or that they have to be .h files. All of those are usage conventions and not required by the language itself. The full capabilities of headers to muck with your code are arbitrarily large.
- Galanwe 3y agoIt's the same for pretty much any language. There is nothing special about header files... > There’s no rule that they have to only contain declarations Same thing in Python, you can write statements at the top level of a module, and it will be executed whenever someone first import that module... > or that they have to appear at the top of source files Same thing in Python, you can `import` anywhere, and the context/order matters and overwrites existing scope declarations. > or that they have to be .h files Same thing in Python, the extension doesn't matter if you use import lib, only if you use the `import` keyword does the name/path matters.
- 38 3y ago> It's the same for pretty much any language. no, its not. just off the top, I can say that D, Go, Nim, Rust and Zig dont do this. also this isn't really an argument. instead of actually disagreeing with the original premise "headers are terrible" (which you cant), you've started a new argument, which is "other languages use headers", which no one was contesting.
- rsaxvc 3y agoThat's the best(weirdest?) part! I used to have a job porting LabView and matlab to C/C++, since headers don't even have to include full statements, so share our test data and coefficients like so: static const float FIR_FILTER={ #include "fir_coefs.csv" };
- mathstuf 3y agoFWIW, the `#embed`/`std::embed` proposal is the preferable solution here. There's a lot of time spent in the compiler parsing those ASCII floats into bytes (and I've seen `clang-format` take ages to format a block of `0xXX` bytes in an array).