On Tue, 3 Sept 2024 at 18:36, Marc Mutz via Development
<development@qt-project.org> wrote:
>
> On 31.08.24 20:01, Ville Voutilainen wrote:
> > On Fri, 30 Aug 2024 at 19:21, Thiago Macieira <thiago.macie...@intel.com> 
> > wrote:
> >> For the non-simple cases, we may need two macros, one that expands to:
> >>
> >>    noexcept(noexcept(std::string_view{"", 1}))
> >>
> >> and the other that expands to the pre() specifier.
> >
> > Right. Maybe
> >
> > void f(int x) Q_NARROW_CONTRACT_NOEXCEPT Q_PRE(x >= 0) ;
> >
> > and then, if contracts are enabled, that noexcept expands to nothing,
> > and if contracts are disabled,
> > the pre expands to nothing and that noexcept expands to a noexcept.
>
> I'm really doubting the wisdom of adding another dimension of build to
> Qt. We already have release/debug, and Q_NARROW_CONTRACT_NOEXCEPT would
> mean an orthogonal build mode. So on Windows we'd need four builds per
> compiler. Assuming, as I do, that that feature will be in high demand by
> users once available. Nothing we haven't done before (Qt 3 had
> debug/release × multi/single-threaded), but just like Qt 4 ditched the
> non-MT build mode, I expect we'd be ditching the
> non-contracts-checking-supporting (noexcept enabled) build mode ere
> long, because it turns out to be too much of burden to carry around with
> (presumably) too little a benefit.
>
> As is well-known, not all users of Qt build Qt from scratch. Think Linux
> distributions. The Lakos Rule ensures that a single build can be used
> for both checked and unchecked contract mode, with the control lying in
> the hands of the owner of main(), where we seem to agree it belongs.
>
>
> I also question the notion of "we don't do exceptions in Qt" popping up
> between the lines in this thread. We _do_ support them in QtCore and
> QtTest, and it's Core you're proposing to plaster with noexcept.
> Exception-unsafe code is also prone to Static Analyzer complaints, and,
> once again, legislators are working on forcing software companies to do
> more for security, not less (and one of the ways TQtC has decided to
> take this is to listen to SA tools more (Axivion, but Qt is also covered
> by Clang-SA and Coverity)). I believe one goal of contracts is to make
> C++ an (optionally) checked language.
>
> We need _more_ exception (= resource) safety and not less. Exception
> safety doesn't mean QT_TRY and QT_CATCH, but, in 95% of cases, RAII, and
> RAII helps also against laissez-faire coding practices (see
> https://codereview.qt-project.org/c/qt/qtbase/+/551854 for a recent
> example) that have nothing to do with exceptions. Build-conditional
> noexcept and ignoring exception safety is heading into the opposite
> direction of where I, at least, see that Qt needs to go. Besides, libc++
> recently ditched their build-conditional noexcept approach, AFAIK. We
> needn't make mistakes others have already done for us.

Thank you very much for writing that. I agree 100% with all of it. In
particular, the RAII part - there's barely
any reason _not_ to write exception-safe code, because it makes your
code also "return-safe", "break-safe",
"continue-safe", and shiver me timbers, "goto-safe", and also "fallthru-safe".

I may be more skeptical of that message sinking in. This is hardly the
first time I hear these "but I want want want
to make my functions noexcept, because it gives me perf benefits".
Without giving measurable perf benefits.
Except on clang. But elsewhere, the setup of a Language-Specific Data
Area that installs a terminating exception
handle into an exception table is not measurable. As a fun additional
point, it's by-default not visible on godbolt.
And this is neither the first time I hear "but I don't don't don't
don't want to write exception-safe code, because
I don't care for exceptions." While those are just terribly bad
reasons not to write exception-safe code and to
sprinkle noexcepts where they aren't really useful, it seems mightily
difficult to convince the people who believe
in them to change their ways.
-- 
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to