Suchen

Golang und Kotlin im Vergleich

| Autor / Redakteur: Filipe Martins und Anna Kobylinska / Stephan Augsten

Die beiden Cloud-nativen Sprachen Go und Kotlin bringen ein ganzes Spektrum innovativer Features speziell für Microservices mit. Sie locken gegenüber althergebrachten Alternativen mit dem Versprechen, verteilte Anwendungsausführung auf ein neues Niveau leichtgewichtiger Elastizität zu heben. Entwickler von Cloud-Anwendungen haben jetzt wieder die Qual der Wahl.

Wer macht im Cloud-nativen Umfeld das Rennen: Go oder Kotlin?
Wer macht im Cloud-nativen Umfeld das Rennen: Go oder Kotlin?
(Bild: dimitrisvetsikas1969 / Pixabay )

Das Aufkommen Cloud-nativer Microservices läutet eine neue Ära der Softwareentwicklung ein. Für monolithische Anwendungen, die weder skalieren können noch selbstheilende Eigenschaften aufweisen, hat scheinbar das letzte Stündlein geschlagen.

Im Tiobe Programming Community Index ist die Stagnation der C- und Java-Sprachfamilie nicht zu übersehen. Google lanciert gleich zwei würdige Nachfolger: Go und Kotlin.
Im Tiobe Programming Community Index ist die Stagnation der C- und Java-Sprachfamilie nicht zu übersehen. Google lanciert gleich zwei würdige Nachfolger: Go und Kotlin.
(Bild: TIOBE)

Um von der Skalierbarkeit und Kosteneffizienz von Cloud-Technologien zu profitieren, müssen Unternehmen ihre bestehenden monolithischen Anwendungen „disaggregieren“ und auch neue Entwicklungsprojekte als leichtgewichtige Microservice-Architekturen umsetzen. Das ist oft ein langer und schwieriger Prozess.

Auf in die Cloud: selbstheilende Microservices

Der Erfolg steht und fällt mit ganz grundlegenden Entscheidungen wie nicht zuletzt die Wahl der Cloud-Sprache(n). Cloud-native Anwendungen auf der Basis selbstheilender Microservice-Architekturen sind klar auf dem Vormarsch. An die verwendete Entwicklungssprache werden nun ganz andere Anforderungen gestellt.

Die Eigenschaften, die eine Programmiersprache aufweisen muss, um Microservices effizient zu implementieren, lassen sich nicht nachträglich nachrüsten; sie müssen vielmehr von Grund auf in die Sprache „hineinkonzipiert“ sein. Dazu zählen unter anderem Fähigkeiten zu massiver Automatisierung, kontinuierlicher Integration, zur Wahrung opaker Implementierungsdetails.

Leichte Beobachtbarkeit („observability“) und Dezentralisierbarkeit sowie die Fähigkeit zur eigenständigen Bereitstellung (also anders als VM-basierte Sprachen wie Clojure, Erlang oder Elixir unabhängig vom Systemunterbau) stehen bei Entwicklern ebenfalls hoch im Kurs. Das Interesse an neuartigen innovativen Sprachen wächst. Für Kotlin und Golang (kurz: Go) ist Hochkonjunktur angesagt.

Hoffnungsträger: Im Ranking der „lernwürdigsten“ Entwicklungssprachen kommen Go und Kotlin beide unter den top drei durch die Ziellinie.
Hoffnungsträger: Im Ranking der „lernwürdigsten“ Entwicklungssprachen kommen Go und Kotlin beide unter den top drei durch die Ziellinie.
(Bild: 2020 HackerRank Developers Skills Report)

Der Paradigmenwechsel hin zu Cloud-nativen Microservices reflektiert sich auch bereits in der Popularität führender Sprachen und in einer Verschiebung von Interessensschwerpunkten der betroffenen Entwickler. Im Ranking der „lernwürdigsten“ Entwicklungssprachen kommen Go und Kotlin beide unter den Top drei durch die Ziellinie.

Zu diesem Ergebnis kam HackerRank nach einer Umfrage unter 116.648 Entwicklern im März 2020. Googles bemerkenswerter Hattrick: Go hat zum dritten Mal in Folge den ersten Platz inne. Das anhaltende Interesse reflektiert weitaus mehr als bloßes Wunschdenken, denn die Popularität der beiden Sprachen wächst von Jahr zu Jahr.

