Hello, This is my review of AFIO. DISCLAIMER: I am not on a personal vendetta or hold any grudge against the author. I spent valuable family time in order to review the presented work and opinions expressed so far. On 08/23/2015 03:08 AM, Ahmed Charles wrote:
Please answer the following questions:
1. Should Boost.AFIO be accepted into Boost? Please state all conditions for acceptance explicitly.
I don't think it should be accepted as a Boost Library as it currently stands. The documentation presented is incomplete and tries to sell features which are only to be finished eventually. Furthermore, I am not exactly sure about the scope of the library and the final goal. For example: - The author clearly states that performance is not one of his goals (http://thread.gmane.org/gmane.comp.lib.boost.devel/261914/focus=262478). Yet, the documentation, especially the introduction, puts a great emphasize on that, while the presented benchmarks do not show any of those promises or compare apples with oranges. - Portability, the author claims to present a portable solution to the ACID problem however goes into great length in explaining the differences between various OSes and FSes from which I concluded that users of the library still have to implement special code paths for some systems. This comes especially obvious when looking at example code provided in the documentation. - "Readiness": The docs list tons and tons of features which aren't really there yet. One can get the impression that it is only half done. Especially concerning is that running the unit tests might actually break your hard drive (https://boostgsoc13.github.io/boost.afio/doc/html/afio/quickstart/workshop/e...) which is not very assuring in the context of the promised feature set. It looks like it would have been better to let the dust settle after the final additions to the documentation and maybe even properly implement the praised backend before aiming for review. I think it would also be best to only include the latest version of the library for inclusion to boost, is the community really supposed to also review the apparently inferior V1 of the library?
2. What is your evaluation of the design?
The design of the documented, user facing API isn't what I expected from
a modern C++ API. Following are some points, in no particular ordering,
that struck me most.
- afio::future
3. What is your evaluation of the implementation?
I refrained from actually looking at the implementation. This is actually a pretty severe point. The meat of the implementation is split into 4 headers only, with two headers (afio.hpp and detail/impl/afio.ipp) having the majority code with over 6000 lines of codes each! Despite the actual content, I believe this is a maintenance nightmare. I don't want to review such large blobs of text.
4. What is your evaluation of the documentation?
The documentation is very hard to follow and incomplete. The layout of
the table of contents as well as the enumerations documentation is
broken. Some examples in the reference documentation do not actually
match the presented API. Some examples contain errors.
On the hard to follow part:
- Overall, the documentation is cluttered with features that are going
to be implemented in future versions or even claim that the features
already exist.
- I have no idea what the table in
https://boostgsoc13.github.io/boost.afio/doc/html/afio/overview.html is
trying to tell me
- The design introduction contains lots of text that seems like
unrelated anecdotes
- The reference section doesn't cross link between the different
related API functions/classes that are needed for one specific
class/function.
On the incomplete part:
- The workshop tutorial is not finished.
- Some references are not completely documented, for example:
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/classes/dir...
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/classes/dir...
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/classes/dis...
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/classes/dis...
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/classes/dis...
On the examples do not match reference documentation part:
-
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/functions/m...
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/functions/m...
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/functions/m...
The example mentioned in the above entries do not mention the
make_io_req function at all.
-
https://boostgsoc13.github.io/boost.afio/doc/html/afio/reference/functions/d...
Why does this example not focus on the presented function?
On the examples containing errors part:
-
https://boostgsoc13.github.io/boost.afio/doc/html/afio/quickstart/workshop/n...
"
// Boost.Monad futures are also monads, so this implies a
make_ready_future()
return std::current_exception();
"
The return type is shared_future
5. What is your evaluation of the potential usefulness of the library?
I think having a library which handles asynchronous file I/O operations is potentially very useful. I like the idea and can see potential benefits over traditional synchronous file I/O. Mostly in terms of overlapping I/O with other useful work. I am not sure how asynchrony helps with solving the ACID problem as I am not too versed in that domain and the documentation doesn't make that clear either.
6. Did you try to use the library? With what compiler? Did you have any problems?
Haven't tried the library.
7. How much effort did you put into your evaluation? A glance? A quick reading? In-depth study?
I followed the email threads that had been ongoing around the time of this writing and tried to follow the documentation, which took me about 4 hours.
8. Are you knowledgeable about the problem domain?
I am not knowledgeable about async file I/O in particular but spent most of my time with dealing with an async based parallel runtime system and its application. Best regards, Thomas