[Development] A modest proposal: disable lower-case keywords (emit, foreach, forever, signals, slots) by default
thiago.macieira at intel.com
Wed Apr 15 04:22:50 CEST 2020
On Tuesday, 14 April 2020 20:54:57 -03 Nathan Myers wrote:
> I see that you are confused about the origins of Posix
> and Unix networking practices, as well as WG21's. ISO
> WG21 was convened in 1990. The ntohs etc. macros precede
> 1990. Qt does not.
Yes, it does. The first release was in 1994, but the first papers that talked
about signals, slots, emission and QObject are from 1989. The PhD thesis by
one of Trolltech's founders (before founding Trolltech) was still surprisingly
compileable with Qt 3; for Qt 4 and 5 there was mostly a change about how the
main window is defined.
> Among thousands, maybe millions of libraries, Qt, all alone
> among them, claims authority on its own say-so to impose new
> keywords on the core language it depends upon.
OpenMP comes to mind too. Another one was the language on top of C to access
databases, by Oracle (can't recall the name).
And besides, those are empty macros to help a code generator find
instructions. Hardly new in 1990 and not unique in 2020 either.
> Numerous other libraries could have got clever with macros.
> But they didn't. That was not because they couldn't think of
> it. They are, instead, aware of their place in the ecosystem.
min and max don't come to your mind? See windows.h.
How about major and minor? See sys/sysmacros.h.
> Qt's failing was criticized immediately upon release.
Can you point to the criticism emails or USENET posts? The one comment I
really know about the release was Matthias Ettrich's post on USENET about it
being really easy to use and calling to action to create a desktop for Unix.
Then Miguel de Icasa got involved and criticised Qt, but not on the language
or ease of use, but the licence.
I know a lot of people who criticise moc, even today. But I don't consider it
any worse than yacc or gperf or any other code generator. If and when the
standard provides reflection, it may go away. In any case, those complaints
about moc don't apply: it would still exist, even if the markers it scanned
for were not macros.
> Each day since, it has again not been fixed: day after day,
> year upon year, failure piling on failure, thousands deep.
> All fixable with one simple patch.
You do realise you cannot patch the thousands of different Qt-based
applications with a single patch, right? Each and every one of them requires a
patch. Even a simple search-and-replace can break code if not done properly.
Ironically, the code most vulnerable is that which already uses QT_NO_KEYWORDS
and uses a library that uses "signals" as an identifier.
Anyway, the decision is made: we will deprecate the lowercase keyword-like
macros. But since we don't like to break users' code bases any more than the
standard does, it needs to be a process over a couple of releases.
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel System Software Products
More information about the Development