[Development] Changing qreal to a float

BRM bm_witness at yahoo.com
Wed Feb 15 17:29:55 CET 2012


> From: "lars.knoll at nokia.com" <lars.knoll at nokia.com>

> 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).

+1.

Ben




More information about the Development mailing list