Saturday 1 April 2017 Jon Pretty

Introducing Skala: A New Vision for Dotty

We are very proud today to be able to reveal that Dotty, sometimes referred to as “Scala 3”, will now officially be known as, “Skala”. And for the first time, we are delighted to announce that Skala will be adopting German keywords and syntax.

Designing programming languages based on English is a recurrent historical leitmotif, but – this April – we felt that as Britain moves away from the European Union, taking much of the influence of the English language with it, now is the perfect time to make the transition to a superior language.

Just a few years ago Dotty was a mere twinkling in the eye of Martin Odersky, but it was then that he first envisaged a successor to Scala based on German. We met up with Prof Odersky, Skala’s übermensch, at the Skala launchfest in a Munich biergarten to find out more about this exciting development.

“I always felt that the English in Scala was a weak ersatz, and risked leaving it in a hinterland in the long-term, so I realised then that I had to take this decisive diktat to set Skala on the right track for a bright future. It’s a very pragmatic move; very realpolitik…” says Odersky.

The Scala community aren’t neanderthals, though the transition may be harder for some people than others, so as long as we are all finding our feet in “Skala kindergarten”, we will not be making the English keywords verboten immediately. And any existing Scala users concerned about feeling like ausländers should not worry: over the coming months, the Skalazentrum (formerly the Scala Center) will have a blitz to convert existing Scala source code to Skala.

The Skalazentrum continues to do some very important work on Skalafix, supporting automatic code rewriting between Scala and Skala. It already supports many of the Glitzy new features first introduced in Dotty, and support for German keywords will be a trivial addition.

About the Changes

Martin goes on, “One aspect of Scala’s keywords I always liked was that val , var and def were all the same length, so identifier names would align vertically. It just looked beautiful! We’ve managed to retain that property with the new keywords, unveränderliche , opportunistisch and verfahrensweise , whilst giving each of them more character, and indeed more characters. I’m particularly fond of opportunistisch , which exemplifies how every programmer should feel about using mutable state. And while val and var were near-doppelgangers, unveränderliche and opportunistisch are now much more easily disambiguated.”

Some users may have angst about typing characters such as ü and ß , but Odersky dismisses this idea: “Being completely unable to enter half the syntax on an English keyboard may make coding slower, but that never seemed to hold Scalaz back.”

It won’t be long before talk of do / while loops, try / catch / finally blocks and if / then / else expressions, are a thing of the past, and mach / während loops, versuche / fang / endlich blocks and sofern / gegebenenfalls / andernfalls expressions become part of the programming zeitgeist.

We took choosing the new German keywords as an opportunity to improve upon their old English variants. For example, ich sounds much more personal than this , implementationsdefiniert conveys the meaning of abstract so much more concretely, and erbt saves typing a few characters over the more verbose extends . Skala also introduces the new keyword, auffaltungsanleitung – called inline in Dotty – but now with a more explanatory name.

“Also, many people criticize the concept of implicits as masochistic. That’s why I decided to not talk about them, to keep quiet, to be stillschweigend in a sense. And I’m very happy that the new keyword makes this feeling implicit.”

“I have often been approached about the suitability of Scala in the enterprise. Maybe it’s just schadenfreude, but to better reflect corporate hierarchies, super ’s replacement keyword, vorgesetzte , makes it clear that the programmer has to defer to their manager.”

In this update, we also wanted to acknowledge that German is not the only language programmers use, so we settled on replacing the return keyword, which we didn’t care much about anyway, with retoure , a French word loaned to German.

Here is a full list of Skala keywords:

implementationsdefiniert muster klasse fang verfahrensweise mach andernfalls erbt unrichtig letzte endlich für gegeben sofern stillschweigend einführen auffaltungsanleitung faul kompilationsroutine vergleiche erzeuge nichtig entität überschreiben paket vertraulich zugangsbeschränkt retoure versiegelt vorgesetzte gegebenenfalls ich wirf charakterzug wahrhaftig versuche sorte unveränderliche opportunistisch außerdem währen vorfahrtGewähren

Try it out!

One of the biggest ongoing efforts of the newly-renamed Skalazentrum is the development of the new collections library, which will form the basis for the data structures we use on a daily basis in Skala. We have already completed work on translating the current Strawman Collections to Skala, and to offer a first glimpse of the improved readability of Skala code, you can browse some Skala source code here (dead link: https://github.com/propensive/collection-strawman/blob/master/src/main/scala/strawman/collection/View.scala). We are working with GitHub to support syntax highlighting for Skala, but it’s not there yet.

You can also try out Skala for yourself today with the fully-functional compiler and REPL. Instructions on running the compiler are in the README file.

Future Work

This is just the first step in Skala’s journey, but that journey is not yet complete.

One of Scala’s great innovations was support for using method names in infix position, and Odersky would like to take that one step further to make all method applications postfix by default. As Mark Twain observes in his appraisal of German sentence structure, “…the writer [appends] ‘haben sind gewesen gehabt haben geworden sein,’ or words to that effect, and the monument is finished.” To Odersky, postfix verbs are like “the alpenglow of a sentence”.

A problem Scala always suffered from was that it was never clear what was an object, or “noun”, and what was a method, or “verb”. Soon, Skala will require that all objects start with a capital letter, and all methods start with a lower-case character. This will mean some changes to pattern matching, but as Odersky says, “most people never knew the rules about capitalization of identifiers in patterns anyway, and the backtick syntax will continue to be available, so for me it’s worth the compromise”.

Another great feature of German, separable verbs, is on the cards for Skala, too. Odersky explains, “People often accuse German of combining multiple words into a single word. But English can be just as clumsy: Why use just one word, “map”, to describe the method of a functor when, conceptually, you bilde the list ab? That ab isn’t just some insignificant particle; it changes the whole meaning of bilde!” So Skala will soon be supporting this convenient syntax for separable method names,

list.bilde(_ + 1)ab

and remembering that verfahrensweise is the keyword formerly known as def , we can define this new method with,

verfahrensweise bilde[A](f: E => R)ab = ...

One more planned change to Skala’s syntax is the elimination of unnecessary spaces between modifiers and definitions. It was always a frustration to Odersky that abstract override lazy val could not be a single word. “It’s a single concept, so why not?” he asks, incredulously. Yet the reason was always that forming compound words simply didn’t work so well in English; but in German, writing implementationsdefiniertüberschreibenfaulunveränderliche is completely natural, so we intend to fully embrace it.

Get involved!

We have come a long way in getting Skala to this stage, and there continues to be much exciting work going into the language. With the help of organizations like the Skalazentrum, Typstufe, events like Skala World and inclusive groups like SkalaBridge, we hope to grow the community around this ambitious new language. So I hope you will join with us in embracing this bold step towards a better zukunft.

Editor’s note: this article is dedicated to all the non-native English speakers who use, persevere with and contribute to Scala in English. Thank you. We are also grateful to Lars Hupel for his assistance with some of the translations.