Creators of two dozen new programming languages–some designed to enable powerful new Web applications and mobile devices–presented their work last week in Portland, OR. The reason for the gathering was the first Emerging Languages Camp at the O’Reilly Open Source Convention.
The designers included hobbyists eager to flex their development muscles, academics hoping to influence the next generation of computing, and researchers from corporations like Microsoft and Google who want new tools to address evolving applications and infrastructure.
In dense 20-minute presentations, designers shared details of their embryonic languages. What all the designers had in common was a desire to shed decades-old programming conventions that seem increasingly ill-suited to modern computing–a desire shared by the tech industry at large. “There’s a renaissance in language design at the moment,” says Rob Pike, an engineer at Google and codesigner of Go, a programming language being developed at the company. “And the biggest reason for it is that the existing mainstream languages just aren’t solving the problems people want solved.”
One of those problems, of great interest to large enterprises like Google as well as Facebook and Amazon, is how to manage the exploding complexity of distributed, multicore computing platforms like data centers and cloud networks. Google’s Go language was unveiled in late 2009 for this purpose as an alternative to C++, which, according to Pike, does not allow programmers to easily take advantage of modern parallel computing architecture. “C++, which is the main systems language at Google and a lot of other places, is essentially 20 years old now,” Pike says. “Many of the things we understand now about hardware and networking–and how they’re changing software design ideas–haven’t had a chance to affect the design of that language.”
On Google’s scale, Pike and his teammates found that C++ limited productivity by taking minutes or hours to compile. (Compiling is the process in which human-readable source code is batch-translated into binary “machine language” that a computer’s CPU can execute). Go reduces redundancies in the compiling process, which means that “programs can be ready to execute in a matter of seconds,” says Pike. Pike doesn’t think that Go will push aside C++ as a dominant language; “we just thought it needed some competition,” he says, but adds that Go is already being used on “real projects” internally at Google.
Another evolving area of computing concerns programs running on mobile devices linked in “ad hoc” wireless networks. AmbientTalk, an experimental language presented by Tom Van Cutsem from Vrije Universiteit Brussel in Belgium, explores a new paradigm called “ambient-oriented programming,” which departs from traditional distributed computing in two main ways. First, it does not rely on central infrastructure. Second, it assumes that network connections are volatile and unpredictable (as is usually the case with mobile devices passing in and out of range with each other). According to Van Cutsem, “AmbientTalk is smart enough to buffer messages so that when the connection drops, they’re not lost, and when the connection is restored, it sends the messages through as if nothing happened.”
When designing an embedded system choosing which tools to use often comes down to building a custom solution or buying off-the-shelf tools.