Programming languages are living phenomena: They're born, the lucky ones that don't die in infancy live sometimes long, fruitful lives, and then inevitably enter a period of decline. Unlike real life, the decline can last many, many years as the presence of large legacy codebases means practiced hands must tend the code for decades. The more popular the language once was, the longer this period of decline will be.
- The Role of the WAN in Your Hybrid Cloud
- Book Expert: Advanced Analytics with Spark: Patterns for Learning Data at Scale
The emergence of a new language, however, is almost always tied to needs in a specific sector. For example, Ruby's sudden adoption when Ruby on Rails appeared, and Objective-C's surge, which began in 2007 when the iPhone first shipped. So, understanding the movements up or down the fluctuations as well as the trends often delivers valuable insights into the current coding issues.
The most recent processor phenomenon the transition from the multicore to many-core era was expected to set the stage for the emergence of functional languages, which fit well with concurrent programming. But most surveys from 2012 still show no major breakthrough. If a functional language does separate from the pack, the leading candidates are Scala and Clojure, with Scala enjoying the greater adoption right now. (Per Ohloh's language figures, which cover all open source projects, and Google trends, which indicate search traffic. On the venerable Tiobe index, which tracks the number of Web pages that mention a given language, Haskell, Erlang, and Scala are effectively tied and ahead of Clojure.)
Language popularity numbers tend to frustrate advocates both for and against certain languages. For years, the fall of Java has been predicted for example. But numbers from the aforementioned three sources suggest otherwise. Java, year over year, is effectively unchanged during the last three years. It is holds either the #1 or #2 (behind C) spot in all major language surveys. This might appear to indicate that the constant complaints about the language and the availability numerous alternatives that run on the JVM (JRuby, Scala, Kotlin, Clojure, Fantom, Gosu, and the rest) have not diminished Java's popularity. However, I think the greater truth is that the language is in decline in its traditional settings, but that the popularity of Android has made up for the shortfall.
The other major mobile language, Objective-C, did well, too: It surged in the Tiobe index (garnering the most growth of any language year over year). On Google trends, it has remained at the same high levels it reached after 2007 (when the first iPhone was launched and mobile development came into its own). However, if Android continues to eat into Apple's worldwide market share, we should expect to see Objective-C stabilize and Java grow.
The primary native languages, C and C++, remained effectively the same, rising or falling slightly in the various surveys. The numbers undermine the hope articulated by Microsoft's Herb Sutter that we would see a C++ "renaissance." Google Trends for the last five years shows a steady drop in queries about C++:
Most established languages see a downtrend in Google queries over the last five years, so the decline is not inherently damning although if a renaissance were afoot, you'd expect to see some upturn. Other indicators of the language (such as changed LOCs in OSS) are, in fact, holding steady. Some even have increased slightly. I think that part of Sutter's hope of renewal was based on C++11 being finalized and the expectation of greater adoption of the language in conjunction with the release of Windows 8. However, I can see nothing that suggests this is occurring. In fact, I can find no evidence that C++ is breaking into new niches at a pace that will affect the language's overall numbers. For that to happen, it would need to emerge as a primary language in one of today's busiest sectors: mobile, or the cloud, or big data. Time will tell, but I feel comfortable projecting that C++ will continue to grow in its traditional niches and will advance at the same rate as those niches grow.
Other quick thoughts: Lua and Tcl, the two languages most used for embedding in C and C++, continue to head in opposite directions. Lua is widely used in gaming and the advent of the new, screamingly fast LuaJIT has made it an attractive option even in performance-sensitive contexts. Tcl meanwhile continues its decline, which has been attributed by insiders to core design issues, slow releases, and poor marketing decisions.
In 2012, we covered several emerging languages we thought had good potential for breaking into the mainstream, notably D, Go, and Dart. While they have not yet entered the premier tier, they are slowly working their way forward and gaining adherents. We will examine more new and interesting languages this year and report on their progress as they vie for developer love.