[Development] Changing qreal to a float

Girish Ramakrishnan girish at forwardbias.in
Thu Feb 16 08:01:50 CET 2012


Hi,

On Wed, Feb 15, 2012 at 3:26 AM,  <lars.knoll at nokia.com> wrote:
> On 2/15/12 12:11 PM, "ext Olivier Goffart" <olivier at woboq.com> wrote:
>
>>On Wednesday 15 February 2012 22:02:10 Craig.Scott at csiro.au wrote:
>>> On 15/02/2012, at 8:58 PM, <lars.knoll at nokia.com>
>>><lars.knoll at nokia.com>
>>wrote:
>>> > On 2/15/12 10:28 AM, "ext Thiago Macieira" <thiago.macieira at intel.com>
>>> >
>>> > wrote:
>>> >> On quarta-feira, 15 de fevereiro de 2012 08.49.31,
>>>lars.knoll at nokia.com
>>> >>
>>> >> wrote:
>>> >>> I don't think it'll break too many places though, so I'm not too
>>>worried
>>> >>> about the change.
>>> >>
>>> >> It will. Ask Ubuntu packagers for how much work they had to put in
>>>to fix
>>> >> the
>>> >> mismatches in KDE. We can assume that work is done, but other
>>>Qt-based
>>> >> software, including non-OSS software, will probably have similar
>>>issues.
>>> >> But,
>>> >> it should be noted that they had lots of rework because the software
>>>kept
>>> >> on
>>> >> breaking. If this change is made to all, one can assume that it will
>>>not
>>> >> "keep
>>> >> on breaking".
>>> >>
>>> >> This change by itself isn't that big. Whenever you see a template
>>>error
>>> >> about
>>> >> no overloads for floats and doubles, you know what it is. The
>>>problem is
>>> >> that
>>> >> this error adds up to the porting needs for software to get from Qt
>>>4 to
>>> >> Qt 5
>>> >> and this is likely to be widespread. It will appear on the first
>>> >> compilation
>>> >> and you have to fix them immediately, including changing certain data
>>> >> structures, in order to continue the porting.
>>> >
>>> > Yes, some template code will break.
>>> >
>>> >>> Choosing float has my vote, as it'll use a lot less memory and is
>>>the
>>> >>> right thing in the common case. It also directly maps to OpenGL
>>>types.
>>> >>> Let's rather use double explicitly where needed.
>>> >>
>>> >> I'm not disagreeing. I'm just giving more information for the
>>> >> decision-making.
>>> >>
>>> >> I completely agree we should choose one or the other, not change
>>> >> according to
>>> >> platform. Accordingly, QT_COORD_TYPE should be removed to.
>>> >
>>> > Yes.
>>> >
>>> >> Which one to choose, I haven't made up my mind.
>>> >
>>> > We will in any case break either code written for x86 or code written
>>>for
>>> > arm/devices.
>>> >
>>> > Given that using  float everywhere makes most of our data structures
>>> > smaller, matches with OpenGL, as well as significantly improves
>>> > performance on many systems makes me believe we should go for float.
>>>
>>> There's one case I don't think anyone has mentioned yet, that being
>>>where
>>> user code has adopted qreal for their own purposes (for better or
>>>worse).
>>> In such cases, the code may only ever have been intended for desktop
>>>(many
>>> apps are written just for desktop), so in such cases I would find it
>>> reasonable that a qreal == double assumption might hold. Regardless of
>>> whether that is smart or not, I could easily believe there would be code
>>> out there doing that with an implicit or explicit assumption that it
>>>will
>>> equate to at least a double.
>>
>>Then they can do s/qreal/double/g  in their code.
>>
>>>
>>> With that in mind, is there anything against making qreal deprecated for
>>> Qt5.0 and anywhere qreal appears in the Qt API, explicitly change it to
>>> float instead?  That would allow qreal to remain with the behaviour it
>>>has
>>> now for user code, but all Qt code would switch over to using float as
>>>has
>>> been indicated as desirable in this discussion thread. You'd still get
>>> compiler warnings, etc. about type mismatches where relevant. Anyone
>>>see a
>>> problem with this approach? It would seem to be more source compatible
>>>than
>>> simply changing qreal to float.
>>
>>I was about to suggest exactly the same.
>>Then I tought about Qt has its own typedef for quintptr and quint64 and
>>what
>>not, so we could as well keep qreal.
>>(But i'm far from being opposed, but then we can also deprecate all the
>>other
>>ones)
>
> Deprecating qreal and making things explicit in Qt is IMO a good idea. We
> don't need any typedef, as float and double are actually the same size on
> all our supported platforms (4 and 8 bytes).
>

Just adding a +1 for this.

I think changing qreal to float will result in subtle porting bugs:
like when a Qt4 QDataStream (a double) is read by Qt5 (which is now
suddenly float).

Girish



More information about the Development mailing list