9 ms·
A list of systems, applications, and libraries that are written in C++
- deleted 14y ago[deleted]
- fceccon 14y agoAfter researching a bit on the net I chose C++ Primer 5/e (not C++ Primer Plus). The author uses some of the new features of C++11 in the examples (like constexpr, auto, list initializer etc.) so you get used to a modern C++ style, but for every new feature it tell you what it replaces so you can still maintain "old" code. The book in subdivided in 4 parts, the first part is about the language, the secondo part about the STL, the third part about advanced OOP and the fourth part about advanced stuff. Also the Kindle edition is really well done.
- gerhardi 14y agoYes, C++ has been and will stay as the language of choice for many major free and commercial apps. It's not very surprising as there exists quite a lot of professionals with skills in C++ and the performance of applications written in C++ is generally very good.
- alexakarpov 14y agoCorrection: the performance of good applications written in C++ is generally very good. Unfortunately, the language itself is not particularly conducive to writing a lot of software, fast, while maintaining the satisfactory quality level. Especially in today's world.
- gregsq 14y agoI'm doing mostly embedded work on ARM chips at the moment. Which is a world away the rooms of Sparc V9's I've also worked on. It's a tighter space and you can't use too much of C++'s bigger bits. But multiplexing an SPI bus with C++ for example was vastly more efficient coding and performance wise because you don't need to remember whether some function or other set a mutex and released it. A specific custom lock in the base class improved code review and mutability. It has it's uses.
- matthavener 14y agoI'd be interested to see which subset of C++ each company picked. Google's coding guidelines are always cited, but I can't find many others. MySQL's seem lacking in details. C++ is such a broad spectrum, I bet some of these companies only used simple classes and virtual functions, whereas some used boost.spirit and functors. https://dev.mysql.com/doc/internals/en/general-development-guidelines.html#coding-guidelines-c https://dev.mysql.com/doc/internals/en/general-development-g...
- meaty 14y agoGood point. Most c++ coding standards I've seen are lists of stuff not to use.
- ksec 14y agoThey are more like C+ with C++ minus a set of features. And there are those who write C style in C++ for various of reason. And everyone knew the huge amount of software in C++. Why the list?
- mpyne 14y ago> And everyone knew the huge amount of software in C++. Why the list? Perhaps the submitter just likes watching HN'ers fall all over themselves to reflexively point out all the reasons why C++ is, like, the worst language ever? (Someone even mentioned coding Windows in ML-derived languages, I can only imagine Raymond Chen's reaction to that)
- johngunderman 14y agoMySQL, though written in C++, reads more like C with classes. Even then, a large portion of the code is procedural instead of OO. They are slowly moving towards an OO style, but it will take a while before a reasonable percentage of the code base has been re-written.
- apaprocki 14y agoAt Bloomberg, we just published our lowest-level C++ standard library (and plan to add more layers on top).[1] Everything we do is based upon this library and all the higher level layers which are not OSS yet. (i.e., No external 3rd party libs in any of these lowest layers) We CC-BY-SA'd our code standards as well if you're interested.[2] [1]: https://github.com/bloomberg/bsl https://github.com/bloomberg/bsl [2]: https://github.com/bloomberg/bsl/wiki/bdestds.pdf https://github.com/bloomberg/bsl/wiki/bdestds.pdf
- raverbashing 14y agoSincerely, from the bottom of my heart: It doesn't matter I have some familiarity with some of the systems described (and with other systems that use C++). Let me put it this way: - Large enterprise projects are bad - Large enterprise projects in C++ are very bad. It's like giving razor blades to a kindergarten group for a whole afternoon. I wish I was kidding - "Done in C++" is not as important as the capabilities of the platform targeted C++ is good, and very powerful. And I have a million reasons not to use it unless absolutely necessary. If you want to use it I'll give you 3 tips: - Focus on STL and maybe Boost (use it sparringly and wisely! don't overdo it) - Avoid inheritance hell - Don't go crazy with Templates, in fact don't even use them (except for what's in STL already)
- kombine 14y ago> Don't go crazy with Templates, in fact don't even use them (except for what's in STL already) What's wrong with templates? This is the most powerful feature of C++ allowing for Generic programming, Polymorphism and metaprogramming. The latter is of course clunky considering C++ syntax, but overall templates are great. And STL is the best thing that happened to the C-like family of the languages.
- raverbashing 14y agoThe problem is that, as expected in a strongly typed language, you can't do real Generic programming, even with templates. Or even adding another inheritance level (which makes some things easier) Because type 'fixing' (that is, knowing what you need) happens at compile type, for example, duck typing ("even with" dynamic_cast - yes, dynamic_cast works at run-time, but you're limited in what kind of objects - by your inheritance hierarchy - can be present at the time you're doing the dynamic_cast) You end up having to specify the type, you don't have a 'Generic' type. And you may have to deal with dynamic_cast And read again, I'm not against STL, they 'get' templates. Edit: confusing explanation
- kombine 14y ago> You end up having to specify the type, you don't have a 'Generic' type. And you may have to deal with dynamic_cast Do you really need one? Because then you really are dealing with run time polymorphism, whereas templates are all about compile time. I recommend checking D programming language out. It has very powerful templates with a nicer syntax than C++ and a lot of other things aiding metaprogramming. Moreover with Ranges you get an implementation of ideas laid out in STL but with a better syntax and matching the power of what is in proper functional languages.
- jacques_chester 14y agoThe thorough seeding of the list with defunct examples (BeOS, Mac OS < X) gives off a weird vibe. There's also the standard halo effect listing. Any sufficiently large company is using a language / methodology / philosophy / technology you've heard about. And they're being namechecked on that language / methodology / philosophy / technology's website. The classic is Microsoft. Did you know Microsoft uses Scrum? They do! Did you know Microsoft uses ISO 9295-424:54 (Humungo Software Dev Standard Written by the SEI, the DoD and a committee of 200 researchers from different Fortune 50 companies)? They do! (Hint: Microsoft doesn't have a single unified method of development, it's largely up to each section to decide how they do the work)
- cturner 14y agoBeOS is interesting partly because of how it limited use of C++. C++ was the only supported API for userland, but the kernel was C. Found a reference: "Creating a driver on BeOS is done using ANSI C; the C++ language requires certain support which is not available in the BeOS kernel environment." http://testou.free.fr/www.beatjapan.org/mirror/www.be.com/aboutbe/benewsletter/volume_III/Issue7.html#Workshop http://testou.free.fr/www.beatjapan.org/mirror/www.be.com/ab... I remember another newsletter article where one of the devs described techniques for getting C++-like power while remaining within C (heavy use of function pointers in structs, that kind of thing). Another: http://www.haiku-os.org/legacy-docs/benewsletter/Issue4-51.html http://www.haiku-os.org/legacy-docs/benewsletter/Issue4-51.h...
- leakybucket 14y agoThe BeOS userland api had base classes with reserved functions that were there solely to reserve space in the objects vtable becase of the fragile base class problem: http://en.wikipedia.org/wiki/Fragile_binary_interface_problem http://en.wikipedia.org/wiki/Fragile_binary_interface_proble... I wonder how modern C++ frameworks are handling this?
- gurkendoktor 14y agoI think it's simply an old list...if you look modern OS X stack traces, you often see C++ names in various frameworks. Random ones I found in `Console.app` (sadly this is a rather new & stable system): > TCharStreamCFString::~TCharStreamCFString() + 37 (CoreText) [0x7fff9454b091] > JSC::BlockAllocator::blockFreeingThreadMain() + 90 (JavaScriptCore) [0x7fff950fad0a] > CA::Render::Server::server_thread(void) + 403 (QuartzCore) [0x7fff8c6e435b] > TFSInfo::FetchProperties() + 1274 (DesktopServicesPriv) [0x7fff93a7da20] > 0x000000010b50afca ld::tool::InputFiles::forEachInitialAtom(ld::File::AtomHandler&) + 410 Same on iOS... > CoreMotion 0x043d60a2 CLMotionCore::runMotionThread(void) + 1016 I think I even saw a core part of NSAutoreleasePool in there once. I have never read the public Apple source tarballs, but from just seeing stack traces every now and then, it seems as if Apple is very happy with using both Objective C and C++ (the compiler makes this easy of course - e.g. C blocks have support for C++ construction/destruction etc...).
- marme 14y agoMost of amazon.com systems are written in perl mason. Very few systems use c++, I would say not a single major system at Amazon is written in c++. It definitely should not be included in this list
- deleted 14y ago[deleted]
- deleted 14y ago[deleted]
- jamesmcn 14y agoMost of the customer-facing stuff may be written in Mason, but more and more back-end services are written in Java. And there are a lot of back end services. There was a time when Amazon was mostly C++, but it wasn't very recent.
- justrudd 14y agoDisclaimer: I left Amazon in 2008. I've tangentially stayed in contact with a few people there in my old groups. I worked in Supply Chain specifically on the FC side of software (OK...specifically on COFS for those of you who remember) from 2004 till 2007 before moving over to retail. And I can say that all FC software was C and C++. There were small pockets of Java when I left, but I'd be really surprised if ALL of FC software has been ported to Java in the last 4 years. You're talking about 10+ years of software. Software that controls hardware that works as is. Tons of "bugs" and "features" to port. And I'd call the software that runs the warehouses a major system. My team tried to replace a C++ daemon with a Java one and our favourite phrase became "Oh yeah. Forgot about that business rule".
- alexakarpov 14y agoWe actually do have major systems written in C++ - but nearly all of them are legacy, and most have been deprecated already, while the rest is on the deprecation list. It's mostly Java now. Perl/mason is only used on the front-end. Oh, and there's at least one critical service written in Erlang =D
- bborud 14y ago"I felt a great disturbance in the Force, as if millions of voices cried out in terror and were suddenly silenced. I fear something terrible has happened."
- deleted 14y ago[deleted]
- tambourine_man 14y agoThe list seams very old. ImageReady and AppleWorks died years ago.
- damian2000 14y agoHe missed off Windows 8; if I'm not mistaken its written primarily in C++? Also the "native" language for programming against the Windows Runtime SDK is C++, although it can easily be consumed by others like .NET and JS.
- TheAnimus 14y agoThe interesting thing about the list to me is how many of these applications are written in C++ and one or more other languages. There is a certain monotheistic outlook by most developers, and I fear this list does nothing to help it. Everyone knows the merrits and use of C++, surely its not in doubt, but to suggest that its the only solution is frankly silly. An example plucked from the list that intreged me is Sophis, the risk system. The reason is more and more of these systems are been made in Java or .Net, in fact Sophis itself is using more .Net internally with every new revision. The reason being that performance issues are normally far more related to the algo than the language, having a mixture of functional bits thrown in helps the dev make a leaner algo. Mixing such paradigyms is just easier in .Net than C++.
- sprash 14y agoSeems to be a very old list or it might tell you this: If you start a new project, don't use C++. http://harmful.cat-v.org/software/c++/ http://harmful.cat-v.org/software/c++/ tells you everything.
- CCs 14y agoThe link you have is also old - most of the issues reported there are not valid anymore with C++11. BTW, at least for Windows 8 now Microsoft recommends you to start new projects in JavaScript or C++ (in this order).
- deleted 14y ago[deleted]
- CCs 14y agoYes, they fixed many things - and that's good. The alternative is to create a new programming language every year, just to discover it breaks down somewhere else (ask Twitter about Ruby). Memory management is needed for C, but not for C++ or ObjectiveC. I worked years on large C++ systems (>300 developers) without using "new" or "delete". Whenever I develop in Scala or other GC language, I still miss the deterministic destructors. For memory it is OK to be freed anytime, but there are other resources (GPU, file, TCP port) that you still have to manage manually and it needs to be freed right away. It's trivial to write in C++, but I never saw a failsafe C# implementation.
- fusiongyro 14y agoCan you expand on using C++ without "new" or "delete"? I'm curious. I'm learning C++11 now and I'm having trouble seeing how you could do that.
- yannickt 14y agoIf you use smart pointers in your code (std::unique_ptr, std::shared_ptr), you will rarely have to call delete. A unique_ptr for example owns an object through a pointer; the pointer is automatically deleted when the unique_ptr goes out of scope. shared_ptr retains shared ownership through reference counting; the pointer is deleted when the reference count reaches zero.
- arocks 14y agoThis list proves nothing. C++ is often used for performance reasons or even as a target language. Facebook's HipHop compiler converts PHP into C++. I would argue that it means that Facebook develops in PHP rather than C++. Similarly Adobe's most recent product Lightroom was about 63% written in Lua [1] which they attribute to its rapid development. What would be interesting is a table which shows what percentage of developers or projects predominantly develop in C++. I am guessing it would be a much smaller number. [1]: http://www.troygaul.com/LrExposedC4.html http://www.troygaul.com/LrExposedC4.html
- ksec 14y agoYes but the info is very old. I wonder if Adobe is still using it and would provide some sort of update. No Lua IDE from them as they have half promised, or anything i have seen they contribute back to Lua. Was wondering if they were using LuaJIT as well.
- gregsq 14y agoThat's very interesting. I didn't know that about Lua and Lightroom. It's interesting for me as I'm asked a lot by photographer friends about large performance problems with Lightroom. Particularly between versions 3 and 4. Huge number of issues on the boards out there about it. I'm not saying there's a causal relationship. Still, it might be an avenue to investigate for me.
- danieldk 14y agoIt's interesting for me as I'm asked a lot by photographer friends about large performance problems with Lightroom. Wait until you try Aperture, performance-wise Lightroom is heaven. I moved to Lightroom for this very reason. Adobe also supports new Camera's RAW formats earlier than Apple. I never really peeked into the application bundle of Lightroom, but at least some of the plugins that I used were written in Lua.
- gregsq 14y agoNothing against Lightroom though. It's one of my favourite programs from Adobe, together with InDesign. And I've heard that about Aperture, and recently FCP.
- deleted 14y ago[deleted]
- jballanc 14y agoI was one of those who was vehemently anti-C++. Then I read the source code for LLVM (or, large chunks of it...it's a rather large code base). Now I am of the opinion that beautiful things can be created in C++ as well, it just takes considerably more talent than were you to use any other language.
- tjdetwiler 14y agoC++ isn't bad by definition, however a large quantity of C++ out there is just _bad_. Then again most OOP languages get abused pretty badly.
- betterunix 14y agoActually, C++ is bad by definition. The C++ standard has some serious deficiencies that make it harder to write reliable code (and forget maintenance). Part of the problem is that the C++ standard is written with compiler writers in mind, rather than with C++ users in mind, and so some things (like not unwinding the stack until an exception is caught, thus avoiding the double exception fault) are not done, and new problems are simply layered on (like causing the default behavior for exceptions propagating out of destructors to be program termination). At this point, C++ should be placed in the same category as COBOL: it is a language you learn because you need to maintain some old code that nobody has time to rewrite or replace.
- kevinnk 14y ago"the C++ standard is written with compiler writers in mind, rather than with C++ users in mind" Just looking at the enormous lengths compilers have to go through to correctly parse C++ should tell you this isn't true. C++ does have some rather glaring deficiencies, but the idea that they're there to make compiler writers lives easier is outrageous to say the least.
- betterunix 14y agoSure, it is hard to write a C++ compiler. Yet neither the C++98 standard nor TR1 fixed the template/right problem, despite it being a major source of headaches among C++ programmers, because compiler writers complained about the complexity it would have added to the grammar. It was not until the majority of commonly-used C++ compilers began to emit a suggestion about the problem that the committee finally fixed it in C++11, and even then, the committee had to convince compiler writers that it was a good idea. That same pattern of behavior can be seen with the double exception faults: compiler writers were unwilling to put in the effort needed to catch an exception before the stack is unwound (without making compiled code slower), and so instead the standard was updated to further cement the idea that destructors should never throw exceptions. No, it is not purely for compiler writers, but compiler writers and library implementors are a powerful group on the standards committee.
- jcfrei 14y agonotable absentee (and probably the most ubiquitous piece of software) - the linux kernel.
- CCs 14y agoThe Linux Kernel is C (not C++)
- tjdetwiler 14y agoI guess he didn't know how much Linus loves C++.
- jcfrei 14y agothat was my point...
- deleted 14y ago[deleted]
- nnq 14y ago...are you doing some kind of FUD-based trolling or what?
- rbanffy 14y agoSQLite is probably more ubiquitous. Every phone has at least one copy of it statically linked into some executable.
- deleted 14y ago[deleted]
- tuzemec 14y agoTo my knowledge most of the games/game engines are c++. I'm not a hard-core programmer, but I'm frequently interacting with that breed and almost all projects that require high performance are implemented in c++.
- blakesmith 14y agoHonest question: Is C++ really worth the complexity over something like C? I'd love to hear people's technology evaluation thought process when choosing C++. To me, C seems far less complicated, while still providing similar levels of performance. I tend to enjoy languages that are small and get out of my way, but if C++ let's me be that much more productive than C, I'd like to make a serious effort to spend more time with C++. What do I gain from C++ that I can't get from C? Is it worth the tradeoff?
- twoodfin 14y agoThe two things I miss most when writing C instead of C++ are RAII and exceptions. Both relocate and consolidate code unrelated to the intention of a function (resource management and error handling, respectively), making it easier to write, read, maintain and debug. I also find function templates very useful while prototyping: Rather than having to select concrete data types up front, I write a function "as if" I have objects that can perform the operations I need. Now I have a concrete set of requirements (the standards committee calls this a "concept") for my classes. And if I've done it right, whatever abstract idea I've expressed in the function template need never be expressed again. With some practice, it's remarkable how much C++ allows you to remove redundancy and repetition from your code. All without paying much, if any, of an abstraction tax.
- gregsq 14y agoC++ doesn't have to be complicated. It involves such a compoundingly convoluted tool box however that you can create overly complicated contraptions that can explode right in front of you. There was one fundamental decision made back in the day about the copy constructor, where it takes a const reference as its single argument, that removed logically the C pointer problem. It's still possible to reintroduce it, but it helped prove correctness. In other words you can't make something unless the compiler knows that it's made something. Using an address the compiler has to take your word for it. You can think more contractually, as in say Eiffel, where if there is garbage in its not the programmers doing by definition. At its best it cures some C gotchas. At its worst it can be contrived and misapplied. But as I say, you can break it any which way.
- deleted 14y ago
- nmridul 14y agoNot many web frameworks in the list. http://www.webtoolkit.eu/wt http://www.webtoolkit.eu/wt is a good one that should have been there ..