Skip to content

[Review 2] Rainier Extensive Documentation Tasks #176

Description

@mborland

Looking at the reference documentation
(https://correaa.github.io/boost-multi/multi/reference/index.html), it's
obviously incomplete. About half of the namespace-level symbols don't
even have a short one-sentence description in the description column.
Actually clicking on the specific symbols yields some additional
information if you read between the lines, but not enough. It's also
quite difficult to read, lacking cross-links and spreading minimal
information across a maximal number of unique pages.

I'll try to go through the namespace-level non-deprecated symbols one by
one and document the main problems I find. I will be very specific
because apparently my previous feedback was too vague.

On the good news, I think I may have solved the mystery of the
underscore at the end of boost::multi::apply_. It's so that
boost::multi::elementwise::apply can call it without namespace specifier
and without recursively calling itself. I think. Maybe.

Non-documentation issues:

  • Deleting the address-of operator for boost::multi::array and using
    operator& as a conversion operator instead is not acceptable.

  • taked is still not a word in the English language. Use taken instead.

  • If array::operator~ does the documentation says it does, why is it not
    in namespace elementwise? (The documentation says "Bitwise negation
    operators".)

  • Why does boost::multi::cursor_t::operator[] not accept multiple
    arguments like boost::multi::array::operator[]?

  • Why do operators [] and () not accept tuple-likes as arguments?

  • I notice that the set of elementwise operators is rather small. Bitwise
    operators are missing. Unary minus is missing. Comparison operators
    are missing. Some of these would cause conflict with other operators in
    the library, others would not.

A summary of my most important requirements for the documentation:

  • If it's part of the public interface, it needs to be documented.
  • If it's not part of the public interface, it should not be documented.
  • Documentation must not refer to types that are not documented.
    That's effectively a broken link in the documentation, which is
    unacceptable.
  • If it's documented, it needs a human-written description in
    addition to the machine-generated synopsis.
  • Every parameter must be documented.
    • If it's of a concrete type that the library defines, it should
      link to the documentation of that type.
    • If it's a template type parameter, then the requirements of that
      type must be documented.
    • In addition to type, the semantic meaning of the parameter must
      be documented.
  • Every return value must be documented.
    • If it's of a concrete type that the library defines, it should
      link to that type.
    • If it's of an unspecified type that models a concept, the concept
      must be documented.
    • In addition to type, the semantic meaning of the return value
      must be documented.

But read the full long list, because it contains a lot of specifics that
I also feel are important.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions