Welcome to the second part of our Open Source series. Today we’re releasing moost, a C++ library with all the nice little tools and utilities our MIR team has developed over the past five years. If you’re a C++ developer yourself, you might notice that moost sounds quite similar to boost, and that’s on purpose. moost is the MIR team’s boost, there is hardly a project in our codebase that doesn’t depend on one or more parts of moost.
There are a lot of different things in moost. Some are really simple, yet very helpful in day-to-day work, like the which
template that allows you to use pairs (and containers storing pairs) more easily with standard algorithms; or stringify
, a function template that turns complex objects into strings. Other parts are slightly more sophisticated: for example, moost contains the framework that is shared by all our backend services, and that allows you to write a daemonisable service with logging, a set of standard options and even a service shell that multiple users can connect to when the service is running, all in a few lines of code.
As our backend services are inherently multi-threaded, there’s also a bit of threading support in moost. For example, the safe_shared_ptr
template is immensely useful for resources that are shared between threads and need to be updated atomically.
If you’re working with large, static datasets, you’ll probably find the memory mapped dataset classes interesting. They allow you to build large datasets (like gigabytes of data) of vectors, multimaps or dense hash maps that can be simply mapped into memory — and thus shared between different processes — and accessed very much like a constant standard container.
moost also contains an abstraction for loading shared objects and instantiating objects defined inside these shared objects. It will take care of all the magic involved to avoid resource leaks.
There are more bits and bobs in there, like a simple client for the STOMP protocol, hashing and message digest functions, wrappers for key-value stores, template metaprogramming helpers and even a complete logging framework. So check it out, play with it and if you’ve got some nice tool to add, please contribute!
There’ll be more code coming up later this week that makes use of moost, so if you’re looking for some hands-on examples, stay tuned!
To be continued…
Comments
Predelnik
19 February, 18:36
Well, that’s pretty cool. But why in the world last.fm scrobbler is crushing so often on windows? :D
J.N.
20 February, 05:09
Many (only ?) very good ideas, many thanks for that contribution. It probably would help giving access to the doxygen docs for people who are just curious.
Marcus Holland-Moritz
20 February, 06:23
@J.N. Very good point, thanks! You can now find the doxygen docs here.
Arash Partow
21 February, 06:44
Very clean, well structured and written code base.
Interesting and informative explanations and comments. (eg: class_logger.hpp)
This is how C++ should be.
Pierwsze Pozycje
21 February, 19:19
time to testing :)
Meeting C++
21 February, 21:09
That looks very nice.
Would be nice if you could add some license information to the repository, seems like MIT from what is in the files.
Rachael
22 February, 11:11
I think I know some people who’d be interested in testing this out.
Sounds promising.
Marcus Holland-Moritz
22 February, 11:55
@Meeting C++, yes, it’s MIT, I’ve now included a LICENSE file.
havryliuk
22 February, 12:14
Why Tools ARE Belong
while they should just (without “are”) belong
what an ignorance! sorry
Sehe
23 February, 00:54
@havryliuk MOVE ZIG! FOR GREAT JUSTICE
(somebody didn’t get the reference…)
Lilian
24 February, 21:27
Just a curiosity: Why in digest/sha2.cpp the functions were declared as a macro?
Anyone knows?
Pozycjonowanie
27 February, 14:13
Time for make some test.
otoTlumaczenie
6 March, 12:59
Is it working on MACs?
snyde
11 March, 01:23
Interesting. Thanks for giving back to FOSS.
I need to start following this blog again. I drifted off for a while, when posts were becoming rare.
Comments are closed for this entry.