Dossier Scala

Scala im Experten-Check: Java 8 versus Scala – wer gewinnt?

Redaktion JAXenter

Im Themen-Dossier Scala gehen wir der Frage nach, wo die populäre JVM-Sprache sich derzeit verortet und wohin die Reise geht. Im Experten-Check vermitteln uns sechs erfahrene Scala-Entwickler ihre Sichtweise auf Scala. In Teil 2 geht es um die Unterschiede zwischen Scala und der funktionalen Programmierung mit Java-8-Lambda-Expressions.

Durchstarten-mit-Scala_Auflage2_2400x_rgb-220x315Kommentieren und gewinnen!
Diskutieren Sie mit! Unter allen konstruktiven Kommentaren zum Experten-Check Scala verlosen wir drei Exemplare des Buches „Durchstarten mit Scala von Heiko Seeberger.

Ihre Meinung zählt!

Seit Java 8 geht funktionales Programmieren auch in Java. Was heißt das für Scala?

Die Scala-Experten

heiko seeberger

Heiko Seeberger: Fellow bei codecentric. Autor des Buches „Durchstarten mit Scala.“ @hseeberger

Julian Tournay: CTO at @mfg_labs und Autor von jto/validation

Julian Tournay: CTO at @mfg_labs und Autor von jto/validation

daniela sfregola

Daniela Sfregola: Bloggerin und Tech Leader bei PayTouch. @DanielaSfregola

ivan

Ivan Kusalic: Software Engineer bei HERE. Organisator des Berliner Software Craftsmanship meetup, SoCraTes. @ikusalic

Daniel Westheide

Daniel Westheide: Consultant bei innoQ. Autor von „The Neophyte’s Guide to Scala.“ @kaffeecoder

markus Hauck

Markus Hauck: IT Consultant und Scala Trainer bei codecentric.

Heiko Seeberger: Nur durch den Einzug von Lambdas wird Java keine funktionale Programmiersprache – Scala ist übrigens auch keine, zumindest keine rein funktionale. Man sieht das sehr gut daran, wie Lambdas in die Collection Library des JDK eingebettet wurden: über Streams, denn direkt auf den veränderlichen Collections kann man natürlich nicht mit funktionalen Konzepten arbeiten. Möglicherweise ist Java 8 sogar eine Einstiegsdroge für Scala oder andere funktionale Sprachen, weil die Entwickler durch Java 8 funktionale Konzepte kennen und schätzen lernen und dann über den Tellerrand hinausschauen.

Daniel Westheide: Ich finde, Lambda Expressions machen noch keine funktionale Programmiersprache aus. Man kann zwar in Java 8 auch funktional programmieren, richtig gut wird das aber nicht unterstützt. So gibt es zum Beispiel keine ordentliche Unterstützung für Currying, was zum Teil auch mit der schlechteren Typ-Inferenz zu tun at. Auch gehört zu einer funktionalen Programmiersprache eine Standard-Library, die voll auf unveränderbare Datenstrukturen setzt. Das ist bei Java und dem ganzen Ökosystem drum herum nicht der Fall. Scala hingegen setzt voll auf unveränderbare Datenstrukturen, die zudem in der Scala Collections Library aufgrund von Structural Sharing effizienter umgesetzt sind. Da alle Datentypen und -strukturen im Normfallfall unveränderbar sind, bewirkt, dass man, anders als in Java, auf teures defensives Kopieren verzichten kann. Darüber hinaus bietet Scala mit For-Comprehensions, Case Classes, Pattern Matching und Typeclasses eine Menge an Werkzeugen, die zum funktionalen Programmieren in einer statisch typisierten Sprache dazu gehören und die ich auch in Java 8 sehr vermissen würde.

Ivan Kusalic: Lambdas machen nur einen kleinen Teil der funktionalen Programmierung aus. Java ist in seinen Hauptzügen immer noch eine imperative Objektorientierte Sprache. Wie sieht es in Java zum Beispiel mit Currying, Pattern Matching, Higher Kinds und Immutability aus, um nur einige Dinge zu nennen? Java 8 war gewiss ein Schritt in die richtige Richtung, aber ohne Kompatibilitätsbrüche zu riskieren wird Java niemals Scala sein. Und das ist völlig in Ordnung, beide Sprachen haben ihren Nutzen. Doch zu sagen, dass Java 8 eine funktionale Sprache sei, ist meiner Meinung nach nicht gerechtfertigt.

Lesen Sie auch: Scala-Experten-Check Teil 1: Warum Scala und nicht Java?

