I am happy to announce, that the PrydeWorX C++ Library, pwxLib, got its Version 0.9.0 Release last weekend.
It has been a while, almost 9 months, since the last release. But I wasn’t just busy with other projects, the library got a major overhaul of both its API and its documentation.
Further there were many tests using the Address, Leak and Thread Sanitizers of GNU gcc 9.2.0. I really hope that all issues are fixed now.
Here is the rundown of the pwxLib Version 0.9.0 Release:
Changes and additions
- The API has been completely overhauled and should now have reached its final form. From here on the API may be extended, but changes shall be rare and removals non-existent.
- The stupid
pwx_prefixes for header names are gone. Instead, generalized
<PFoo>headers have been added, inspired by the
<QFoo>headers of Qt. (some minor headers still have a
pwx_prefix to not clash with other headers, like
- Thread safety has been greatly improved, and gcc-9.2.0 ThreadSanitizer does not find anything any more in test_lib.
- The API documentation, although not fully complete, yet, has been overhauled and fixed.
- The library now has a Travis account and a
.travis.ymlfile for automatic building on push.
test_libnow also tests the automatic growing of
TChainHashare now properly described.
- Removed the artificial limit for insertions of 1000000 elements from VTHashBase.
- Most tool macros now support, some even enforce, to be ended with a semicolon.
- Container and element destructors now wait until no other thread is waiting for a lock, before finalizing the dtor.
- The hash table in
VTHashBaseis now private and the accessors take care that nobody wreaks havoc.
- Fixed a possible access error in
- Fixed several possible access errors in
- Found and fixed a memory leak due to a typo in
- The trace information eventually works correct.
- Fixed an error in
CThreadElementStorewhere an atomic store used loading memory order.
One important note: The automatic micro-locking of the containers and their elements overdo at the moment. This is intentional and will be optimized in future releases.
Speaking of which, the new TODO list is quite a pack.
List of current TODOs
These are the old parts that haven’t been ported yet.
- CFH (CCnfFileHandler.h)
test/cluster_check.cpp: Make multi-threaded with background output queue. The single-threaded approach used right now is good for checking the speed, but that’s not the real purpose of the program.
- All the preprocessor magic, introduced to allow detailed thread logging, is no longer needed and should be removed. tsan is more than enough for the task.
- The next release should be buildable using Visual Studio 2017+
- When the pwxLib was initially started, Unit Tests weren’t a thing. However, for such a library Unit Tests are perfect.
test_libshould really be split up into nice and convenient Unit Tests.
- After test_lib being free of any tsan errors and warnings, torture should be used to improve thread safety even further.
- Thread safety has been purposely overdone and has to be reduced to what really is needed now, so the (currently not so great) performance improves again.
- All elements and containers should support move semantics. We’re at C++17 after all!
- CFH from CCnfFileHandler.h has to be ported.
- CSimpleTextureCreator : A simple first version should be included.
- CArgHandler should allow adding arguments using initializer lists. The current way is … uhm… not nice.
I will port my pwx tools in the coming days. Stay tuned and have fun!