On 4/1/2016 1:25 AM, Phil Bouchard wrote:
Greetings,
- "Root Pointer" is an alternative to the long unsolved problem of garbage collectors which lasted for more than 70 years!
- Thanks to Paul A. Bristow for his help on the generation of the documentation which is now available at the following link: http://philippeb8.github.io/root_ptr/
I have no idea from the documentation why I should use root_ptr, what its purpose is, and when I should use it. Code examples are not an explanation of a library. I wish I could repeat that 1 million times without anybody feeling insulted. Here is the explanation I get of root_pointer from your library: "Root Pointer is a memory manager on top of reference counting and is also able to detect outright unreferenced cyclic blocks of memory." That's it ! Literally ! Honestly, do you really expect anyone to be interested in what you have done if that is the entire explanation for everything in your library ? I realize you have a tutorial but what good would that do me if I have no idea what 'root_pointer', 'make_root', 'node_ptr', and 'make_node' has to do with anything ? Of course I can ask a ton of questions but why would I want to do that if your doc doesn't tell me anything. My suggestion is to write documentation which seeks to explain the why, what, and when of what you have created.
(I apologize for the misplaced images in the rationale)
- The library itself can be found here: https://github.com/philippeb8/root_ptr/
All examples and tests compile fine with BJAM with GCC and MSVC.
- Also here is a quick overview on the benchmarks:
Single threaded: unique_ptr (new): 43.2705 unique_ptr (make_unique): 42.4111 shared_ptr (new): 68.9101 shared_ptr (make_shared): 46.6575 shared_ptr (allocate_shared_noinit): 31.2334 root_ptr (new): 30.3701
Multi threaded: unique_ptr (new): 42.1397 unique_ptr (make_unique): 43.4631 shared_ptr (new): 76.4543 shared_ptr (make_shared): 76.6611 shared_ptr (allocate_shared_noinit): 81.9926 root_ptr (new): 66.3417
- An example of its usage can be seen here:
https://github.com/philippeb8/root_ptr/blob/master/example/t100_test1.cpp
We can see in the aforementioned link that outputting part of a complex graph, cyclic or not, can be done in the following simple way:
cout << "Mind dump:" << endl; cout << * t100 << endl;
cout << "Searching for: \"einstein\"" << endl; if (node_ptr
p = t100->search("einstein")) cout << p->sort().unique() << endl; cout << "Searching for: \"graviton\"" << endl; if (node_ptr
p = t100->search("graviton")) cout << p->sort().unique() << endl; Sincerely yours, -Phil