Markus Hauck: Funktionale Programmierung ist viel mehr als nur Lambda Expressions. Diese stellen nur einen kleinen Teil dar. Es geht um eine andere Art, Software zu schreiben und zu organisieren. Java und das Java-Ökosystem sind auf Objektorientierung ausgerichtet. Will man also in Java funktional programmiern, muss man sich das hart erkämpfen, während man in Scala von Beginn an sanft in die richtige Richtung gelenkt wird. Ich denke, um funktional in Java programmieren zu können, muss man erst einmal eine andere Sprache zur Hand nehmen, um zu lernen, was Funkttionale Programmierung überhaupt ausmacht. Da sich Scala dazu anbietet, warum sollte man danach wieder zurück zu Java?

Daniela Sfregola: Ich denke nicht, dass Scala durch die Einführung der Lanbda-Funktionen in Java 8 seinen Charme verloren hat. Ich glaube sogar, das Gegenteil ist der Fall! Scala bietet immer noch zahlreiche Features, die Java fehlen: Implicits, For-Comprehensions, Traits, Type Inference, Case Classes, Currency Support, Immutable Collections…. und vieles mehr! Die Lambda-Expressions in Java 8 stellen für Objektorientierte Programmierer eine Gelegenheit dar, erstmalig mit der Mächtigkeit der Funktionalen Programmierung in Berührung zu kommen – bevor sie dann mit Sprachen wie Scala oder Haskell voll in die dunkle Macht eintauchen.

Julien Tournay: Die Lambda-Ausdrücke waren sicherlich ein in der Java-Community heiß erwartetes Feature. Obgleich die Lambdas ein Schritt nach vorne sind, ermöglichen sie alleine doch keineswegs schon funktionales Programmieren in Java. Eine wirklich funktionale Programmiersprache muss zumindest eine erstklassige Unterstützung für Immutables aufweisen. Lambdas bieten einfache funktionale Techniken, und ich freue mich sehr darüber, dass die Java Community von dieser neuen Welt an Möglichkeiten begeistert ist. Aber wahrscheinlich wird Java dennoch stets eine hauptsächlich Objektorientierte Sprache bleiben.

 

Sollte sich Scala in Zukunft mehr als Mainstream-Sprache wie Java positionieren – Stichwort Rückwärtskompatibilität – oder würdest du mehr innovative Neuerungen begrüßen?

Daniel Westheide: Das aktuelle Tempo finde ich ganz in Ordnung. Die Zeiten, in denen man ständig mit inkompatiblen Änderungen konfrontiert war, sind ja schon eine Weile vorbei. Dass sich Scala in den letzten Jahren stark verbreitet hat und auch schon in große, traditionelle Unternehmen vorgedrungen ist, zeigt ja, dass es um die Abwärtskompatibilät ausreichend gut bestellt ist. Wer mehr und schnellere Innovation will, hat immerhin noch die Wahl, auf den Typelevel- Fork von Scala zurückzugreifen.

Julien Tournay: Das ist nicht einfach zu beantworten. Rückwärtskompatibilität ist extrem wichtig, und man sollte sehr vorsichtig sein, sie auf Sprachniveau zu brechen. Die Python-Community hat das beim Release von Python 3 auf die harte Tour lernen müssen, da die neue Version es nach all den Jahren noch immer nicht geschafft hat, Python 2 zu ersetzen. Alles in allem hoffe ich, dass die Scala-Sprache sich weiterentwickeln und verbessern wird. Ich verfolge die Arbeiten an Dotty (der nächsten Scala-Hauptversion) mit sehr großem Interesse.

Heiko Seeberger: Interessanterweise ist die Mär von der fehlenden Kompatibilität einfach nicht tot zu kriegen. Dabei ist Scala seit Version 2.9 – also seit 2011 – bei Minor Releases 100% kompatibel. Das war zuvor nicht der Fall, was tatsächlich sehr lästig war. Wenn heute alle zwei Jahre ein Major Release herauskommt, welches zuvor als @deprecated gekennzeichnete APIs entfernt, dann begrüße ich das ausdrücklich. Für mich geht Scala genau den richtigen Weg, indem genügend Rücksicht auf Kompatibilität genommen wird und gleichzeitig Innovation stattfindet.

scala-iconDossier Scala
Im Themen-Dossier „Scala“ dreht sich alles um die JVM-Sprache Scala. Nach unserer Einführung in die grundlegenden Konzepte von Scala ordnet Martin Odersky die Evolution Scalas für uns im Interview ein. Außerdem beleuchten wir den reaktiven Technologie-Stack um Scala in all seinen Facetten und lassen Scala-Entwickler zu Wort kommen, um uns von ihren persönlichen Scala-Tops und Flops zu berichten.
Bisher erschienen:

