Slashdot Mirror


GCC 4.9 Coming With Big New Features

jones_supa writes "When GCC 4.9 is released in 2014 it will be coming in hot on new features with a large assortment of improvements and new functionality for the open-source compiler. Phoronix provides a recap of some of the really great features of this next major compiler release from the Free Software Foundation. For a quick list: OpenMP 4.0, Intel Cilk Plus multi-threading support, Intel Bay Trail and Silvermont support, NDS32 port, Undefined Behavior Sanitizer, Address Sanitizer, ADA and Fortran updates, improved C11 / C++11 / C++14, better x86 intrinsics, refined diagnostics output. Bubbling under are still: Bulldozer 4 / Excavator support, OpenACC, JIT compiler, disabling Java by default."

43 of 181 comments (clear)

  1. A big improvement indeed by Anonymous Coward · · Score: 3, Insightful

    New in this release: lots of stuff most people don't care about, some minor improvements and oh yeah we gave up on Java.

    1. Re:A big improvement indeed by Joce640k · · Score: 2

      we gave up on Java.

      That's not news?

      --
      No sig today...
    2. Re:A big improvement indeed by cduffy · · Score: 4, Insightful

      You only don't care about sanitizing standard-undefined behavior if you don't care about bugs.

      That one's a Really, Really Big Deal.

    3. Re:A big improvement indeed by Anonymous Coward · · Score: 3, Interesting

      New in this release: [...] we gave up on Java.

      Well, actually it's the other way around: Java gave up on them - meaning that actual development of GCJ moved from GCC to OpenJDK.
      Not that i understand what it means for GCC, but i understand that it does not mean much for Java.

    4. Re:A big improvement indeed by DuckDodgers · · Score: 4, Interesting

      No, it is not. But GCJ Java-to-native compiling didn't result in particularly fast Java code. That's one of the major reasons developers and enterprises ignored GCJ in the first place.

    5. Re:A big improvement indeed by larry+bagina · · Score: 3, Funny

      I care. Or I will, in 5 years, when it's finally available in debian.

      --
      Do you even lift?

      These aren't the 'roids you're looking for.

    6. Re:A big improvement indeed by Hizonner · · Score: 5, Insightful

      I assume you can list all the undefined behaviors in the C standard off the top of your head, yes? And you've never actually written a line of code with an error in it, right?

      I've spent a lot of time cleaning up after security bugs written by people with that attitude. None of them could make mistakes either. Maybe you guys should form a club, so the rest of us can identify the special beings walking among us.

    7. Re:A big improvement indeed by aaaaaaargh! · · Score: 2

      Where do such negative comments come from? Have programers generally left /.? :-/

      I for one welcome gcc 4.9, as it allows me to use the full Ada 2012 language. Good job!

    8. Re:A big improvement indeed by blueg3 · · Score: 2

      If you don't care about safety and error checking, multithreading, Atom SoCs, or C++11... what sort of new features are you really expecting in a compiler. That touches pretty much all the major functionality of a compiler.

    9. Re:A big improvement indeed by alex67500 · · Score: 2

      No it's a relief. Hopefully Sun will follow suit soon...

    10. Re:A big improvement indeed by Anonymous Coward · · Score: 3, Interesting

      Frankly I neither know nor care if your perception is that you have spent a lot of time cleaning up after security bugs, but the fact that you don't understood what my attitude is makes it fairly implausible.

      For one thing, a lot of shops do not permit a drop into naked API calls, and areas of concern are often abstracted out. And even if they a developer and tests should be checking the documentation for that API. But that's all irrelevant. My point was that this is mainly useful on programs that already have flaws that should not be waiting either for Your Highness or gcc 4.9 to percolate into all of the used OSs.

      If a bleeding edge compiler release is relevant to your security NOW you have problems.

    11. Re:A big improvement indeed by Anonymous Coward · · Score: 2, Funny

      > Maybe you guys should form a club, so the rest of us can identify the special beings walking among us.

      http://www.openbsd.org

      there you go.

    12. Re:A big improvement indeed by Darinbob · · Score: 3, Interesting

      No one programs anymore. All we do is link together pre-built libraries and frameworks and wrap it all in XML. Not sure who actually codes those libraries or where they come from, but the prevailing theory is that once a year the senior developers hike to the top of Mount Olympus and wrestle them away from the gods.

  2. ADA? by Black+Parrot · · Score: 4, Informative

    "Ada" is the name of a person, and the language.

    "ADA" is the Americans with Disabilities Act, or the American Dental Association.

    --
    Sheesh, evil *and* a jerk. -- Jade
  3. Can we please stop mass-linking Phoronix? by Anonymous Coward · · Score: 5, Insightful

    For God's sake, that's *THIRTEEN* (13) links to Phoronix!
    Pointing to a couple of ML threads or to the 4.9 changelog would've been more than enough. http://gcc.gnu.org/gcc-4.9/changes.html

    1. Re:Can we please stop mass-linking Phoronix? by Anonymous Coward · · Score: 2, Informative

      Self-linking is the modus operandi of Phoronix. It is a link farm, after all.

      All you will get is a mass of links, whether you click through to TFA or not. At least this way there's no utility in clicking through.

  4. Looks like they are porting Clang features... by gnasher719 · · Score: 3, Insightful

    The whole article really reads quite fanboyish / alternatively GCC has hired a marketing department. But it looks really lame when you talk about exiting new features, and you just copied what Clang had before.

    1. Re:Looks like they are porting Clang features... by Anonymous Coward · · Score: 5, Insightful

      Superior backend, coming up to par with Clang on the frontend, what's not to love?

      Frankly, the BSD licenses appear to be a failure psychologically. The proponents of BSD-licensed software go apeshit when GPL-licensed software reuses their code, but are ok if the stuff disappears in proprietary forks.

      You can see this, for example, with LibreOffice/OpenOffice: every LibreOffice release announcement draws ire from the OpenOffice crowd (well, particularly one OpenOffice developer) because the latter feels their code has been ripped off.

      There has been a lot of that going on with OpenBSD and FreeBSD as well, but it's grown a bit more quiet in recent years.

      Now we have the same with Clang/GCC.

      If you don't want to have your code relicensed under different licenses, use a Copyleft license. If you want to have your code relicensed under different licenses, stop complaining when somebody actually does exactly that.

    2. Re:Looks like they are porting Clang features... by mvdwege · · Score: 4, Insightful

      Wait, what, Clang now supports other languages than C-derivatives, like Ada and Fortran?

      --
      "I know I will be modded down for this": where's the option '-1, Asking for it'?
    3. Re:Looks like they are porting Clang features... by Anonymous Coward · · Score: 3, Interesting

      Yep. They're also stealing OMP4.0 from Clang (which got OMP3.1 just a month or so ago, while GCC had it since 4.7) and Cilk (which is not in Clang at all, though people are working on 3rd party extension)

      The whole post really reads quite trollish / alternatively Clang has hired black PR department.

    4. Re:Looks like they are porting Clang features... by Anonymous Coward · · Score: 2

      The problem with code re-usage to GPL projects is that it is so much more complicated to copy features back.
      If a proprietary project with closed source uses the BSD licensed project but add nifty functions it is just a matter of writing similar functions of your own.
      When a GNU licensed project grabs some BSD code and improves upon you can't just write code that does the same, because if you do then it is very likely that your code will end up looking very much like the GNU licensed implementation and people will find it less plausible that you didn't look at the other source.

      Also, it is pretty clear that the intention of BSD licensed code is to have an open source project that is free to use. While grabbing it and releasing it under a less free open source license is completely legal it is clearly a dickish move. Anyone who isn't a zealot would just add their changes under the original license to honor the intentions of the original author.

    5. Re:Looks like they are porting Clang features... by DuckDodgers · · Score: 3, Insightful

      You are re-stating the original argument about free software that has been done to death on the internet.

      To the BSD folks, they want to write software that is free as in free beer. You can take it, and do whatever you want with it. Drink it, dump it in the trash, give it to your friends, sell it. Free as in Freedom of the user

      To the GPL or Free Software Foundation folks, they want to write software that is free as in free speech. You can copy it, and distribute it, but you can't restrict other people's rights to copy it and distribute it. Just like I can't hand out a copy of the US Constitution or a speech by Abraham Lincoln and forbid other people from sharing it or publishing a copy. Free as in Freedom of the software

      You may prefer the BSD way, and that's fine, but "who isn't a zealot" is out of line. Having a different set of priorities does not make one a dick. Blatantly copying code under one license to the other is a dickish move, but re-engineering from one to the other is perfectly legitimate. And yes, I'm in the FSF camp.

    6. Re:Looks like they are porting Clang features... by Anonymous Coward · · Score: 2, Insightful

      To the GPL or Free Software Foundation folks, they want to write software that is free as in free speech. You can copy it, and distribute it, but you can't restrict other people's rights to copy it and distribute it.

      Uhm, the entire point of GPL is that you can restrict others right to copy it and distribute it.

    7. Re:Looks like they are porting Clang features... by Anonymous Coward · · Score: 2, Interesting

      The 2-clause BSD license (which is the one used nowadays) is 7 lines of natural English (excluding the disclaimer) and people still can't understand it...

      You can't take BSD code and change it's license.

      Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

      IIRC a Linux dev though it was possible and did so with an OpenBSD piece of code. Some OpenBSD devs complained and the license was reverted to the original one. End of the "shitstorm."

    8. Re:Looks like they are porting Clang features... by gnasher719 · · Score: 3, Insightful

      To the GPL or Free Software Foundation folks, they want to write software that is free as in free speech. You can copy it, and distribute it, but you can't restrict other people's rights to copy it and distribute it. Just like I can't hand out a copy of the US Constitution or a speech by Abraham Lincoln and forbid other people from sharing it or publishing a copy. Free as in Freedom of the software

      Yes, there is always the "free as in free speech" high horse, but the fact is that (a) you can't legally use GPL licensed code in a BSD project, and (b) when licensed code is moved to a BSD project and modified, you can't legally move the changes back to the BSD project.

      So these people's view of "free" is something that I can only call perverted.

    9. Re:Looks like they are porting Clang features... by Anonymous Coward · · Score: 2, Informative

      The following quote is the complete text of the 2-clause BSD license (sans the disclaimer, which doesn't add anything relevant to this discussion). Note that it is this text which determines what is and isn't allowed to do with code using that license. I put the parts relevant for this discussion in bold.

      Copyright (c) YEAR, OWNER
      All rights reserved.

      Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

      1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

      2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

    10. Re:Looks like they are porting Clang features... by Wootery · · Score: 5, Insightful

      The 2-clause BSD license (which is the one used nowadays) is 7 lines of natural English (excluding the disclaimer) and people still can't understand it...

      You can't take BSD code and change it's license.

      It's ironic that you're laughing at those who misunderstand the licence, given that you've fundamentally midunderstood the licence.

      If your interpretation were correct, it would be functionally comparable to the GPL, and we wouldn't have all those flame-wars.

      It's a 'copycenter' licence, not a copyleft licence. You're allowed to release your fork under your choice of licence, whether proprietary, Free/Open Source, or anywhere in between, provided you don't hide the fact that your software is based upon that original BSD 2-clause licensed software.

      It's a little confusing, as "must retain the above copyright notice" can easily be misinterpreted the way you did, to mean "you must release your fork under the BSD 2-clause licence".

      Relevant Wikipedia content.

    11. Re:Looks like they are porting Clang features... by Wootery · · Score: 2

      You can't change the license.

      What you can do is release what you're working on under another license in addition to BSD.

      No. This is totally false.

      Copycenter licences are not viral, that's the whole point. It's almost the same as (but not quite the same as) releasing into the public domain.

      I urge you to read up on copycenter licences, and stop spreading falsities. The introductory segment of the Wikipedia article covers this stuff.

      (I thought you were going to say "You can't change the license of the original software, but you can use any licence you wish for your fork", which would have been technically correct. I could take FreeBSD, make some tiny changes (or perhaps none at all, I'm not certain on that) and release it as a proprietary OS called WooteryBSD. This doesn't mean I have the power to change the licence of FreeBSD itself, of course.)

  5. Re:Coming in 1024 sometime? by Greyfox · · Score: 3, Informative

    2014 is just a month and a half away, and you can compile 4.9 now from the dev branch of their subversion tree.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  6. But but Google? by iYk6 · · Score: 4, Insightful

    But then how would Googlebot know that Phoronix is really great and popular and they should rank it higher in searches?

  7. Finish C++11 support first? by joncombe · · Score: 5, Interesting

    I see from the status page the Regex support is still not complete, part of the C++11 standard. It would be nice if support for this standard could be completed before starting on C++14.

    1. Re:Finish C++11 support first? by dremon · · Score: 2

      Their status html docs aren't updated yet to reflect the actual status. Look at the gcc/libstdc++-v3/doc/xml/manual/status_cxx2011.xml file for the up to date information (or the gcc/libstdc++-v3/ChangeLog for technical revision history).

    2. Re:Finish C++11 support first? by DuckDodgers · · Score: 2

      In open source software as in proprietary, often the out-of-date component of the project is the documentation.

    3. Re:Finish C++11 support first? by game+kid · · Score: 2

      Supported or not, <regex> may yield surprising results when used with UTF-8 or other Unicode text, so those may require a non-<regex> library or the proposed <unicode> header for C++14 anyway.

      --
      You can hold down the "B" button for continuous firing.
    4. Re:Finish C++11 support first? by spitzak · · Score: 2

      That "proposed standard" is very very bad. http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3572.html

      It does not support decoding UTF-8 in an error-preserving way, and appears to also remove the ability to default character strings to UTF-8.

      These are complete job-stopping bugs. Though if the intention was to try to save all the misguided investment in "wide characters" by making it as hard as possible to use UTF-8, it is a good attempt, and I suspect that is the underlying reason for this.

    5. Re:Finish C++11 support first? by spitzak · · Score: 2

      I meant code point, not code unit. Ie what you are calling a "character". I typed the wrong thing there which does not help. You are correct that people thinking they can work in code points rather than bytes (or words for UTF-16) are a huge problem and why Unicode is not working yet. I consider anybody who thinks Unicode requires more than 8-bit code units to be in this category. A further problem is that a lot of people think the code points are "characters", which is actually an undefined entity in Unicode.

      More carefully, and putting the full incorrect assumptions in, there are people who think that a regex of "<character>*" means that the character should be repeated 0 or more times, when in fact it should mean that the last code unit of the character should be repeated 0 or more times. This may seem obviously wrong in UTF-8, but it is equally wrong even in UTF-32 (because of combining characters). Actually fixing this would require regex to understand the entire Unicode definition, which is hugely complex, changing over time, and this has the perverse effect that you can no longer use regex to accurately manage Unicode encodings since you can no longer deal with the code units.

      The regex "(<character>)*" does what is wanted for all representations and allows the user to decide exactly what is a "character". I don't think the burden of putting two parenthesis in there is that bad, really.

      Therefore the C++11 regex is doing the correct thing by being the simplest possible that does valid operations.

      (I think it *may* be useful to have the regex ranges understand UTF-8, provided it is always possible to rearrange your ranges to not trigger the UTF-8 matching and thus do ranges of code units. This has to be VERY carefully decided on, and the rules for how it matches UTF-8 have to be very well defined and are not allowed to ever change even if Unicode changes the UTF-8 rules).

  8. Re:frist by StripedCow · · Score: 5, Funny

    finally

    C++0x does not have "finally".
    You'll have to implement it yourself, e.g. using a destructor.
    See for example: http://codereview.stackexchange.com/questions/2864/an-implementation-of-finally-in-c0x

    --
    If Pandora's box is destined to be opened, *I* want to be the one to open it.
  9. Regular expressions (Atwood) by dwheeler · · Score: 2

    It's funny, but out of context. See: Jeff Atwood, “Regular Expressions: Now You Have Two Problems” June 27, 2008, http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html

    --
    - David A. Wheeler (see my Secure Programming HOWTO)
  10. Write up needs more links. by plopez · · Score: 2

    Please edit and re-submit.

    --
    putting the 'B' in LGBTQ+
  11. Re:GCJ vs. JIT by Anonymous Coward · · Score: 2, Interesting

    1) "A good JIT actually performs very well compared" in theory. FTFY. We're about XX years before JIT'd languages can _reliably_ be as performant as C code in general application.

    2) A full-blown JIT without garbage collection is actually pretty hard, so in practical sense you can't have JIT without a garbage collector. The JIT needs to understand the memory model and manipulate object lifetimes in a generic manner unrelated to the contextual semantics of the application, and the only practical way to do this is with a GC. So it's a little disingenuous to say that Java is slow because of GC. Without GC it wouldn't be JIT'd to begin with.

    3) Array bounds checking isn't that big of a deal, nor is NULL checking. All good C code does it just as much Java does it. And this is one area where in practice JIT'd applications are reliably good at optimizing where it matters.

    4) C applications don't usually copy by value, either, for compound objects. C++ used to do it a ton, but it was slow as heck, which is why recent changes regarding the move constructor were so important.

    Ultimately, Java is slower and more of a resource hog because of limitations in the state-of-the-art. Yes, a _ton_ of genius has been put into making Java (and JavaScript, for that matter) incredibly fast. But at the end of the day it's easy to write well written C code which will blow well written Java code out of the water.
    But it's all relative. Java is still within an order of magnitude of the performance of C, so it's all kind of pointless, anyhow. No need to be apologist about it. I use C principally, but also Lua and Perl. Lua uses a mark+sweep GC, and so just like Java there you have to be careful about stalling. Perl still uses reference counting, which is actually really helpful in many scenarios, although Perl itself is dog slow compared to Lua, let alone LuaJIT, Java, or C.

  12. Re:GCJ vs. JIT by codealot · · Score: 3, Interesting

    1) Sure. When I said "performs very well" I mean within an order of magnitude. I've heard claims that JIT technology will surpass ahead-of-time compilation. I don't quite believe that either, and at any rate it's clearly not there yet. I didn't claim the JIT was equally fast or faster, but it's close enough that there just wasn't a ton of people interested in using a compiler like gcj.

    2) I'm skeptical that JIT requires a GC (in the general case, though for Java it is clearly required by the JVM). Do you have a reference for this claim?

    3) Yes, and of course real Java code does bounds checking too. Back when I was using gcj extensively, I was finding examples of duplicate array bounds checks, one added by the developer and one inserted by the compiler. A good compiler should be able to eliminate the redundant check. At times this is hard, such as when the caller does the bounds checking, and does so in a different translation unit.

    4) Interesting. There are examples, such as the complex type, that would be far more efficient as a value object. But I agree with your point that passing objects that are too large as value objects is probably counter-productive.

    Mostly I agree with your points. Especially that Perl is dog slow.

  13. Thank you, Clang by Urkki · · Score: 4, Interesting

    Clang has really become a boon to open source compiler development. Unlike the open source *BSD operating systems, which are too far behind the GPL operating systems in many measures (not all), Clang has really electrified the compiler scene.

    I see nothing but good things coming from this in near future.

    And in such a rapidly evolving area as compiler development, having a *BSD license does not really hurt either. It's not like the *compiler* is likely to get put into some device with proprietary modifications.

  14. Re:GCJ vs. JIT by bored · · Score: 3, Interesting

    I'm skeptical that JIT requires a GC (in the general case, though for Java it is clearly required by the JVM). Do you have a reference for this claim?

    Well, to point to evidence otherwise, if by JIT your taking about dynamic translation/recompilation for optimization purposes then no. A number of machine emulators (CPU->CPU, see apple Rosetta) perform dynamic translation, and in a number of cases pretty advanced optimization. There have also been a number of native dynamic translators for a given machine architecture see (http://www.hpl.hp.com/techreports/1999/HPL-1999-78.html) for one example. There are also strange hybrids like the Intel Profile Guided Optimizations, where the feedback from a particular run is used to statically recompile the code. This effectively removes the profile/recompile overhead from an application at the expense of the fact that its now statically optimized for a particular kind of dataset.

    But, you ask why isn't a JIT part of most compiler packages if it gives you all these advantages. And the answer is three fold. First OOO CPU's kill the majority of the advantage that projects like dynamo found. Secondly, the overhead of the dynamic translation monitoring/recompile is often greater than the performance gain. And finally, the JIT advantages are often isolated to small hot pieces of code (compared with optimizing an application that is hundreds of MB of code). Applications with small performance critical functions are often hand optimized in C/C++ languages in ways that cannot be done by simple dynamic optimization and often yield functions that execute at the maximum a particular piece of hardware is capable of (say limited by memory bandwidth, functional unit throughput, etc).