[vtk-developers] Introducing (optional) C++11 features in VTK

Bill Lorensen bill.lorensen at gmail.com
Mon Aug 18 21:44:02 EDT 2014


+1
On Aug 18, 2014 8:26 PM, "Matt McCormick" <matt.mccormick at kitware.com>
wrote:

> VTK_OVERRIDE would be nice, and it would be nice to macros that are
> similar to ITK.  Currently there is
>
>   ITK_OVERRIDE
>   ITK_NOEXCEPT
>   ITK_NULLPTR
>
>
> http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Core/Common/include/itkMacro.h;h=aa4d40d7f5042eaf3c696af469d4cf0848239935;hb=HEAD#l121
>
>
> Thanks,
> Matt
>
> On Mon, Aug 18, 2014 at 7:25 PM, Marcus D. Hanwell
> <marcus.hanwell at kitware.com> wrote:
> > I am with David Gobbi and Ken. It would be a simple search and replace
> > once support for pre-C++11 compilers were dropped and the potential
> > for unintended consequences is too great. Glad to see there is general
> > support, I should have included more on my reasoning, but didn't want
> > to go into too much detail on implementation if there was little
> > support for it.
> >
> > It sounds like there is, nullptr is definitely another piece of low
> > hanging fruit. There is lots more that would be great to use, the
> > language is evolving and it is important that we take advantage of the
> > parts that make sense.
> >
> > Marcus
> >
> > On Mon, Aug 18, 2014 at 6:43 PM, David Gobbi <david.gobbi at gmail.com>
> wrote:
> >> Yes, I also believe that using "#define override" has the potential to
> >> cause problems.  Let's say that "override" appears as a variable
> >> somewhere in code that someone brought into VTK and tested with a
> >> C++11 compiler (this is legal, since "override" is not a keyword).
> >> Then someone else tries compiling that code on C++03 where the
> >> "#define override" is active.  All of a sudden, "override" is replaced
> >> by nothing anywhere it is used as a variable (or as any other kind of
> >> identifier).
> >>
> >>
> >> On Mon, Aug 18, 2014 at 4:29 PM, Andrew Maclean
> >> <andrew.amaclean at gmail.com> wrote:
> >>> Hi Ken
> >>>
> >>> Good point, thanks for that.
> >>>
> >>> Andrew
> >>>
> >>>
> >>> On Tue, Aug 19, 2014 at 8:25 AM, Moreland, Kenneth <kmorel at sandia.gov>
> >>> wrote:
> >>>>
> >>>> +1 for me too.
> >>>>
> >>>> However, my vote is actually to introduce things like VTK_OVERRIDE and
> >>>> VTK_FINAL until pre-C++11 compilers get abandoned. I find it
> disconcerting
> >>>> when libraries try to get cute with changing the behavior of (or
> trying to
> >>>> emulate) keywords with preprocessor macros. It can be pretty
> confusing when
> >>>> something goes wrong, and good luck if you have to use two separate
> projects
> >>>> together that both tried to define preprocessor macros with different
> >>>> implementations.
> >>>>
> >>>> -Ken
> >>>>
> >>>>
> >>>> From: Andrew Maclean <andrew.amaclean at gmail.com>
> >>>> Reply-To: "andrew.amaclean at gmail.com" <andrew.amaclean at gmail.com>
> >>>> Date: Monday, August 18, 2014 4:09 PM
> >>>> To: VTK Developers <vtk-developers at vtk.org>, "Marcus D. Hanwell"
> >>>> <marcus.hanwell at kitware.com>, Ben Boeckel <ben.boeckel at kitware.com>,
> Sean
> >>>> McBride <sean at rogue-research.com>
> >>>> Subject: [EXTERNAL] Re: [vtk-developers] Introducing (optional) C++11
> >>>> features in VTK
> >>>>
> >>>> +1! ... actually: ++1 :-)
> >>>>
> >>>> I would support this. To keep VTK relevant we need to be introducing
> these
> >>>> features. Especially features like nullptr, unique_ptr etc.
> >>>>
> >>>> But I would not be happy at introducing more VTK defines like
> VTK_OVERRIDE
> >>>> and VTK_FINAL - unless absolutely necessary. I much prefer Sean's
> idea of
> >>>> using a modernise tool.
> >>>>
> >>>> Regards
> >>>>    Andrew
> >>>>
> >>>>
> >>>> On Tue, Aug 19, 2014 at 7:05 AM, <vtk-developers-request at vtk.org>
> wrote:
> >>>>>
> >>>>>
> >>>>> ---------- Forwarded message ----------
> >>>>> From: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>
> >>>>> To: VTK Developers <vtk-developers at vtk.org>
> >>>>> Cc:
> >>>>> Date: Mon, 18 Aug 2014 13:45:37 -0400
> >>>>> Subject: [vtk-developers] Introducing (optional) C++11 features in
> VTK
> >>>>> Hi,
> >>>>>
> >>>>> As we move forward, it would be great to get a feeling for people's
> >>>>> thoughts about integrating some components of C++11 optionally. So if
> >>>>> C++11 is available/enabled, there are several features we could
> enable
> >>>>> optionally at compile time.
> >>>>>
> >>>>> A very simple example is that of the new override keyword, that is
> >>>>> used to indicate that a member function is overriding a virtual
> >>>>> function. Using this can avoid mistakes where the signature changes
> >>>>> and derived classes are missed. It can be defined in a header (empty
> >>>>> on old compilers, override with recent compilers). Final is similar,
> >>>>> indicating that the virtual function cannot be overridden in derived
> >>>>> classes.
> >>>>>
> >>>>> This would introduce changes to the VTK coding style, where we now
> use
> >>>>> virtual for all virtual functions (first declaration, or subsequent
> >>>>> overrides). We could introduce this gradually for new code, even
> >>>>> having one or two dashboards compiling this way would help spot
> simple
> >>>>> errors such as an incorrect signature not actually overriding a
> >>>>> function, but in fact declaring a new virtual for example.
> >>>>>
> >>>>> In these cases I would suggest simple naming, so VTK_OVERRIDE and
> >>>>> VTK_FINAL would be used where a C++11 only code would simply use the
> >>>>> new keywords.
> >>>>>
> >>>>> Thoughts, objections? There are lots of other features, and I know it
> >>>>> will be a while before we can use them all but it would be great to
> >>>>> make a start with some of the easier ones that can improve code
> >>>>> quality with little overhead.
> >>>>>
> >>>>> Marcus
> >>>>>
> >>>>>
> >>>>>
> >>>>> ---------- Forwarded message ----------
> >>>>> From: Ben Boeckel <ben.boeckel at kitware.com>
> >>>>> To: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>
> >>>>> Cc: VTK Developers <vtk-developers at vtk.org>
> >>>>> Date: Mon, 18 Aug 2014 14:21:56 -0400
> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
> in
> >>>>> VTK
> >>>>> On Mon, Aug 18, 2014 at 13:45:37 -0400, Marcus D. Hanwell wrote:
> >>>>> > Thoughts, objections? There are lots of other features, and I know
> it
> >>>>> > will be a while before we can use them all but it would be great to
> >>>>> > make a start with some of the easier ones that can improve code
> >>>>> > quality with little overhead.
> >>>>>
> >>>>> What about "= delete" for removing default assignment and copy
> >>>>> constructors?
> >>>>>
> >>>>> --Ben
> >>>>>
> >>>>>
> >>>>>
> >>>>> ---------- Forwarded message ----------
> >>>>> From: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>
> >>>>> To: Ben Boeckel <ben.boeckel at kitware.com>
> >>>>> Cc: VTK Developers <vtk-developers at vtk.org>
> >>>>> Date: Mon, 18 Aug 2014 14:29:10 -0400
> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
> in
> >>>>> VTK
> >>>>> On Mon, Aug 18, 2014 at 2:21 PM, Ben Boeckel <
> ben.boeckel at kitware.com>
> >>>>> wrote:
> >>>>> > On Mon, Aug 18, 2014 at 13:45:37 -0400, Marcus D. Hanwell wrote:
> >>>>> >> Thoughts, objections? There are lots of other features, and I
> know it
> >>>>> >> will be a while before we can use them all but it would be great
> to
> >>>>> >> make a start with some of the easier ones that can improve code
> >>>>> >> quality with little overhead.
> >>>>> >
> >>>>> > What about "= delete" for removing default assignment and copy
> >>>>> > constructors?
> >>>>> >
> >>>>> Certainly, I think we should start out simple and then build it out.
> >>>>> If we have prototypes for a few of the most useful features that can
> >>>>> easily be encapsulated in compile time logic that will degrade to
> >>>>> C++98 that would be great.
> >>>>>
> >>>>> Marcus
> >>>>>
> >>>>>
> >>>>>
> >>>>> ---------- Forwarded message ----------
> >>>>> From: "Sean McBride" <sean at rogue-research.com>
> >>>>> To: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>, "VTK
> Developers"
> >>>>> <vtk-developers at vtk.org>
> >>>>> Cc:
> >>>>> Date: Mon, 18 Aug 2014 16:50:12 -0400
> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
> in
> >>>>> VTK
> >>>>> On Mon, 18 Aug 2014 13:45:37 -0400, Marcus D. Hanwell said:
> >>>>>
> >>>>> >As we move forward, it would be great to get a feeling for people's
> >>>>> >thoughts about integrating some components of C++11 optionally. So
> if
> >>>>> >C++11 is available/enabled, there are several features we could
> enable
> >>>>> >optionally at compile time.
> >>>>>
> >>>>> +1 from me.
> >>>>>
> >>>>> nullptr is another one that can be made to work even on older
> compilers
> >>>>> with some #define glue.
> >>>>>
> >>>>> Instead of creating a 'VTK_OVERRIDE', we could also use 'override'
> as if
> >>>>> we required C++11 and "#define override /* nothing */" as
> appropriate.  Then
> >>>>> when C++11 really is the minimun requirement no big find/replace is
> >>>>> required.  Just a thought.
> >>>>>
> >>>>> PS: I already have dashboards building as C++11 and C++14.
> >>>>>
> >>>>> Cheers,
> >>>>>
> >>>>> --
> >>>>> ____________________________________________________________
> >>>>> Sean McBride, B. Eng                 sean at rogue-research.com
> >>>>> Rogue Research                        www.rogue-research.com
> >>>>> Mac Software Developer              Montréal, Québec, Canada
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> ---------- Forwarded message ----------
> >>>>> From: "Sean McBride" <sean at rogue-research.com>
> >>>>> To: "Marcus D. Hanwell" <marcus.hanwell at kitware.com>, "VTK
> Developers"
> >>>>> <vtk-developers at vtk.org>
> >>>>> Cc:
> >>>>> Date: Mon, 18 Aug 2014 17:05:38 -0400
> >>>>> Subject: Re: [vtk-developers] Introducing (optional) C++11 features
> in
> >>>>> VTK
> >>>>> On Mon, 18 Aug 2014 16:50:12 -0400, Sean McBride said:
> >>>>>
> >>>>> >nullptr is another one that can be made to work even on older
> compilers
> >>>>> >with some #define glue.
> >>>>> >
> >>>>> >Instead of creating a 'VTK_OVERRIDE', we could also use 'override'
> as if
> >>>>> >we required C++11 and "#define override /* nothing */" as
> appropriate.
> >>>>> >Then when C++11 really is the minimun requirement no big
> find/replace is
> >>>>> >required.  Just a thought.
> >>>>>
> >>>>> I hit send too fast...
> >>>>>
> >>>>> I also wanted to suggest looking at the clang-modernize tool, which
> is "a
> >>>>> standalone tool used to automatically convert C++ code written
> against old
> >>>>> standards to use features of the newest C++ standard".
> >>>>>
> >>>>> <http://clang.llvm.org/extra/clang-modernize.html>
> >>>>>
> >>>>> Specifically, it can be used to automatically add 'override' and
> convert
> >>>>> to 'nullptr':
> >>>>>
> >>>>> <http://clang.llvm.org/extra/AddOverrideTransform.html>
> >>>>> <http://clang.llvm.org/extra/UseNullptrTransform.html>
> >>>>>
> >>>>> Cheers,
> >> _______________________________________________
> >> Powered by www.kitware.com
> >>
> >> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> >>
> >> Follow this link to subscribe/unsubscribe:
> >> http://public.kitware.com/mailman/listinfo/vtk-developers
> >>
> > _______________________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> >
> > Follow this link to subscribe/unsubscribe:
> > http://public.kitware.com/mailman/listinfo/vtk-developers
> >
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtk-developers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20140818/b8976ffa/attachment-0002.html>


More information about the vtk-developers mailing list