small devlog for today:
1: I made some adjustments to the internal cablegen parse.h API and handling, to ensure that only full matches of the form [long opt]=[x] or [short opt]=[x] were processed, so that errors weren't thrown when there is overlap between the prefixes of options, like so.
and here's the difference in the callbacks (showing off the new opt->eq field) (side note, I am a huge fan of this type of polymorphism where essentially a this pointer is sent to the callback, with also a void* data, so you can get semi-structured data from the parser)
2: I switched to my new logging library so that formatted logging is more normal
3: Because of 2 letting me log more normally, I implemented a DOT graph output for a more in-depth profiler (the code is still a WIP, it's a little ugly)
This primitive version does still show some patterns, like that for example for the smaller layers, writing takes more time than deduplicating, even with an NVME drive!
(layer 16, showing that the time to write is 111606 ns, vs 2375 ns to deduplicate)
(layer 38, showing that the time to write is 452362 ns, vs 1152870 ns to deduplicate, quite the difference!)
Coming next: Implementing radix sort to potentially save a lot of time in that quite expensive deduplication, and exploring when is exactly the right time to deduplicate











