Page Contents
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 apwx_
prefix to not clash with other headers, like<basic/pwx_debug.h>
for example.) - 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.yml
file for automatic building on push. test_lib
now also tests the automatic growing ofTOpenHash
.TOpenHash
andTChainHash
are 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
VTHashBase
is now private and the accessors take care that nobody wreaks havoc.
Fixes
- Fixed a possible access error in
THashElement
. - Fixed several possible access errors in
VTHashBase
. - Found and fixed a memory leak due to a typo in
VTHashBase->clear()
. - The trace information eventually works correct.
- Fixed an error in
CThreadElementStore
where 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
Porting:
These are the old parts that haven’t been ported yet.
- CFH (CCnfFileHandler.h)
General issues:
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_lib
should really be split up into nice and convenient Unit Tests.
Important issues:
- 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!
Planned features:
- 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!