Die verlockende Simplizität von Go (und ihre Schattenseite)

Go bietet eine einfache und logische Syntax zur Entwicklung von modularen Anwendungen, die in Microservice-Architekturen zur Höchstform auflaufen können. Die Sprache verbindet ihre hohe Arbeitsgeschwindigkeit mit leistungsstarker Unterstützung für Parallelität. Darüber hinaus bietet Go eine performante Standardbibliothek zum Erstellen von Webdiensten.

Durch die Verwendung eines Paketsystems kommen Entwickler schneller durch die Ziellinie. Diese Einfachheit senkt die Gesamtkosten und ermöglicht vielen Unternehmen die Entwicklung von Microservices. Alles in einem: paradiesische Zustände also? Leider gibt es bei Go einige Fallstricke. Die Sprache ist noch relativ neu und entwickelt sich (anders als Kotlin) rasant weiter.

Viele Entwickler bemängeln daran die noch unzureichende Laufzeitsicherheit. Die Laufzeitsicherheit wird hauptsächlich zum Zeitpunkt der Kompilierung überprüft und nur am Rande zur Laufzeit. Go bringt Entwicklern also vor allem einen Zeitvorsprung im Hinblick auf die verkürzte Time-to-Market resultierender Anwendungen, jedoch nicht im Hinblick auf die Sicherheit. Auch das Fehlen einer manuellen Speicherverwaltung kann zu Problemen führen.

Mit Kotlin zur Java-Interoperabilität

Bei Kotlin handelt es sich um eine statisch typisierte JVM-Sprache aus dem Hause JetBrains, die mit dem Segen von Google als eine Alternative oder Ergänzung zu Oracles Java Einsatz findet. Dank der vollständigen Interoperabilität mit Java können Entwickler je nach Bedarf abwechselnd auf Java- und auf Kotlin-Frameworks zurückgreifen und beide Sprachen in ihren Projekten ineinander verweben.

Kotlin-Code lässt sich problemlos in bestehende Java-Projekte einbinden. Dank der Unterstützung des objektorientierten wie auch des funktionalen Programmierparadigmas kann Kotlin das Beste aus beiden Welten unter einen Hut bringen. Kotlin unterstützt sowohl die LLVM-Infrastruktur als auch GraalVM. Die Sprache lässt sich u.a. zu JavaScript kompilieren oder auch in Maschinencode übersetzen.

Eine neue Programmiersprache einfach so aus dem Boden zu stampfen, ist keine leichte Aufgabe. Auch JetBrains hat es ja letztendlich nur mit Googles Rückendeckung geschafft. Mit IntelliJ hat die kleine Entwicklungsschmiede eine leistungsstarke IDE-Plattform geschaffen, auf der Google sein Android Studio aufsetzt.

Java-Gewohnheiten als Kotlin-Stolperfallen

Wer in einer objektorientierten Sprache bereits bewandert ist, kann sich mit Kotlin-Code auf Anhieb auseinandersetzen und oft auch schnell damit anfreunden. Darin liegt aber auch gerade für Java-Entwickler ein kleines Problem: Wer Kotlin konzeptionell in ein klassisches Java-Korsett hineinzwängen wollte, hinterließe einen recht ungeschickten Eindruck.

Bei Kotlin gilt: zuerst gut informieren, dann etwas umdenken und erst dann coden. Kotlin erweitert das übliche Arsenal an Sprachfähigkeiten um eine Menge nützlicher Features, darunter:

  • vollständige Interoperabilität mit Java: Beide Sprachen lassen sich in einem gemeinsamen Projekt problemlos miteinander kombinieren; so sind Java-Frameworks in Kotlin nutzbar und umgekehrt,
  • null-Absicherung zum Schutz vor NullPointerExceptions (NPEs),
  • Funktionen höherer Ordnung und leistungsstarke Lambdas,
  • Koroutinen,
  • Typ-Aliasnamen,
  • Destrukturierung von Deklarationen,
  • Unterstützung durch JetBrains IntelliJ IDEA, Googles Android Studio, Eclipse, u.a.

