GCC Switches From C to C++ 406
According to a post on the GNU Compiler Collection list, GCC is now built as a C++ program by default. This is the fruition of much effort, and the goal now is to clean up the GCC internals that are reportedly pretty type-unsafe by rewriting them using C++ classes and templates.
Major *nix app using C++ (Score:4, Funny)
I'll go get my cats-and-dogs umbrella.
Re: (Score:2)
Linus must be screaming inside.
Re:Major *nix app using C++ (Score:4, Funny)
Re:Major *nix app using C++ (Score:5, Funny)
Linus must be screaming inside.
Linus never allows his screaming to stay on the inside
Re: (Score:3)
This is a good thing... (Score:2)
Classes/Templates are not a magic bullet ... (Score:3)
I'd also be more optimistic if by using classes and templates they were really referring to using STL, not writing their own.
Or maybe they just want to use C++ style comments and won't really use classes and templates much.
Re:Classes/Templates are not a magic bullet ... (Score:5, Insightful)
Bad code is bad code, and you can write it in any language, yes, even visual basic.net.
So the point is not so much "how useless are those lousy GCC devs who will write crappy code", but "how good are those GCC devs now they have a more powerful tool in their hands".
I'd hope they start to discover the STL too, and use the standard containers at the very least - no need to use custom ones unless you either continue to use the existing C-based ones, or you have some very specific performance issues that you absolutely cannot fix any other way (and generally, you don't have this problem with the STL)
Now, sure, I hope they don't discover cool new features like STL algorithms and start to litter the code with lamba-d functors.
bad_alloc (Score:2, Interesting)
or you have some very specific performance issues that you absolutely cannot fix any other way (and generally, you don't have this problem with the STL)
On a platform with no swap file, such as a handheld or set-top device, one of the more common "very specific performance issues" is the ability to handle allocator failures. A program in such an environment is supposed to free cached or otherwise purgeable resources instead of just letting main() catch std::bad_alloc and abort. What are best practices for using the C++ containers if virtual memory is not available?
Re: (Score:3)
Is he referring to using containers as part of the target application or as part of the compiler itself? The compiler internals might be much cleaner or there may be less redundant code for the compiler if it used STL rather than alternative or custom containers etc. Your target application would still only be using STL if you wrote code to use it...
Compiler has more RAM than target (Score:2)
Re: (Score:3)
Re:bad_alloc (Score:4, Informative)
It could be worse though, in .NET if you run out of stack, you don't even get the exception - it just exits.
You do get a StackOverflowException [microsoft.com], actually. The catch - pardon the pun - is that it's a "magic" exception type that cannot be caught by user code, since .NET 2.0. So in practice it's only there for debuggers.
Define properly (Score:2)
Your question is best addressed by simply saying, design your application properly and it won't be an issue.
Thus the question becomes the following: How should an application written in C++ be designed properly for an environment with no paging?
Re: (Score:3)
What, did you think the swap file made [ if ( ! (a = malloc(sizeof[int] * 1024))) return ENOMEM; ] unnecessary?
Swap itself didn't; virtual memory allocation techniques allowing overcommit did.
It's practically useless to check the result of a malloc on a modern VM-equipped OS, except for very large buffers (where you typically also have an obvious failure path e.g. "screw it, this image is too big"). You program can get OOM-killed after all allocations have succeeded.
Even in environments with honest-to-god memory allocation, implementing proper OOM safety requires prohibitively thorough testing, where you need to sim
Re: (Score:3)
There are some cases where lambda-d functions improve clarity. For example, lambdas make for very clear, concise threading of simple tasks using the new C++11 threading operations.
Really, many of the new features play so beautifully together. For example, you can write a simple packet reader/parser which:
* Loops indefinitely
* Waits until data can be read
* Spawns the processing of that data in its own thread and resumes holding and processing packets, while in the spawned thread:
* Proper type of packet is
Re:Classes/Templates are not a magic bullet ... (Score:4, Informative)
Re: (Score:3)
Re: (Score:3)
If you look at the way the Linux kernel uses macros combined with GCC extensions like typeof(x), it is obvious that they are actually writing templates. And many of their struct definitions reproduce inheritance and virtual method calls.
You could look at it as writing C++ code disguised as C.
Re:Classes/Templates are not a magic bullet ... (Score:5, Informative)
Given a collection of developers that write difficult to understand, difficult to maintain and sloppy type unsafe code, going to C++ may not help.
It is very difficult to write easy to understand, type-safe, code in C.
The reason being that C requires so much micro-management that you end up with the code for that mixed in with the actual interesting algorithms. C++ basically makes the compiler do an awful lot of what you have to do in C anyway and does it for you automatically while keeping the details neatly out of the way.
It's also very hard to write type safe code properly in C. Just look at the classic example of the unsafe qsort versus the safer and faster std::sort.
I'd also be more optimistic if by using classes and templates they were really referring to using STL, not writing their own.
What on earth is wrong with writing your own classes and templates? They almost certainly already have a healthy collection of structs with function pointers and macros (linux certainly does have poor reimplementations of half of C++ using macros). These are best replaced with classes and templates on the whole.
That's the point. C++ formalises what everyone was doing in C anyway, making it much more uniform, easier to read, shorter and therefore much less prone to bugs.
Re: (Score:2)
It's also very hard to write type safe code properly in C. Just look at the classic example of the unsafe qsort versus the safer and faster std::sort.
You can do all kinds of nifty stuff with macros and gcc/clang extensions to provide type safety to C. Yeah, if you don't already have a library for that it can be a bit difficult to write one (or find one you like). But once you have the library it's very easy to write (mostly) type safe code with C. For example I have a type safe array_sort() in C.
Re:Classes/Templates are not a magic bullet ... (Score:5, Insightful)
You can do all kinds of nifty stuff with macros and gcc/clang extensions to provide type safety to C
Yes, I know.
You can write a GENERATE_SORT(Type, Comparator) macro which generates a sort function to work on an array of Type, using the specified comparator, and has no name collisions and is type safe using liberal amounts of ## and so on.
The point is not that you can't do them in C (you can), but the methods for doing it are ad-hoc. By moving the functionality into the compiler, C++ provides a regularity of syntax for such things that C lacks.
Re: (Score:2)
going to C++ may not help.
I dunno. I don't see what business non-C++ programmers have working on a C++ compiler. One of the problems might be that they're still using malloc() and strdup().
Re:Classes/Templates are not a magic bullet ... (Score:5, Funny)
I find that jerks who bitch the most are often the worst at writing code, sorry just sayin. Big ego = ass hat to work with and awful at writing code. C# might work out better for ya.
Shouldn't that be:
Big ego == ass hat
Re:Classes/Templates are not a magic bullet ... (Score:5, Funny)
No, it's definitely an assignment.
Re:Classes/Templates are not a magic bullet ... (Score:5, Insightful)
I don't write 'university code' though; and I'm not out to impress a professor or win 'elegance awards'.
I think the enormous chip on your shoulder might be obscuring your view of C++.
Re:Classes/Templates are not a magic bullet ... (Score:4, Insightful)
For you, I suggest two-pronged approach to C++. First of all you have libraries and frameworks. They take full advantage of C++ features, but hide them. Then you have the actual application code that uses these libraries, and is much simpler, ideally readable by somebody who only knows Java or C#.
The difference to doing the same in C is, in C you'll use macros and have poor type safety, ugly-looking code and get obscure macro related errors when when you put bad stuff as macro arguments.
In short, the trick with C++ is, you don't use most of the features, unless you really have to. Note that you can write your current C code as C++ code, except use whatever subset of C++ features you think will make your C-like code better, and only when it actually makes it better. Limiting yourself to pure C is, IMNSHO, just stupid, unless you're coding for a small embedded system and don't want to include C++ runtime in it.
Compiler bootstrapping? (Score:5, Interesting)
How will this affect bootstrapping the GCC on bare systems?
Been a while since I've delved into LFS or the like, but I'd think GCC being C++ based would seriously complicate things as it's now got more dependencies.
Re: (Score:2, Insightful)
Not much.
You can cross-compile all you like.
If that fails, and you find yourself on a system with only a K&R C compiler, you bootstrap to
an ANSI C compiler by going to gcc 2.95.n or something like that. Then you use that to get
to a fairly recent C-based gcc and finally use the resulting C++ compiler to compile the
final version of gcc.
More like "C with Classes" (Score:5, Informative)
I've read their guidelines, and they're doing much like I've been doing recently with moving from C to C++ for embedded systems programming, which is to avoid the really crazy shit that you can do in C++. In particular, exceptions and RTTI are absolutely verboten. They're even planning a compiler switch that turns off the features that will be outlawed in the compiler source. Any templates outside of STL are also forbidden ("template hell" sucks), and I won't even use STL myself because I can't count on having a heap. Even iostreams are being frowned on except maybe possibly in debug dump code where no text language translations are needed.
C++ can really tidy up C code that uses any sort of function pointer hooks or object dispatch style switch statements with virtual methods. A class can become a mini-API, and even used as a sort of device-driver, as in the mbed [mbed.org] libraries. Doing this has really helped improve encapsulation in my own code.
OOM inside STL (Score:3)
In particular, exceptions and RTTI are absolutely verboten. [...] Any templates outside of STL are also forbidden
What implementation of STL do you recommend for low-memory systems that have a heap, albeit not a very big one, where you don't want to crash upon running out of memory?
Even iostreams are being frowned on
In my experience (quarter megabyte static hello world), <iostream> would be the first to go, in favor of <cstdio>. See what else I've written about the pitfalls of C++ on small systems [pineight.com].
Re:OOM inside STL (Score:4, Insightful)
Actually the correct comparison is to not only disable exceptions in the compiler, but in addition adding hand-crafted error handling to the code. Because manual error handling also costs performance. And without error handling, your application is broken, period (and yes, I have been bitten by applications doing improper error handling. And yes, that included data loss. Loss of data stored on the hard disk, because the application didn't do any error checking when replacing the file with a new version. Fortunately I could get back most of it from the nightly backup).
...different type combinations (Score:3)
Programmers can lose track of for how many different type combinations they have instantiated a template, causing code size to balloon. There is a common extension called extern template allowing for explicit instantiation, but it's not in C++98, and not all compilers support it.
[This] is extremely misleading. Your point of contention is in no way specific to C++ nor templates. It equally applies to any langauge which supports structures and/or classes. That's not C++ nor templates specific issue.
I still don't understand what you're trying to say about my point about "different type combinations" being wrong. I was referring to the fact that a lot of compilers instantiate templates by duplicating the object code one for each specialization, and you get one specialization for each combination of types, not just for each type.
Re: (Score:2)
That is an interesting avenue. As languages like C++ and perl can attest, languages can evolve by adding features but it's almost impossible to take them back. Having a compiler flag to enforce a coding standard is a way to do that less coercively.
Maybe this will result in a popular new dialect of C/C++.
Re: (Score:2)
Re:More like "C with Classes" (Score:4, Insightful)
When I realized that my array of Boolean objects in C++ was an order of magnitude more memory intensive than the bit-arrays I could create in C
Dude, std::vector<bool>. All of the iterable, dynamically-resizable, type-safe goodness of a real array type with very nearly all the efficiency (time and space) of hand management of packed bit arrays. The only downside is that you do have a little extra bookkeeping info (an int) to support the dynamic resizing. If you need to avoid even that, there's also std::bitset, which has a length fixed at compile time. Odds are that code using std::bitset will be more efficient than what you'd write, and you don't have to waste brain cycles on "keeping track of the fact that it's a pointer to a bunch of bits".
There are some reasons to prefer C over C++, but your example is decidedly not one of them. In fact, it strongly favors C++.
Re:More like "C with Classes" (Score:5, Informative)
Ignoring RTTI is fine, but forbidding exceptions requires a dangerous sort of doublethink. The language itself, as well as the STL, is defined to generate and use exceptions. By ignoring their existence, you banish yourself to a nonstandard purgatory.
For example, every new now must become new(std::nothrow). For every STL container type, you have to provide a custom allocator that doesn't throw. That's a bit unwieldy.
By denying exceptions, you force everyone to use error-prone idioms. For example, the only way a constructor can signal a failure is to throw an exception. If you forbid exceptions, then all constructors must always be failure-proof. And then you have to provide an extra initializer method to do the real initialization that can fail. Every user of the class must reliably call the init method after construction, which gets cumbersome when classes are nested or when you're putting instances into an STL container. It also means that objects can have a zombie state--that period of time between construction and initialization. Zombie states add complexity and create an explosion in the number of test cases. Separate initialization means you can't always use const when you should.
Exceptions are necessary to the C++ promise that your object will be fully constructed and later destructed, or it will not be constructed at all. This is the basis of the RAII pattern, which just happens to be the best pattern yet devised for resource management. Without RAII, you will almost certainly have leaks. Worse, you won't be able to write exception-safe code, so you are essentially closing the door to ever using exceptions.
Re: (Score:3)
Forbidding exception is de-facto standard for C++ programmers
This is plainly false. In 7 years of writing C++, I've yet to work on a project where exceptions were forbidden. And the sky hasn't fallen, quite the opposite. Specifically:
exceptions are an unsafe feature that integrates extremely poorly with most programming paradigms C++ is used for
The primary programming paradigm that C++ enables is RAII. And RAII integrates extremely well with exceptions - in fact, it's pretty hard without them.
Re: (Score:3, Insightful)
I've gone the opposite direction. Moving more of my C++ code into C by using my own OOP system. Before you say "That's crazy talk", consider that it makes inter-operating with my game's scripting language so much more buttery smooth than in C++ -- It's so nice to just create a new object in either script or C and have them talk to each other without going through a few layers of APIs, passing off dynamically allocated instances and having C free it, or the script GC it automatically.
Don't get me wrong,
Re: (Score:2)
This could work well. Indeed, there is something to be said for having C with a few extensions being a lot better for application programming than plain C.
On the other hand, a lot of real-world C++ code is as crappy as it is exactly because people write it as if it were C with a few extensions, rather than taking advantage of other C++ features that would make it actually nice to read.
As an example of this, it helped me a lot when I finally realized that, in C++, you can use almost any well-implemented type
Re: (Score:2)
If you just want more "batteries included" data structures than libc has, rather than anything else from C++ as an actual language, linking with GLib is a common alternative.
Re: (Score:3)
+1
The only downside to C++ vs C, IMO, is the C++ learning curve. You have to learn all of both language, and how their respective constructs get translated to machine code and when to use what. However, once you've done that, and internalized it all, you can write highly efficient code at a much higher level of abstraction, making you much more productive. And you can also drop down to low-level bit-twiddling when you need to, wrapping it in a higher-level abstraction or not, as appropriate.
If you ha
Awesome (Score:5, Insightful)
GCC as a compiler and a community seems to really be moving, it is probably due to the competition from LLVM, but atleast for now, GCC is still the better compiler, and I wish them the best of luck.
Good compilers benefits everybody!
Will keep compiling C properly? (Score:3)
That's all I really care about, to be honest. As long as I can keep coding in C, they can do whatever.
C++ is Dead, Long Live Java (Score:5, Funny)
C++ is as good as dead.
Everything should be written in java, since this would give a huge speed increase.
For even more speed, programs could be run on a java interpreter, running on a java interpreter written in java.
Think of the raw speed!
Re: (Score:2)
It's Java interpreters all the way down!
C++? (Score:4, Funny)
C++? seriously?
That's it, I'm switching to LLVM!
Re:C++? (Score:4, Informative)
C++? seriously?
That's it, I'm switching to LLVM!
which is also written in C++
An observation of "procedural" coders (Score:4, Interesting)
I've never understood the hostility towards OOP. I've always seen it as nothing more than another great tool to use, but so many posters act as if OOP is some false god brainwashing the masses. My theory is they're taking the act of embracing OOP as synonymous with insulting C.
Look at the added java.io.PrintStream.printf() [oracle.com] method that uses a variable argument list. Someone had to be a special kind of asshole to adulterate a strongly-typed OO-language with that bullshit when the obvious OO solution is an array for a second argument. That's the kind of modification made when someone is making a political point, not a design improvement.
Re:too bad GCC is not relevant anymore thanks to L (Score:5, Informative)
Irrelevant? Not quite. For your particular use, maybe. But most Linux distros are still built using GCC, and most embedded platforms provide a GCC-based toolchain. So if, by 'irrelevant', you actually mean, 'the compiler with the most-often executed output code on earth', then yes, I guess you're right.
Re:too bad GCC is not relevant anymore thanks to L (Score:4, Insightful)
Don't be so bold in claiming most embedded platforms are something.
Most embedded platforms use Keil, Assembler and all kinds of various odd proprietary compiler suites that suit their 8-bit and 16-bit nature better. The elitist, narrow though visible of 32-bit ARM is using GCC.
I assure you your refrigerator temperature thermostat was not programmed in GCC.
Re: (Score:3)
I think there are a few non-ARM embedded platforms that use gcc. AVR (even the 8-bit variants) has a good gcc port.
Re: (Score:2)
Also Coldfire, and a bunch of those MIPS spinoffs, IIRC.
Re:too bad GCC is not relevant anymore thanks to L (Score:4, Informative)
And the AVR I have used used a mix of GCC and GNU assembler. I think someone somewhere had an official commercial compiler for it but that doesn't help if it's not licensed for anyone in the company to use.
I have actually seen cases where companies license one commercial compiler for use in production builds while all the developers use GCC, out of concerns that the commercial compiler is more efficient while being too expensive to license more broadly. Over time there's pressure to dump the commercial compiler because it tends to be difficult to debug when the devs don't have access to the production compoiler, and because it turns out the expensive compiler doesn't really generate more efficient code.
Re: (Score:3, Informative)
Re:too bad GCC is not relevant anymore thanks to L (Score:5, Funny)
I assure you your refrigerator temperature thermostat was not programmed in GCC.
That's because its CPU is a bi-metallic strip wound into a coil, and it's RAM is only one bit. The equivalent of running .configure and make is rotating a dial and tightening a screw.
my fridge thermostat is digital (Score:2, Offtopic)
It's got digital temp settings for fridge/freezer compartments, an optional "super-cool" for fast-freezing the freezer section after putting a load of groceries into it.
Once of the coolest fridges I've seen (don't own it, too expensive) actually learned your habits--if you always have breakfast at time X and it generally results in the temperature in the fridge warming by a degree, it will pre-cool by an extra degree at time X-1 so that when you open it for breakfast it will warm up to the desired temperatu
Re: (Score:3)
Re:too bad GCC is not relevant anymore thanks to L (Score:5, Interesting)
Well, let's see. I personally work with control systems using x86, MIPS, PowerPC and ARM architectures, running Linux, VxWorks, QNX and WinCE (various combinations). They all have GCC toolchains, although we admittedly don't use it for CE.
If you're thinking microcontrollers, then GCC supports AVR, 68000-series, MicroBlaze, MSP430, ARM again...
Now, personally, my refrigerator has an analog thermostat, so, technically, you are right. If it had a thermostat implemented on a CPU, then I'd think there's a very good chance it was compiled with GCC.
What exactly "programmed in GCC" might mean is left for the reader to speculate on.
Re: (Score:2)
I also note with curiosity that the one vendor you can actually name with a competing compiler is a development environment aimed primarily at ARM and is, in fact, produced by the "elitist, narrow though visible" ARM.
Re: progress (Score:2, Interesting)
I too would have seen a move from C to C++ as progress...
in 1989.
It took me til about 1990 to realize that C++ was a fundamentally broken and overcomplicated attempt at an object oriented programming language. By attempting too much (OO + C backward compatibility) it achieved, to be kind, something other than safety and elegance.
C++ seems to me like the space shuttle of programming languages; includes a kitchen sink, a tool on board for every purpose, lightning fast, and dangerous as hell.
So tell me, has 22
Re: progress (Score:5, Insightful)
No. 22 more years has seen Challenger and Columbia blow up, and we've learnt some lessons about things we should do and things we shouldn't do. Just as the Challenger investigation didn't conclude, "Ban O-rings," nobody has decided to ban parts of C++, either.
C++ is in some ways like a human language: It has an enormous range of things you can say in it. Some of them are only appropriate in certain situations. Some of them are never appropriate if you want people to take you seriously. Some of them just plain don't make sense.
So quite a lot of the development over those 22 years has been in the community learning idioms that let you use the power of C++ without hurting yourself.
Re: (Score:3)
However, it also has a beastly learning curve and lots of corner cases, and while its execution speed is wonderful it's so complex that compilation times for non-trivial applications are slower than equivalent feature (but slower execution) applications written in most other languages. If you really need performance that only C+
Re: progress (Score:4, Informative)
Re: (Score:3, Insightful)
Re: (Score:3, Interesting)
I too would have seen a move from C to C++ as progress...
in 1989.
It took me til about 1990 to realize that C++ was a fundamentally broken and overcomplicated attempt at an object oriented programming language. By attempting too much (OO + C backward compatibility) it achieved, to be kind, something other than safety and elegance.
Actually if it only had near-compatibility with C and OO, it would have been a very nice and useful language. But then things went south and they added too many overloadable operators, a nightmarish jumble of rules for typecasting/overload resolution, exceptions that can't be implemented properly in modern application software, but add a whole new dimension of concerns that the programmer should always be aware of... Then they topped it all off with hideously overcomplicated templates. The standard librarie
Re: (Score:3)
"So now, real-world projects that use C++ for the useful things it does provide have to maintain coding guidelines to avoid shooting themselves in the foot too often."
How is that not the case for _any_ modern language? Anyone write terrible code in any language. I've seen some Python that made me want to rip my eyeballs out (used tons of esoteric functionality... coupled with a design that made me question the person's sanity).
Coding guidelines are a good idea no matter the language. Keep everything consistent and make sure that the code remains maintainable into the future...
You are missing the point. Most languages, if not all, have coding guidelines, but compare guidelines for, say, Java, Python, or even C, with existing coding guidelines in C++. You'll see the difference in how much the later cuts through what is available in C++.
Pretty much most C++ coding guidelines (in particular for systems and mission-critical development) cut away templates, STL, i/o streams and exceptions. Boost and RTTI are certainly the most banned of things.
So you end up with a C-like language
Re: (Score:3)
Java keeps evolving, they keep adding new f
Re: progress (Score:4, Interesting)
The third party libraries for it are pretty nice these days, too. I'd rather do threading in C++ with boost::thread than in Java. I've found boost::regex and boost::program_options to be a joy to work with as well. Eigen is also very nice if you need a math library.
Overall I've been quite enjoying working with it. It's not nearly as intimidating as it first appears, and the stuff you really need to know about it is pretty simple and easy to learn.
Re: (Score:2)
Re: (Score:2)
For a compiler? What does a distribution license have to do with a compiler?
You seem to be treating the GPL like cuties.. Who does believes in GPL cuties? Apple, FreeBSD, 6 year olds, anybody else?
libgcc and libsupc++ (Score:4, Interesting)
What does a distribution license have to do with a compiler?
Division support in C on some platforms (such as ARM) and exception support in C++ rely on libraries called libgcc and libsupc++. These libraries are GPLv3 with an exception. Were it not for the exception, anything compiled with the would either be GPL (because of libgcc and libsupc++) or produce a linker error (because the libraries are called and not present). The exception applies only if the compiler has not been modified to introduce non-free optimization passes performed in an independent process. See GCC Exception FAQ [gnu.org].
Who does believes in GPL cuties? Apple, FreeBSD, 6 year olds, anybody else?
You can add Nintendo. See the case of Pajama Sam for Wii, where Atari was willing to distribute the source code to a GPL interpreter used for the game but Nintendo didn't want GPL software on its platform [slashdot.org].
Re:libgcc and libsupc++ (Score:4, Informative)
Were it not for the exception, anything compiled with the [gcc compiler?] would either be GPL (because of libgcc and libsupc++) or produce a linker error (because the libraries are called and not present).
I think you mean "linked with libgcc/libsupc++". One can compile code with gcc/g++ without linking against the bundled libgcc. For example, the BSD-licensed libcompiler-rt library produced for the LLVM project is said to be a drop-in replacement for libgcc, and as a bonus, it's even a bit more efficient. If the same is not already true for libsupc++, I'm sure it's only a matter of time.
Re: (Score:2)
Does LLVM have features for coverage analysis to compare with GCOV?
Re: (Score:2, Informative)
LLVM was created by freeBSD due to the continual dropping of support for older hardware by the GCC team.
Wrong! [wikipedia.org]
The LLVM project started in 2000 at the University of Illinois at Urbana–Champaign, under the direction of Vikram Adve and Chris Lattner. LLVM was originally developed as a research infrastructure to investigate dynamic compilation techniques for static and dynamic programming languages.
Re: (Score:2)
LLVM was created by freeBSD due to the continual dropping of support for older hardware by the GCC team. Another issue they had was the optimizations of the software increased the difficulty of debugging things as the optimizations varied every time they compiled the software. Thus LLVM was created with the goal of binary stability that could be easily debugged and that supported the many older peices of kit that freeBSD runs on instead of being forced to use GCC 1.2/1.5/2.1/2.2/2.3 and such.
Since when was LLVM created by FreeBSD? o.O
Re: (Score:3)
Gcc still blows the crap out of LLVM in several benchmarks. LLVM is great for many things as well. GCC needed competition to make sure it didn't get stagnent. Some of us still remeber the egcs period of time. Unless corperate entities were modifying the sources of GCC, I'm not sure why it matters.
Re:too bad GCC is not relevant anymore thanks to L (Score:5, Informative)
The GPL doesn't force you to give back. You need to have a read of it, it only forces you to "give forward".
Apple has now fully embraced clang/llvm for a couple of reasons: it was legally very difficult to for them to integrate gcc tightly with their IDE (by which I mean they would have to GPL Xcode if they linked directly to gcc); it is technically very difficult to integrate with an IDE - apparently the gcc code base is a complete mess as far as integration with other tools is concerned.
Clang/LLVM is financed by Apple and it is released under an Open Source licence. Call that parasitic if you like but because of Apple (in part) you now have a clean modern compiler toolchain that's a credible open source alternative to gcc. If nothing else, it means that the gcc dev team now have an incentive to improve their product because they have competition.
Re:too bad GCC is not relevant anymore thanks to L (Score:5, Informative)
No, no it does not mean anything of the sort.
Re:too bad GCC is not relevant anymore thanks to L (Score:5, Informative)
No, it means when you go in and add extra functions to GCC that those would have to be GPLv3 as well, at least if you want to distribute them.
It has NO effect on what the use of the application. In fact that is has no effect on the end user is one of the topmost clause of the GPLs.
Re:too bad GCC is not relevant anymore thanks to L (Score:5, Interesting)
AIUI GCC is now GPLv3, the libraries it ships with are GPLv3 with exceptions that allow using them to build non-GPL programs. However they were paranoid about the idea that people would try and save gcc's internal state to disk and then run it through a propietry backend. So they crafted a complex exception that tries to forbid that while allowing most other combinations of gcc with propietry tools.
Re: (Score:2, Funny)
umbrellas? I'm getting some popcorn and a comfortable chair. this is going to be epic.
Re: (Score:3)
Yeah, that always freaks me out. GCC backends atleast are configured using LISP wrapped in C. I hope this is one of the things they clean-up, though, it won't be straight forward. LISP is quite powerful and fast as a machine language, it just happens to be unparsable by humans.
Re: (Score:3, Insightful)
> language, it just happens to be unparsable by humans.
What on earth are you talking about? Lisp is extremely trivial to parse. Lisp barely even has syntax.
Now, keeping track of Lisp program flow in your head, that can be a bit tricky and can lead to some substantial maintainability issues, especially when some hotshot programmer starts throwing lambda functions around like there's no tomorrow (or, worse, continuations).
But parsing? Parsing Lisp is dead
Re: (Score:3)
What, who can't parse Lisp? It's incredibly simple. People don't like it because they're not used to it is all.
Re: (Score:2, Interesting)
(not (quite_like (works LISP) you_say))
Re: (Score:3)
Re: (Score:3)
Which is a complier more likely to be able to optimise? polymorphism that is explicit in the language or polymorphism that is hacked together by creating vtables (which are basically structures full of function pointers) manually? Which is more likely to have mistakes made that associate the wrong vtable with an object?
C++ has it's problems but it's the only widely supported language that both provides OOP features and yet still allows the writing of tight code where needed.
Re: (Score:2)
A program written in C++ is going to be slower than an equivalent program written in C, no way around it.
Cite real world benchmarks please.
Re:GCC should remain small and fast (Score:5, Insightful)
I used to be more polite to ignorant C++ haters. But I've lost patience.
A program written in C++ is going to be slower than an equivalent program written in C, no way around it.
There is a way around it: by not being an astonishingly incompetent developer.
And that's without even getting into features like templates, which only five people in the world understand.
Don't assume everyone is as dim as you.
Re:GCC should remain small and fast (Score:4, Informative)
Doesn't help. STL arrays are allocated on the heap, and that's a quite slower and more wasteful allocation form than on the stack.
What is an "STL array"? If you mean std::array, then no, it's allocated on the stack. If you mean std::vector, then that's a dynamically resizable array, and an analogous data structure written in C would still be heap-allocated - you'd just have to do malloc/realloc/free yourself.
Sure, you can use C arrays, but guess what: out go type safety and STL algorithms and C++ idioms.
Again, wrong. Since raw pointers are iterators, you can perfectly well use STL algorithms and other C++ idioms with C arrays. In C++11 it's even easier now that std::begin and std::end are defined as global functions, and overloaded for arrays, so you don't need to much around with pointers at all. Type safety is still there as well, since C arrays are typed.
Re: (Score:2)
properly handling C++ template can be a very CPU-bound process unfortunately.
Re: (Score:3)
Re: (Score:2)
Listen more carefully. All the C diehards are screaming in rage.
Re: (Score:3)
If they use the Smarter-C-than-C parts of C++ it's fine. Just don't start going overboard with modern C++ style, bloatware with templates and generics, autopointers, overloaded operators and functions, etc, then it's great. Use it as C with better type checking and easier modularization and the C diehards will approve.
Re:RTFA (Score:4, Interesting)
Yeah. I'm not a fan of C++, though the compiler spends so little time running that this shouldn't pose much of a problem with bloat and clunk. On the other hand, loading C++ stuff is an abomination that takes eternity due to massive mangling (a problem Michael Meeks has spent a lot of time trying to marginalize with Bdirect linking, faster hash algorithms, etc), and the compiler gets run repeatedly.
I'm not sure mangling is really as much of a problem people make it out to be. It *did* cause problems trying to mix binaries from different compilers but I don't think it was ever really a performance problem. If linking is slower it's because the programs are larger.
OTOH name mangling is a massive benefit to programmers. Writing big programs is a huge pain in the butt if every single function/variable has to have a unique name. Namespaces are one of the reasons C++ programs scale so much better then C programs.
Re: (Score:3)
The problem with mangling is C gives you a symbol like "strcpy", which you might compare for the 50,000 links that have to be made during program load, and have to perform 300,000 character comparisons.
In C++ you get _NSstd__IOSTREAM__55STRING_OPEREQ__STRING__STRING__CHARX__ or some crazy thing. You wind up with 100, 150, 250 character long function names for class foo member 'int bar(int, &int)'. To make matters worse, the above hypothetical was ridiculous: you won't do 300,000 character comparis
Re: (Score:3)
Unless they're going to make it a multi-step bootstrap where the first pass is only C code. I highly doubt that.
Re:RTFA (Score:4, Informative)
Bootstrapping on another platform is done as follows:
Note that at no point does the target platform need some other way to compile gcc independently in order for the port to happen.
Re: (Score:2)