Thread: [Gpsbabel-code] Suggested floor for C++11 features?
Brought to you by:
robertl
From: Robert L. <rob...@gm...> - 2013-01-27 04:07:47
|
TL;DR; what is the oldest C++ that actually matters in the real world? I recently tracked down a bug that was a glorified version of class foo { public: foo() : latitude(0), longitude(0) {} double latitude; double longitude; double altitude; }; The problem is "easy" to see with three members. With several dozen, it's not. No matter how meticulous you are, you're GOING to forget a default initializer somewhere, whether you do it in the ctor or in the initializer. C++0x's N2756 extension, proposed in '08 to formalize work that was popular before this, implements the "obvious" syntax. class foo { public: double latitude = 0; double longitude = 0; double altitude = invalid_alt; }; (Never mind that "double" is the wrong type for alt for now. Work with me on keeping an obvious example.) My read of the http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport is that GCC doesn't support this until 4.7 which was released only last fall and isn't supported at all by MSVC. That's probably too recent to actually require for minor syntactic candy, so I have to ask the question about what parts of C++11 are fair game? Since this is the kind of code I'm about to write a lot of, it's worth bulletproofing it while I'm touching it. N2431, N2437, and a few others have some nice things going for them. I understand that MS is (finally) aggressively tracking the standard language but frankly, I'd rather do builds with a cross Mingw-targeted GCC or LLVM than track their tools and we have extremely little developer activity from MSVC developers in our midst. OS/X ships with a pretty old G++ (4.2) but a pretty new Clang that's aggressively targeting the new language. On OS/X, there's no downfall to simply requiring LLVM as it's part of the native tools. How pervasive is LLVM on systems of active GPSBabel developers? Telling me that you're porting GPSBabel to VMS on Arduino for your commercial project and require defect compatibility with CFront will only get you mocked and derided. Real World votes from people contributing patches count a lot more. How much C++11 can we sensibly take advantage of? |
From: tsteven4 <tst...@gm...> - 2013-01-27 15:09:15
|
Robert, CentOS 6.3 has g++ (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) The CentOS repositories do not have clang or llvm. clang/llvm are available from third party repositories, e.g. epel has 2.8-14.el6. Using third party repositories may not be acceptable to some developers, http://wiki.centos.org/AdditionalResources/Repositories warns of possible issues with using third party repositories. Personally I crossed this bridge to get qtwebkit and qt-mobility which I probably needed for the gpsbabel gui. However, I try not to walk across that bridge too often. I haven't tried to build clang/llvm, but building gcc can be difficult. I have a script to build 4.4.7 gcc/g++ mingw cross compiler on snow leopard. There is one install bug that I know of, and I haven't been able to run check (due to missing tools, which have dependencies on other missing packages ...). It took a lot of trial and error to get this far, I think we would lose a lot of contributors if we require them to build their own compiler (or qt). I have been a bit worried about this since you started referring to the C++11 standard, that doesn't give a lot of time to get from the standard to the distributions. Steve On 1/26/2013 9:07 PM, Robert Lipe wrote: > TL;DR; what is the oldest C++ that actually matters in the real world? > > I recently tracked down a bug that was a glorified version of > > class foo { > public: > foo() : > latitude(0), > longitude(0) {} > double latitude; > double longitude; > double altitude; > }; > > The problem is "easy" to see with three members. With several dozen, > it's not. No matter how meticulous you are, you're GOING to forget a > default initializer somewhere, whether you do it in the ctor or in the > initializer. > > C++0x's N2756 extension, proposed in '08 to formalize work that was > popular before this, implements the "obvious" syntax. > > class foo { > public: > double latitude = 0; > double longitude = 0; > double altitude = invalid_alt; > }; > > (Never mind that "double" is the wrong type for alt for now. Work > with me on keeping an obvious example.) > > My read of the http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport > is that GCC doesn't support this until 4.7 which was released only > last fall and isn't supported at all by MSVC. That's probably too > recent to actually require for minor syntactic candy, so I have to ask > the question about what parts of C++11 are fair game? Since this is > the kind of code I'm about to write a lot of, it's worth > bulletproofing it while I'm touching it. N2431, N2437, and a few > others have some nice things going for them. > > I understand that MS is (finally) aggressively tracking the standard > language but frankly, I'd rather do builds with a cross Mingw-targeted > GCC or LLVM than track their tools and we have extremely little > developer activity from MSVC developers in our midst. > > OS/X ships with a pretty old G++ (4.2) but a pretty new Clang that's > aggressively targeting the new language. On OS/X, there's no downfall > to simply requiring LLVM as it's part of the native tools. How > pervasive is LLVM on systems of active GPSBabel developers? > > Telling me that you're porting GPSBabel to VMS on Arduino for your > commercial project and require defect compatibility with CFront will > only get you mocked and derided. Real World votes from people > contributing patches count a lot more. How much C++11 can we > sensibly take advantage of? > > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnnow-d2d > > > _______________________________________________ > Gpsbabel-code mailing list http://www.gpsbabel.org > Gps...@li... > https://lists.sourceforge.net/lists/listinfo/gpsbabel-code |
From: Jason S. <rai...@ta...> - 2013-01-27 15:18:40
|
On 01/27/2013 10:09 AM, tsteven4 wrote: > Robert, > > CentOS 6.3 has > g++ (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) > > The CentOS repositories do not have clang or llvm. clang/llvm are > available from third party repositories, e.g. epel has 2.8-14.el6. Using > third party repositories may not be acceptable to some developers, > http://wiki.centos.org/AdditionalResources/Repositories warns of > possible issues with using third party repositories. Personally I > crossed this bridge to get qtwebkit and qt-mobility which I probably > needed for the gpsbabel gui. However, I try not to walk across that > bridge too often. > > I haven't tried to build clang/llvm, but building gcc can be difficult. > I have a script to build 4.4.7 gcc/g++ mingw cross compiler on snow > leopard. There is one install bug that I know of, and I haven't been > able to run check (due to missing tools, which have dependencies on > other missing packages ...). It took a lot of trial and error to get > this far, I think we would lose a lot of contributors if we require them > to build their own compiler (or qt). > > I have been a bit worried about this since you started referring to the > C++11 standard, that doesn't give a lot of time to get from the standard > to the distributions. I concur - although I don't really submit patches. The boxes I use gpsbabel on are mostly gcc 4.2.1 (FreeBSD boxen). CentOS 5 ships with 4.1.2. CentOS 6 ships with 4.4.6 as noted above. Ubuntu 12.04 LTS has GCC 4.6.3, Ubuntu 12.10 has 4.7.2, and 10.04 LTS has 4.4.3. I would think you wouldn't want to target anything more recent than 4.1.2 personally - CentOS/RHEL/OEL/SL 5 still has a very large installed base, and I suspect it's the type of user you see a good amount of. Jason |
From: Robert L. <rob...@gm...> - 2013-01-27 16:03:48
|
Its interesting to hear you guys say the typical developer is using a relatively old, stodgy distro and not a current Ubuntu or Fedora desktop. I'd have guessed the rackmount hosting guys would be on systems like that, but figured developers would stay more current with the industry. So its interesting that its neither Mac or Windows holding the train in this one. Still, it s no big deal. The features I was considering really were just niceties. Qt fills the holes for us for things like threads out if the boost mess. C++03 it is for the foreseeable future. Well treat any 11isms the way we treated c99isms for years, as bugs. Thanx, guys. On Jan 27, 2013 9:19 AM, "Jason Slagle" <rai...@ta...> wrote: > > > On 01/27/2013 10:09 AM, tsteven4 wrote: > > Robert, > > > > CentOS 6.3 has > > g++ (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) > > > > The CentOS repositories do not have clang or llvm. clang/llvm are > > available from third party repositories, e.g. epel has 2.8-14.el6. Using > > third party repositories may not be acceptable to some developers, > > http://wiki.centos.org/AdditionalResources/Repositories warns of > > possible issues with using third party repositories. Personally I > > crossed this bridge to get qtwebkit and qt-mobility which I probably > > needed for the gpsbabel gui. However, I try not to walk across that > > bridge too often. > > > > I haven't tried to build clang/llvm, but building gcc can be difficult. > > I have a script to build 4.4.7 gcc/g++ mingw cross compiler on snow > > leopard. There is one install bug that I know of, and I haven't been > > able to run check (due to missing tools, which have dependencies on > > other missing packages ...). It took a lot of trial and error to get > > this far, I think we would lose a lot of contributors if we require them > > to build their own compiler (or qt). > > > > I have been a bit worried about this since you started referring to the > > C++11 standard, that doesn't give a lot of time to get from the standard > > to the distributions. > > I concur - although I don't really submit patches. > > The boxes I use gpsbabel on are mostly gcc 4.2.1 (FreeBSD boxen). > > CentOS 5 ships with 4.1.2. CentOS 6 ships with 4.4.6 as noted above. > > Ubuntu 12.04 LTS has GCC 4.6.3, Ubuntu 12.10 has 4.7.2, and 10.04 LTS > has 4.4.3. > > I would think you wouldn't want to target anything more recent than > 4.1.2 personally - CentOS/RHEL/OEL/SL 5 still has a very large installed > base, and I suspect it's the type of user you see a good amount of. > > Jason > > > > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnnow-d2d > _______________________________________________ > Gpsbabel-code mailing list http://www.gpsbabel.org > Gps...@li... > https://lists.sourceforge.net/lists/listinfo/gpsbabel-code > |
From: Jason S. <rai...@ta...> - 2013-01-27 22:30:40
|
It's not so much development machines but other non developer users that I see as the issue. It might also affect inclusion in distributions if they can't build it using the standard toolchain. Jason On 01/27/2013 11:03 AM, Robert Lipe wrote: > Its interesting to hear you guys say the typical developer is using a > relatively old, stodgy distro and not a current Ubuntu or Fedora > desktop. I'd have guessed the rackmount hosting guys would be on > systems like that, but figured developers would stay more current with > the industry. So its interesting that its neither Mac or Windows holding > the train in this one. > > Still, it s no big deal. The features I was considering really were just > niceties. Qt fills the holes for us for things like threads out if the > boost mess. C++03 it is for the foreseeable future. Well treat any > 11isms the way we treated c99isms for years, as bugs. |
From: Robert L. <rob...@gm...> - 2013-01-27 23:10:48
|
Non developers install code built by others. This affects ONLY developers. (Let's face it, we don't have that many.) CentOS5 was released in April, 2007. That means they had to freeze their toolchains probably in 2006 or maybe even 2005. It is extremely unlikely that Centos would be building their 2013 distributions on CentOS5. Nor does it seem likely that they'd try to build a 2013-era GPSBabel and try to release it to such an old distro. Looking at our mailing list traffic, Steve seems to be 3 of our 4 Centos users. As Steve is an important developer, I'm interested in not tormenting him. I'm surprised they're so far behind the curve, but that's fine. There is nothing in the newer language that's more than niceties for us and restraining ourselves to C++03 isn't that onerous. Moving on... In related news, I probably just broke the build for some developers by submitting the first code that requires QtCore. Right now it's propped up pretty precariously and I don't expect that to continue. It just gives us an easy way to work out autoconf/Makefile/build issues while the dependency is small. On Sun, Jan 27, 2013 at 4:30 PM, Jason Slagle <rai...@ta...> wrote: > It's not so much development machines but other non developer users that I > see as the issue. > > It might also affect inclusion in distributions if they can't build it > using the standard toolchain. > > Jason > > > On 01/27/2013 11:03 AM, Robert Lipe wrote: > >> Its interesting to hear you guys say the typical developer is using a >> relatively old, stodgy distro and not a current Ubuntu or Fedora >> desktop. I'd have guessed the rackmount hosting guys would be on >> systems like that, but figured developers would stay more current with >> the industry. So its interesting that its neither Mac or Windows holding >> the train in this one. >> >> Still, it s no big deal. The features I was considering really were just >> niceties. Qt fills the holes for us for things like threads out if the >> boost mess. C++03 it is for the foreseeable future. Well treat any >> 11isms the way we treated c99isms for years, as bugs. >> > |
From: Greg T. <gd...@ir...> - 2013-01-28 17:53:22
|
Robert Lipe <rob...@gm...> writes: > Non developers install code built by others. This affects ONLY developers. > (Let's face it, we don't have that many.) Not quite true - some systems have source-based packaging, where things get built even if you aren't a "developer". One issue in gcc is that the move to GPL3 delayed a lot of BSD systems From updating. I'm unclear on freebsd/openbsd status, but if the code works with gcc 4.5.3, it should be ok on NetBSD 6. FWIW, NetBSD 6 (the current release) has Using built-in specs. COLLECT_GCC=cc Target: i486--netbsdelf Configured with: /usr/src2/tools/gcc/../../external/gpl3/gcc/dist/configure --target=i486--netbsdelf --enable-long-long --enable-threads --with-bugurl=http://www.NetBSD.org/Misc/send-pr.html --with-pkgversion='NetBSD nb2 20111202' --enable-__cxa_atexit --with-arch=i486 --with-tune=nocona --with-mpc=/var/obj/mknative/i386/usr/src2/destdir.i386/usr --with-mpfr=/var/obj/mknative/i386/usr/src2/destdir.i386/usr --with-gmp=/var/obj/mknative/i386/usr/src2/destdir.i386/usr --enable-tls --disable-multilib --disable-symvers --disable-libstdcxx-pch --build=x86_64-unknown-netbsd5.99.56 --host=i486--netbsdelf Thread model: posix gcc version 4.5.3 (NetBSD nb2 20110806) and NetBSD 5 has Using built-in specs. Target: i386--netbsdelf Configured with: /usr/src/tools/gcc/../../gnu/dist/gcc4/configure --enable-long-long --disable-multilib --enable-threads --disable-symvers --build=x86_64-unknown-netbsd4.99.72 --host=i386--netbsdelf --target=i386--netbsdelf --enable-__cxa_atexit Thread model: posix gcc version 4.1.3 20080704 prerelease (NetBSD nb3 20111107) which is arguably old, but that's the result of the GPL3 kerfluffle. |