Adam Bard writes about programming, mainly Clojure, with language comparisons, tutorials and GitHub language popularity statistics.
HN links it for 'Top GitHub Languages' stats and a real-world comparison of the same web app in PHP, Python, Ruby and Clojure.
Microsoft's Office suite is primarily C++. There was an attempt to start using more C# a couple years ago, but it's still mostly C++.
On a closed-source project, it's hard to get the details. But the open source projects, however, we can get a very clear picture.
OpenOffice: [1]
10.4 million lines of C++
1.2 million lines of Java
*edit* noticed you mentioned LibreOffice, not OpenOffice
LibreOffice: [2]
5.7 million lines of C++
0.4 million lines of Java
Firefox: [3]
4.0 million lines of C++
1.8 million lines of C
1.7 million lines of javascript
MySql: [4]
7.0 million lines of C++
4.0 million lines of C
0.4 million lines of javascript
0.3 million lines of Java
The point I'm trying to make is that C++ is widely used, and definitely not used just for gaming.
> Most new development isn't done in C++
Whether or not C++ is the right choice for new development is a different question. Github posted their top 20 languages for new repositories in 2013 [5]. C++ is #6 and has more new projects than C, Objective-C and C#. Even if it's fading in popularity, that's still a lot of new projects in C++.
[1] http://www.ohloh.net/p/openoffice/analyses/latest/languages_summary
[2] http://www.ohloh.net/p/libreoffice/analyses/latest/languages_summary
[3] https://www.ohloh.net/p/firefox/analyses/latest/languages_summary
[4] http://www.ohloh.net/p/mysql/analyses/latest/languages_summary
[5] http://adambard.com/blog/top-github-languages-for-2013-so-far/
I don't have an answer for you, but for the last year I have been learning Clojure, and I have found it fascinating. I do not think this will satisfy you, but I would like to share some of the things that I find interesting about Clojure.
Lately I've been studying the source code of Aleph, a web server written by Zach Tellman. Zach is a very smart guy, and reading his source code is an education (I've actually found this true of the majority of Clojure projects: the quality of the code is very good, and Clojure is the only language I've worked with so far where I have been able to learn so much reading the source code of the 3rd party libraries that I rely on).
Let's start with an interesting comment about Java, on StackOverflow:
Why doesn't more Java code use PipedInputStream / PipedOutputStream?
http://stackoverflow.com/questions/484119/why-doesnt-more-java-code-use-pipedinputstream-pipedoutputstream
In response to that question, matt_b suggests this is part of the reason why people don't use pipedinputstream or pipedoutputstream:
"Typically, data is read from a PipedInputStream object by one thread and data is written to the corresponding PipedOutputStream by some other thread. Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread."
So now, look at how PipedInputStream and PipedOutputStream are used in Aleph:
https://github.com/ztellman/aleph/blob/perf/src/aleph/formats.clj
In particular, look at this…
What is "significant penetration" from your perspective? It is very young (as a 1.0, not even 2 years old). What language would you compare it to, and where was that language at 2 years old?
What was Java adoption in 1998? What was Scala adoption in 2006? What was Python adoption in 1996.
Unless the trend lines shift, Go is a IMHO something of a phenomenon. It seems to hit a lot of sweet spots in deployment, tooling and simplicity that is making a lot of groups happy. It is already being used to build tools people depend on (docker [just raised 15M], packer, nsq, juju, heka, coreOS), it is fast (http://www.techempower.com/benchmarks/) ... additionally, it seems to have decent penetration on both ends of the spectrum, large enterprises and tiny start-ups are choosing it (http://code.google.com/p/go-wiki/wiki/GoUsers), DevOps and Software Engineers are living together in rare harmony due to painless deploys and handoffs.
If you want to use GitHub as a barometer of language popularity ... http://adambard.com/blog/top-github-languages-for-2013-so-far/ --- Go is tracking darn close to Scala, despite being 8 years younger.
You can do multiple dispatching in Python, by hand or with decorators, but it can get kind of awkward, not as elegant as CLOS's and Dylan's approach with generic functions.
https://www.artima.com/weblogs/viewpost.jsp?thread=101605
Five-minute Multimethods in Python,
by Guido van van Rossum.
I used to believe that multimethods were so advanced I would never need them. Well, maybe I still believe that, but here's a quick and dirty implementation of multimethods so you can see for yourself. Some assembly required; advanced functionality left as an exercise for the reader.
https://python-3-patterns-idioms-test.readthedocs.io/en/latest/MultipleDispatching.html
https://pythonhosted.org/multidispatch/
https://adambard.com/blog/implementing-multimethods-in-python/
https://opendylan.org/documentation/intro-dylan/multiple-dispatch.html
https://opendylan.org/documentation/intro-dylan/objects.html#generic-functions-objects
https://en.wikipedia.org/wiki/Multiple_dispatch
https://en.wikipedia.org/wiki/Generic_function
I always find the TIOBE Index fascinating, but mainly because I just don't get it! I have no idea how any index can rank Transact-SQL (not even just 'sql') over JavaScript.
I'm not sure where the index pulls in its data, but if its putting a specific branch of SQL ahead of JavaScript, I've got to say I disagree.
It does, however, provide a really interesting comparison to the GitHub version of the popularity contest. This article shows quite a different picture: http://adambard.com/blog/top-github-languages-2014/ (albeit a month or two stale now)
The most surprising thing I see from both these lists, however, is that even though we've had decades of programming-language progress, straight-up C still has a hugely strong showing. Sometimes simple is still the best, I guess!
> One of the reasons why Lisp is fading into irrelevance is that GC is obsolete tech.
RAII, smart pointers and ARC aren't free lunches, which is why people had moved from them to GC in the first place.
Of the top 10 languages on github [1] that require memory management, 7 of them use GC [2].
> This is also a factor in why Android phones are orders of magnitude slower than equivalently-specced iPhones
That's a pretty nutty assertion to make without data.
1: http://adambard.com/blog/top-github-languages-2014/
2: Discluding CSS and shell since they don't require memory management. Python's default implementation actually has both RC and GC.