Version 1.4 von Kotlin ist für das Jahr 2020 geplant; JetBrains bietet derzeit eine Vorschau mit der Bezeichnung 1.4-M1 zum Download an. Im Fokus stehen diesmal Leistungsoptimierungen für alle IDEs mit Unterstützung für Kotlin und die schrittweise Einführung des neuen Compilers. Große grundlegend neue Features für Kotlin selbst sind diesmal nicht geplant. Ein verbessertes Benutzererlebnis hat Vorrang vor weiteren Innovationen.

Die neue Compiler-Implementierung von JetBrains qualifiziert sich dennoch als ein Quantensprung.

Die Hebelwirkung des neuen Kotlin-Compilers

Der neue Kotlin-Compiler soll allem voran eine API für Compiler-Erweiterungen bereitstellen und damit ein Ökosystem rund um Kotlin schaffen. Er soll einen Performancesprung mit sich bringen und eine vereinheitlichte Basis für alle Plattformen bilden.

Andrey Breslav, Lead Language Designer von Kotlin bei JetBrains, ist für viele das Gesicht von Kotlin.
Andrey Breslav, Lead Language Designer von Kotlin bei JetBrains, ist für viele das Gesicht von Kotlin.
(Bild: JetBrains)

Laut Andrey Breslav, dem Lead Language Designer von Kotlin bei JetBrains, sollen einige Teile der neuen Compiler-Implementierung bereits 2020 fertig werden und in Kotlin 1.4 das Licht der Welt erblicken. Die Umstellung wird demnach in vielen kleinen Schritten vollzogen, die sich über mehrere Jahre hinausstrecken werden.

Eine gemeinsame Back-End-Infrastruktur für alle Kompilierungsziele öffnet die Tür für Multiplattform-fähige Compiler-Erweiterungen. Entwickler können in diese Pipeline künftig ihre eigenen Erweiterungen einbinden und einige benutzerdefinierte Verarbeitungen und/oder Transformationen definieren, die dann automatisch für alle Kompilierungsziele funktionieren werden.

In Kotlin 1.4 stellt JetBrains noch keine öffentliche API für solche Erweiterungen bereit (die API wird später „stabilisiert“). Das Unternehmen arbeitet jedoch eng mit Partnern wie Jetpack Compose zusammen, die bereits an ersten Compiler-Plugins tüfteln. Man darf also gespannt sein, was die Zukunft so alles bringen könnte. Eine weitere relevante Neuerung ist das Kotlin-Library-Format zur plattformagnostischen Distribution von Code.

In der aktuellen ersten öffentlichen Vorschau von Kotlin 1.4 vom Ende März 2020 können Entwickler bereits einige der neuen Features auf die Probefahrt nehmen:

  • der neue leistungsstarke Typinferenzalgorithmus ist standardmäßig aktiviert;
  • Contracts lassen sich jetzt mit nicht vererbbaren (also finalen) Mitgliedsfunktionen nutzen, zum Beispiel, um die Smartcasts-Auswertung zu verbessern oder die Variableninitialisierungsanalyse bei Vorhandensein von Funktionen höherer Ordnung zu unterstützen;
  • der Kotlin/JVM-Compiler erzeugt jetzt Typanmerkungen im Bytecode für Java 8+-Ziele.
  • für Kotlin/JS gibt es ein neues Backend mit Verbesserungen der resultierenden Artefakte
  • die Standardbibliothek hat zahlreiche evolutionäre Verbesserungen erfahren.

Was also grundlegend neue innovative Features darstellt, ist offenbar Ermessenssache. Die Innovationskraft und die anhaltende Beliebtheit von Kotlin machen bereits länger von sich reden. Kotlin zog kürzlich sogar an Skala und Clojure vorbei und wurde im Herbst des vergangenen Jahres zur beliebtesten JVM-Sprache, bestätigt die neueste Umfrage von Snyk von 2020.

Fazit

Mit Go und Kotlin sind zwei neue Cloud-native Sprachen entstanden, die vor lauter innovativer Features nur so strotzen. Go/golang bietet eine einfache und logische Syntax zur Entwicklung von modularen Anwendungen, die in Microservice-Architekturen zur Höchstleistung auflaufen können. Kotlin trumpft mit Java-Interoperabilität und leistungsstarken Toolchains. Die Entwickler von Microservices haben jetzt wirklich die Qual der Wahl.

Dieser Beitrag stammt von unserem Partnerportal Dev-Insider.de

(ID:46604900)