News for hackers. Stuff that matters.
Re:Trying out C++20's modules with Clang and Make by flohofwoe on Sunday October 15, 2023 @01:44PM (#37891755)
You're downvoted for some mysterious reason, but you're completely right, in languages with module support I really miss the compact API overview that is provided by C headers. This is good because the interface is important, and the implementation is not.

In modules, the implementation completely dominates, and it's impossible to figure out what the module API looks like from looking at the source. You need an IDE to generate an outline for you, which frankly sucks.

For C at least, headers are pretty much perfect because they are supposed to only contain public API declarations. It's just C++ that messed everything up with the inline and template keywords, which required implementation code to move into header files.

Re:Trying out C++20's modules with Clang and Make by dureuill on Sunday October 15, 2023 @04:41PM (#37893224)
I agree that the compact API overview is a good thing to have, but I loathe that C forces the user to write it by hand, while modern languages just generate it from the documentation comments of the source.

See: `cargo doc` that generates nice HTML documentation. See also language servers that provide completion using the same documentation comments.

Meanwhile headers, on top of the forced duplication of signatures between header and implementation, and the associated cost, is also implemented on terms of the preprocessor and textual inclusion. This compilation model makes code analysis much harder than necessary, because it becomes hard to know which piece of the preprocessed compile unit comes from which header.

This makes it hard to implement e.g. "remove unnecessary import" or "import symbol automatically" functionalities that are the bread and butter of module-based languages. Also impacts automatic refactoring negatively