News for hackers. Stuff that matters.
Re:Show HN: Add a command-line interface to any C++ program by HMH on Saturday October 16, 2021 @06:09AM (#28886772)
I haven't really touched C++ for a few years and it seems due to its lack of a nice package manager single header libraries are getting more and more poplar. Does this mean I should expect compilation time to significantly increase during development as headers need to be recompiled every time?
Re:Show HN: Add a command-line interface to any C++ program by pjmlp on Saturday October 16, 2021 @06:21AM (#28886818)
In the meantime two big contenders raised up, vcpkg alongside NuGET from Microsoft (also does Mac and Linux), and conan.

Personally I dislike conan, because package managers should be written in the language of the community they serve, but that is me.

Thankfully, both support binary libraries.

Then there are modules, which on Visual C++'s case are going along quite well.

Anyone that bothers using header only libraries only has themselves to blame for waiting for builds, they are a plague from users that pretend C and C++ are scripting languages.

Re:Show HN: Add a command-line interface to any C++ program by jstimpfle on Saturday October 16, 2021 @07:10AM (#28887044)
"Header only" might be a bad name, in my perception what it really means is "you can drop the code files into your project; we won't annoy you with our own over-engineered build system".

Slow-compiling APIs can be made in any form, whether "header only" or not. C++ template APIs cannot be compiled separately and can cause long compile times for all transitively dependent translation units.

For example, stb_image.h is a single file that is 1 copy+paste from github away. It compiles quite quickly, and often you will need it alongside only a single .c file in your project, but anyway it's extremely easy to compile it separately. All you have to do is cut+paste the implementation part to a separate .c file.

Re:Show HN: Add a command-line interface to any C++ program by moonchrome on Saturday October 16, 2021 @03:18PM (#28890602)
Copy pasting shit in your repo means you are responsible for maintaining that code and need to keep track of upstream manually. Especially in c++ where memory bugs are prevalent, this sounds like a terrible idea.
Re:Show HN: Add a command-line interface to any C++ program by pjmlp on Saturday October 16, 2021 @07:14AM (#28887063)
Templates can be instanted for common types and consumed via binary libraries.

Also modules support templates just fine.

Indeed, header only libs are just doing PHP like programming.

Re:Show HN: Add a command-line interface to any C++ program by twqas on Saturday October 16, 2021 @06:52AM (#28886970)
Unfortunately Microsoft is addicted to telemetry, so vcpkg has that. I did not bother checking for NuGET.

Header-only libraries can give substantial speedups (25% in extreme cases).

Re:Show HN: Add a command-line interface to any C++ program by pjmlp on Saturday October 16, 2021 @07:11AM (#28887049)
You can disable it.

I really would like to see benchmarks versus proper use of binary libraries.

Re:Show HN: Add a command-line interface to any C++ program by inetknght on Saturday October 16, 2021 @12:57PM (#28889266)
> You can disable it.

I shouldn't have to think about it; I shouldn't have to explicitly opt-out to have privacy. Telemetry should always be opt-in, and not opted-in by default.

Re:Show HN: Add a command-line interface to any C++ program by ranger_danger on Saturday October 16, 2021 @01:16PM (#28889429)
The problem is, as a developer trying to fix issues, telemetry can be extremely helpful... but if it's solely opt-in, then virtually nobody will actually use it, and then what's the point.
Re:Show HN: Add a command-line interface to any C++ program by kjs3 on Saturday October 16, 2021 @05:44PM (#28891862)
So your developer issues should trump my user issues?
Re:Show HN: Add a command-line interface to any C++ program by TillE on Saturday October 16, 2021 @06:37PM (#28892204)
It tells you to just recompile with -disableMetrics if you want, it's really not a huge deal. It's not like Windows.
Re:Show HN: Add a command-line interface to any C++ program by kjs3 on Tuesday October 19, 2021 @11:16PM (#28926354)
So as a user, I have to recompile in deference to making things easier for the developer. Definitely not like Windows...for all their sins, they don't pull entitled BS like that on users.
Re:Show HN: Add a command-line interface to any C++ program by ngneer on Saturday October 16, 2021 @09:49AM (#28887868)
Conan has been very useful to me
Re:Show HN: Add a command-line interface to any C++ program by mrich on Saturday October 16, 2021 @06:26AM (#28886851)
In the case here most of the code is templates and macros, so a cpp wouldn't save much.
Re:Show HN: Add a command-line interface to any C++ program by ranger_danger on Saturday October 16, 2021 @01:14PM (#28889411)
Just include that header in a separate C/C++ file that has no other purpose, then you won't have to recompile it every time you change something elsewhere.
Re:Show HN: Add a command-line interface to any C++ program by corysama on Saturday October 16, 2021 @01:56PM (#28889860)
Yeah. "header only" had really caught on because it is a catchy term that is simple to understand.

But, what I really, really wish caught on would be "single cpp file" with the expectation that you are capable of adding a single, self-contained source file to whatever build system you happen to be using.

Re:Show HN: Add a command-line interface to any C++ program by electroly on Saturday October 16, 2021 @02:44PM (#28890303)
That's often what "header only" libraries really are -- you create your own .cpp file, define a particular preprocessor symbol, and then include the header which will then produce the implementation in that translation unit. Without the symbol defined you only get the interface, suitable for including in other translation units.