
GCC 4.9 Release Series – Changes, New Features, and Fixes - beatbrokedown
http://gcc.gnu.org/gcc-4.9/changes.html
======
twic
The things that caught my eye were both related to IBM hardware features.

Firstly, apparently IBM chips have hardware transactional memory now:

    
    
      PowerPC / PowerPC64 / RS6000
        GCC now supports Power ISA 2.07, which includes support
        for Hardware Transactional Memory (HTM)
      
      S/390, System z
        Support for the Transactional Execution Facility
        included with the IBM zEnterprise zEC12 processor has
        been added.
    

That's pretty cool.

Also on the 390:

    
    
      S/390, System z
        The hotpatch features allows to prepare functions for
        hotpatching. A certain amount of bytes is reserved
        before the function entry label plus a NOP is inserted
        at its very beginning to implement a backward jump when
        applying a patch. The feature can either be enabled via
        command line option -mhotpatch for a compilation unit
        or can be enabled per function using the hotpatch
        attribute.
    

I guess if you're doing high availability the mainframe way, you don't get to
restart your apps to patch them. That's terrifying, but again, pretty cool.

~~~
revelation
Windows system DLLs have pointless "mov edi, edi" instructions in function
prologues to enable hotpatching. It's not just mainframes ;)

~~~
jodrellblank
Which I recently read about on Raymond Chen's blog. Link:
[http://blogs.msdn.com/b/oldnewthing/archive/2011/09/21/10214...](http://blogs.msdn.com/b/oldnewthing/archive/2011/09/21/10214405.aspx)

------
krakensden
> Memory usage building Firefox with debug enabled was reduced from 15GB to
> 3.5GB; link time from 1700 seconds to 350 seconds.

This is huge- you can now do this on a laptop

~~~
nly
15 GB was presumably with LTO enabled, you could always build it on a fairly
average laptop with it disabled. This is great news though, as LTO is pretty
awesome.

~~~
hf
For the uninitiated: LTO stands for Link-time optimization and happens when
the compiler merges/links all separately-compiled object files into one
(executable or library).

Although it seems obvious that this might be a good idea, why would it

1) use exorbitant amounts of memory; and

2) be "pretty awesome" instead of, say, mildly useful?

edit: And both questions satisfactorily answered in the time it took me to
peruse the preamble of
[https://en.wikipedia.org/wiki/Interprocedural_optimization](https://en.wikipedia.org/wiki/Interprocedural_optimization)

Thank you!

~~~
mattgrice
Link-time optimization is not a very descriptive term. It's usually called
whole-program or interprocedural optimization. Link-time optimization is just
how it has been implemented.

It uses a lot of memory because it requires keeping a representation of more
or less the entire program in memory at one time, in a format which is
amenable to analysis. It is not out of the ordinary for an optimizer's
internal representation to be on the order of 1000x the size of the source
code.

~~~
anaphor
For an example of a compiler other than GCC that does whole-program
optimization see the Stalin Scheme compiler:
[https://github.com/barak/stalin](https://github.com/barak/stalin)

------
_stephan
GCC 4.9 hasn't yet been released (and won't be until after Easter). Currently
there's only a release candidate. See
[http://permalink.gmane.org/gmane.comp.gcc.devel/135470](http://permalink.gmane.org/gmane.comp.gcc.devel/135470)

~~~
beatbrokedown
Interesting the main page [http://gcc.gnu.org/](http://gcc.gnu.org/) lists 4.9
as the current release as opposed to Development release.

~~~
pygy_
If you follow the 4.9 link, you get to
[http://gcc.gnu.org/gcc-4.9/](http://gcc.gnu.org/gcc-4.9/) which states:

> As of this time no releases of GCC 4.9 have yet been made.

------
jevinskie
libstdc++ finally supports C++11's <regex>! My team will be able to ditch
boost regex once GCC 4.9 hits a stable version of Ubuntu.

It is also nice to see more parity with Clang when it comes to diagnostics and
ASan/UBSan.

~~~
nly
Still not a fully optimised DFA solution though (although neither is
Boost.Regex afaik)

------
_pmf_
Seems like competition from clang led to some really practical improvements.

~~~
dfc
I use whatever compiler is defined in the makefile or called for in a README.
Needless to say I do not really follow developments in either camp closely. I
am curious what improvements are the result of "competition" from clang?

~~~
nly
I might be doing GCC a disservice but I'm pretty sure the various sanitization
work has come from LLVM/Clang.

~~~
gillianseed
Actually the sanitizers where added to LLVM by Google who also added them to
GCC as they are actively working on both compiler toolchains.

------
shurcooL
Did anyone notice "GCC 4.9 provides a complete implementation of the Go 1.2.1
release."? Isn't that pretty big.

------
knweiss
Support for the CPU code names in -march is a simple but really useful change:

    
    
       -march=nehalem, westmere, sandybridge, ivybridge, haswell,
       bonnell, broadwell, silvermont
    

Also this:

    
    
       -mtune=intel can now be used to generate code running well
       on the most current Intel processors, which are Haswell
       and Silvermont for GCC 4.9.

------
asveikau
> A new C extension __auto_type provides a subset of the functionality of
> C++11 auto in GNU C.

I wonder if anyone is working to standardize something like this? It would be
way more useful than all those _s() functions they added to C11.

~~~
PySlice
Yes, bounds checking are unnecessary, you don't need those _s() functions \-
NSA director

~~~
asveikau
The problem isn't bounds-checking, the problem is that most of the _s()
functions that deal with bounds-checking already have pre-C11 equivalents that
check boundaries.

I also disagree with some of the interface choices, for example when strlcpy()
fails it tells you _how many characters you needed_ , not simply "error" as in
strcpy_s. Also the use case for memcpy_s() is extremely limited. It just seems
like the _s() functions were rushed and stuck in there without regard for what
makes sense.

------
dfc
I wish latex/lualatex/xelatex would colorize their logs.

~~~
michaelhoffman
I wish LaTeX would just limit their logs to information I need to see.

------
jonalmeida
I like the addition of color the compile log. It's might be easier reading
compile failures now.

------
jey
Only six months since 4.8 was released. Is GCC moving to a more regular
release schedule?

~~~
nly
What's wrong with every every 6 months? It's not like bug fix releases aren't
dropped in the meantime.

~~~
mpyne
I think that was the point... every 6 months being better than every 6+dx
months as seemed the case before.

I don't personally notice a change though, IMHO releases have been fairly
consistently released since the 4.0 timeframe.

