Atria: A toolkit for modern C++ development from Ableton
abletonag.github.io
abletonag.github.io
"Header only - This is great!"
Then I read:
"Dependencies boost".
OK, moving on...
There are not many parts depending on boost and we could make it entirely optional [1] (it would be still be nice for people wanting to use atria::variant::match in combo with boost::variant, optionally).
Could you elaborate on why boost is a total no-go for you?
https://github.com/AbletonAG/atria/search?utf8=%E2%9C%93&q=b...
Minor: there are a few mistakes on the landing page: 'welcome', 'implementation', etc.
Anything that uses boost always seems to compile at a glacial pace and then takes aeons to link. It's also not much fun in the debugger, should you happen upon it in a call stack or see one of its types in the watch window - but build times are the more serious problem. C++ projects always seem to suffer from appalling iteration times, but boost just seems to make things worse...
Microsoft doesn't even let you share precompiled headers across projects, but it's still building in under 20 seconds.
There's a LOT of really idiotic C++ build scripts out there. I really don't know what some people are thinking.
I'm using boost/any, boost/iostreams/stream & tee, and boost/property_tree/json_parser. So obviously I'm not going nuts with things. But wanted to provide the data point.
You can certainly make a mess of things if you're not careful. Most people seem to.
I use C++ for portability accross several platforms and boost always seems to have a completely different naming convention in each platform. Upgrading between versions e.g. 1.48 to 1.51 will very likely require code changes since it is not uncommon to break API contracts across versions.
I have amazing C++ developers with decades of experience that would quit on the spot if I forced them to use boost - and I wouldnt blame them.
I can rant forever.
New versions of C++ have things that used to make boost essential, but now that later C++ standards support lots of those concepts, I am happily boost-free. Boost is a huge negative, so you would need to be really amazing for me to even consider bringing back a dependency that has only brought me so much pain in the past.
>Why single-file headers?
>Windows doesn't have standard directories where libraries live. That makes deploying libraries in Windows a lot more painful than open source developers on Unix-derivates generally realize. (It also makes library dependencies a lot worse in Windows.)
>There's also a common problem in Windows where a library was built against a different version of the runtime library, which causes link conflicts and confusion. Shipping the libs as headers means you normally just compile them straight into your project without making libraries, thus sidestepping that problem.
>Making them a single file makes it very easy to just drop them into a project that needs them. (Of course you can still put them in a proper shared library tree if you want.)
>Why not two files, one a header and one an implementation? The difference between 10 files and 9 files is not a big deal, but the difference between 2 files and 1 file is a big deal. You don't need to zip or tar the files up, you don't have to remember to attach two files, etc.
Also, fwiw Sean Barrett also has gone on record as saying that he's not really a fan of C++ before. I'm struggling to find a specific link, but it's not really a secret.
(As a side note, to anybody who is in the need for what they do, the STB libraries are really absurdly high quality and can do exactly what you want them to 99% of the time. Highly recommend!!)
The header-only approach from Sean Barrett is quite a bit different than the header-only approach from C++:
In C++ it means you will be pulling all the code all the time when importing a header.
In C you will get the prototypes for the library. And in only one of the file you will #define STB_<...>_IMPL
Anyhow STB libraries are a joy to work with, I urge anyone to try them
I'm aware, but the practical advantages of having a library in a single source file apply no matter what the programming language.
Visual Studio certainly does:
Microsoft Visual Studio 11.0\VC\include
Many people argue don't put libraries there - well then you are back to the original problem. Just as long as you don't overwrite a provided library - there are no issues. And if you do overwrite it - you get a rolled up newspaper and start beating the person who overwrote it.
His point is that it's arguably simpler to tell people to copy a single source file to their project's source tree, than it is to help them find the include dir for whatever compiler they happen to be using. And that it's probably easier to have to manually update this file when the library is patched, than it is to coordinate manual library updates across an entire team without the use of a package manager.
There will be a tutorial on the transducers stuff coming up at some point. That is the part that is under more active development indeed. We will also talk about that at CppCon next September.