[API] Some more cleanup ideas
Stephan Bergmann
sbergman at redhat.com
Mon Dec 3 02:35:27 PST 2012
On 12/03/2012 10:53 AM, Michael Meeks wrote:
> On Fri, 2012-11-30 at 18:53 +0100, Lubos Lunak wrote:
>> On Friday 30 of November 2012, Stephan Bergmann wrote:
>>> I'm not sure this is a good move.
> ...
>>> Which leaves us with the benefit of shorter, less visually cluttered
>>> declarations of C++ functions. But, as I argue above, I am not sure
>>> that is an overall benefit at all.
>
> I'm convinced it is a benefit :-) - and it's interesting; there have
> been a string of decisions in the past where we have decided to go for
> more readable code over (IMHO) gross verbosity:
>
> - rtl::OUString( RTL_USTRING_VERYLONGNAME( "foo" ) )
> + "foo"
>
> to me is a -massive- improvement in readability. More minor ones are:
>
> - rtl::OUString
> + OUString
>
> Many of these have been resisted with the same "no benefit" argument. I
> believe that every redundant token we can clarify, and simplify makes
> reading and getting into the code much easier for new people. Hackers
> have to spend tons of their time reading and un-tangling code, so
> maximum readability is key.
I agree that the string literal clean-up is a big win, makes it much
more pleasant to read and write code, and that I was wrong in
considering it syntactic sugar that would likely not be worth the effort.
However, in this case, I argue that leaving the dynamic exception
specifications in does have a benefit, in a part of the original mail
that got elided.
> In my view the inevitable line-wrapping / 80 char bustage that huge
> long exception descriptions bring brings a significant impairment of
> readability. What should read as a simple interface implementation (and
> to be fair looks reasonably clean and readable as IDL) gets turned into
> something much fouler in the header & impl. The css:: mangling helps in
> some minor way with this - but I feel it is far better to hide as much
> as humanly possible of that duplicate guff.
IMO, the duplication is beneficial here. Just as we duplicate, say, a
method's return type and parameter types from the UNOIDL specification
into the C++ implementation -- and not only because we are technically
forced to, but also because it makes the resulting C++ code so much more
comprehensible.
Abbreviating "com::sun::star::" to "css::" and folding explicitly listed
subclasses of RuntimeException can likely go a long way to reduce
accidental complexity while keeping the necessary complexity evident.
>
>> So, in practice, the specifications in our case are like writting out asserts
>> in the code, and the only questions that there should be are whether it makes
>> sense to have such asserts and whether they are worth the code clutter.
>
> Quite. Personally - I'm deeply unconvinced that we can afford to have a
> code-base where all manner of unexpected side-effects remain un-checked
> at compile-time etc. The "only call methods that throw exceptions
> mentioned above" criteria is (to me) far too opaque to have any
> reasonable chance of reviews and newbie implementers from following it -
> worse manual checking of that sort of tedious detail, even if it is done
> is highly error prone: and I suspect is done only one way. Who - when
> changing a function checks all call-sites of it to see if they declare
> that exception ? ;-)
Where does the "only call methods that throw exceptions mentioned above"
criterion come form? It misses a fundamental part of programming with
exceptions, namely the necessity to match exceptions thrown by a
function's implementation to the function's interface.
Stephan
More information about the LibreOffice
mailing list