Daniela Sfregola: Ich denke, Scala sollte beides machen! Für jede Sprache ist es extrem wichtig, eine weite Verbreitung und eine gute Open-Source-Community im Rücken zu haben. Je populärer die Sprache ist, desto einfacher ist es, Unterstützung zu erhalten. Es ist also sehr wichtig, Rücksicht auf die Rückwärtskompatibilität zwischen zwei Versionen zu nehmen. Allerdings denke ich auch, dass, wenn die Community einen Breaking Change oder neue innovative Features verlangen würde, der Bruch der Kompatibilität mit früheren Versionen eine echte Option darstellen sollte, um die Sprache lebendig und für Entwickler ansprechend zu halten.

Ivan Kusalic: Hm, das ist eine schwierige Frage – natürlich will ich beides 🙂

Bis heute nutzen immer mehr Unternehmen Scala, sodass Rückwärtskompatibilität wichtiger wird. Doch das ist kein Grund, warum die Sprache aufhören sollte, sich weiterzuentwickeln. Es gibt hoffentlich einen goldenen Mittelweg zwischen dem früheren Scala-Verhalten und der zu konservativen Java-Evolution.

Markus Hauck: Für mich ist und bleibt Scala eine innovative Sprache. Gerade wenn man explorativ die Sprache weiterentwickelt, ist es wichtig, auch Misserfolge hinter sich lassen zu können, und das hat Scala bisher gut gemacht. Für mich spielt natürlich auch Abwärtskompatibilität eine Rolle, aber nicht um jeden Preis.

Im Teil 3 des Experten-Checks gehen wir auf die Reactive Platform ein, die sich um Scala gebildet hat. Stay tuned!

 

Durchstarten-mit-Scala_Auflage2_2400x_rgb-220x315Und Sie? Kommentieren und gewinnen!

Wie hat die Einführung der Lambda-Ausdrücke in Java 8 Ihre Wahrnehmung von Scala verschoben? Wie sollte sich Scala Ihrer Meinung nach weiterentwickeln?

Kommentieren Sie hier!

Unter allen konstruktiven Kommentaren zum Experten-Check Scala verlosen wir drei Exemplare des Buches „Durchstarten mit Scala“ von Heiko Seeberger. (Vergessen Sie hierfür nicht, Ihre E-Mail-Adresse anzugeben).

Ihre Meinung zählt!

Verwandte Themen:

Geschrieben von
Kommentare

Hinterlasse einen Kommentar

4 Kommentare auf "Scala im Experten-Check: Java 8 versus Scala – wer gewinnt?"

avatar
400
  Subscribe  
Benachrichtige mich zu:
Alistair Bitchy
Gast

Buzztalk von den Experten über eine experimentelle Sprache, die auf der JVM aufsetzt. Das ist schön und gut. Die Infrastruktur ist ja so weit auch erstmal völlig in Ordnung. Das wichtigste ist getan.

mucha
Gast

Experiemente sind manchmal nötig für Innovation – aber scala eine experimentelle Sprachen nennen? Die Experiemente in Scala finden nicht mehr in den stable versions statt. Der Hype um Scala ist bestimmt vorbei, aber seine stabile Nische hat die Sprache auch gefunden – twittr, spark, etc.

aumand
Gast

ich habe bisher kaum erfahrung in scala. Meine ersten Gehversuche beschränkten sich auf die ’seven languages in seven weeks‘ sowie kleineren spielereien mit der kombi java/scala (private projekte)..

Mit dem Einzug von Java8 hat sich mein scala-‚haupteinsatzweck‘ – schlankerer / intuitiverer code beim arbeiten mit collections (z.b. gruppierung der elemente nach gewissen kriterien) – wieder relativiert.

Was mich mehr und mehr richtung scala ‚blicken‘ lässt:

– gesundes verhältnis an innovativen neuerungen und rückwärtskompatibilität
– unkomplizierte verwendung von aktoren mit akka (scheint in scala durch zb pattern matching sehr elegant zu funktionieren)

Generell steht scala auf meiner ‚horizonterweiterung‘ relativ weit oben..

matze
Gast
Ich habe mich bisher nur im privaten Bereich etwas mit Scala beschäftigt. Mit Java 8 hat das Interesse an Scala bei mir wieder etwas nachgelassen. Es ist sicher richtig, was viele der Experten oben geäußert haben: Die Einführung von Lambdas macht Java lange nicht nicht zu einer funktionalen Sprache, sondern war nur ein kleiner Schritt in diese Richtung. Viel mehr ist mit der bei Java traditionell hochgehaltenen Rückwärtskompatibilität nicht möglich. Meiner Meinung nach hätte man bei Java schon immer zumindest ein bisschen mutiger sein können… Ich persönlich habe mit Java das typische Henne-Ei-Problem: Dort, wo es industriell bereits eingesetzt wird,… Read more »