An Ensemble of Programming Languages: How to Build a Platform for Collaboration*
The era of "general-purpose programming languages" is nearing its end. The cost of building a programming language and integrating it with other languages has fallen significantly, but our approach to building programming languages has not changed substantially in decades. The consequence is an enormous financial cost paid, in terms of real dollars as well as in hours of programmer effort. The solution is not yet another "better" general-purpose language but rather a platform that prioritizes a collaborating assortment of specialized languages that together perform well in a specific context: an ensemble of programming languages.
In this talk, I will present the Rubinius language platform as a project that is focused on the idea of multiple specialized languages collaborating in a particular context to solve specific problems.
All programming languages in wide use today are considered “general-purpose” programming languages. They provide facilities for performing tasks that range from adding numbers to writing characters to a file to displaying images on the computer display to sending bits over an internet connection.
Underlying all these languages are components like parsers, compilers, garbage collectors, just-in-time compilers, virtual machines, libraries for reading and writing JSON, etc.
While some of these virtual machines are “targeted”, or used, by a variety of programming languages, almost no other components in a programming language ecosystem are shared. This means that every programming language generally writes their own package management system, their own set of libraries, and their own tools, like the parser, compiler, debugger, etc.
The cost of this is enormous. It is said that it takes 10 years for a significant piece of technology, like a language virtual machine, to mature. That constitutes hundreds, if not thousands, of programmer years of effort. Not only is the direct cost enormous, but there is also a very high indirect cost of being dependent on such a costly technology when it does not meet the needs of a different well. An example of this is the many C libraries that are used in other languages via some sort of binding.
But technology like virtual machines, parsers, and compilers have a learning curve and as we learn more about them, their cost falls. I assert that the actual cost of building a programming language today is a fraction of what it once was, but we are still building languages in a manner that was based on the old cost structure. If we take advantage of the reduced cost, we can experiment with languages as the powerful information tools that they are. In a construction analogy, we are still using hammers, nails, and planks of wood. We haven’t yet built bulldozers and cranes and arc welders.
To do so, however, requires a fundamental shift in perspective. We can no longer focus on a single language that “owns” or “rules” the world. Instead, we must focus on precisely the facilities that enable and support collaboration among an assortment of languages to effectively solve a particular problem. This recognizes that there are often inherent tensions in different aspects of the same programming language. More importantly, it opens the world to more people to solve their own problems. No longer is programming stratified as those who provide the tools and those who use them. Everyone should be empowered to provide the tools they need to solve their problems.
programming languages, collaboration platforms, problem solving, tools
I have previously spoken at Open Source Bridge, RubyConf, SoCoded 2015, Philly Emerging Tech for the Enterprise 2015, and various other events. I have never given this particular talk before, but some of the ideas in the talk were discussed in my SoCoded and Philly ETE talks.
I have been “writing code” since my first encounter with an Apple IIe in 1985. My first serious encounter with open source came in the mid 90s, browsing the sunsite add-on CD with the Slackware Linux distribution. Through this I discovered many interesting things, including Erlang and Ruby, neither of which I took seriously. Years later I rediscovered Ruby in the era Before Rails and used it extensively. Since 2006, I’ve contributed to Rubinius and in 2015, founded Rubinius, Inc, one of the goals of which is to make Rubinius development sustainable. Computer languages are the most powerful tools of the digital information age, and my focus is bringing the ability to build and manipulate those tools to the widest audience, especially to people who have been excluded from dominant social structures.
- Title: An Ensemble of Programming Languages: How to Build a Platform for Collaboration
- Track: Theory
- Room: B304
- Time: 1:30 – 2:15pm
The era of “general-purpose programming languages” is nearing its end. The cost of building a programming language and integrating it with other languages has fallen significantly, but our approach to building programming languages has not changed substantially in decades. The consequence is an enormous financial cost paid, in terms of real dollars as well as in hours of programmer effort. The solution is not yet another “better” general-purpose language but rather a platform that prioritizes a collaborating assortment of specialized languages that together perform well in a specific context: an ensemble of programming languages.
- Speakers: Brian Shirai