|
Boost : |
Subject: Re: [boost] [review] Review of Outcome v2 (Fri-19-Jan to Sun-28-Jan, 2018)
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2018-01-28 19:11:52
AMDG
I started my review, but I don't think I'm going to
get it finished, so I'm throwing in a partial review
as is:
HOME:
- "View this code in Github"
This is fine for online viewing, but for a packaged release
it's better to link the local source.
- "contains an error information"
"information" shouldn't have an indefinite article.
PREREQUISITES:
- "It is worth turning on C++ 17 if you can, there are..."
comma splice.
BUILD AND INSTALL:
This section refers to all kinds of things that
do not exist in the review version. Such as:
- CMake
- Single header version
- outcome/include/outcome.hpp
DECISION MATRIX:
- The font size in the decision matrix scales with
the page size, which may make it unreadable.
(I had to zoom to 300%, before I could read the
third flow chart) It's also completely unreadable
without javascript.
TUTORIAL:
RESULT<T, EC>:
- OUTCOME_V2_NAMSPACE.
This seems singularly pointless.
How does accessing the namespace via a macro
help with backwards compatiblity? It will
break source compatibility exactly as much
as if you just used a normal namespace. If
you're concerned with binary compatibility,
then the only thing that matters is the
symbol mangling and there's no need to
expose this ugliness to the user.
Also, why is this attached to result, and
not in its own section.
- If some type `X` is both convertible to `T` and `EC`
parallel structure: 'convertible' should either be
placed before 'both' or be duplicated on both
sides of the 'and.'
- You say that it's ambiguous if the constructor
argument is convertible to both T and EC. Is
it still ambiguous if it is exactly T or EC?
If so, that seems wrong. If not, you need to
explain the behavior more clearly.
- Why do you need to use tagged constructors
instead of just casting? (I suppose the fact
that you felt the need to have these indicates
to me that an exact match /is/ ambiguous.)
tutorial/result/inspecting:
- "Suppose we will be writing function..."
function needs an article.
- "integral number"
This is just a verbose way of saying "integer."
- "Type result<void>"
-> "The type result<void>"
- "Class template `result<>` is declared with attribute [[nodiscard]]
which means compiler"
Add "the" before "class," "attribute," and "compiler."
- "In the implementation we will use function `convert`"
"*the* function"
- "#2. Function `.value()` extracts the successfully returned `BigInt`."
"*The* function". Also it's an int, not a BigInt.
- I noticed that the starts of the list items after the
#N. are not vertically aligned, which looks a little odd
for #1, #2, #3, and #4, which are short enough to make it
obvious. This appears to be because each item is
treated as a normal paragragh which happens to begin
with a number instead of a proper list item.
- "It implies that the function call in the second argument"
I presume that it takes a generic expression, not just
a function call.
- "It is defined as"
The antecedent of "It" is ambiguous. It refers to
the function in the preceding sentence, but when
I first read it I assumed that it referred to "OUTCOME_TRY"
- I think the name OUTCOME_TRY is misleading because it has
the exact opposite meaning of "try." try/catch stops
stack unwinding, but OUTCOME_TRY is used to implement
manual stack unwinding.
- I'm not sure what I think of as_failure. I'd actually
prefer to just write return r;
- "this will be covered later"
A link would be nice.
- I can't see the point of having success<void>
default construct T. It seems like dangerous
implicit behavior, unless you make it so that
success is variadic and constructs the result
in place. Also, there is no type named success.
It's called success_type.
tutorial/result/try
- OUTCOME_TRYV
I think it would be nicer if you used a single
macro that has different behavior depending
on whether it is passed 1 or 2 arguments. It
would be even better if you could also merge
OUTCOME_TRYX in. The behavior of OUTCOME_TRYV
is logically the same as that of OUTCOME_TRYX for
a result<void>.
tutorial/outcome:
tutorial/outcome/inspecting:
- "outcome<> has also function"
-> "outcome<> also has a function"
- How does outcome::value interact with custom
error_code type? It needs to know what exception
type to throw, no?
tutorial/payload:
- "...symbolising that into human readable text at the
moment of conversion into human readable text"
This sentence does not parse.
- "#4 Upon a namespace-localised `result` from library
A being copy/moved into a namespace-localised
`result` from C bindings..."
I can't understand this at all. What is a
"namespace-localised result" How does this
relate to a custom payload? A plain error_code
has everything you need to set errno.
general:
- In code examples, _'s can sometimes disappear
mysteriously. I haven't figured out the exact
conditions, but resizing the window changes the
result. Seems to be a result of overlapping with
the line underneath.
- Also, the lines are too long. They still wrap
even when I put the browser in full screen.
(Admittedly, the VM is only 1280x768)
In Christ,
Steven Watanabe
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk