Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin kontra Java - Braucht man 2025 überhaupt...

Kotlin kontra Java - Braucht man 2025 überhaupt noch Kotlin (v1) 🇩🇪 @JavaLand 2025

Vortrag von der JavaLand 2025

Java hat in den letzten Jahren ein paar sehr attraktive Sprachfeatures eingeführt - Records, Pattern Matching sowie virtual Threads - und damit ein Großteil von dem was bisher Kotlin-exklusiv war. Aber hat Java damit wirklich alles attraktive von Kotlin abgedeckt? Ist Kotlin im Jahr 2024 noch relevant?

Um diesen Fragen auf den Grund zu gehen, werden wir die Entwicklungen in der Architektur beider Sprachen und die beispielhaften Anwendungsfälle aus Developersicht analysieren und bewerten. Dabei machen wir auch einen kleinen Blick in die Zukunft und vergleichen die sich abzeichnenden Entwicklungsschritte beider Sprache der nächsten Jahre.

Der Vortrag zielt darauf ab, die aktuellen und zukünftigen Entwickler bei der Auswahl der geeigneten Programmiersprache für ihre Bedürfnisse zu unterstützen, indem er ein vollständiges, unvoreingenommenes Bild der Stärken und Grenzen beider Sprachen liefert.

Richard

March 31, 2025
Tweet

More Decks by Richard

Other Decks in Programming

Transcript

  1. 01.04.25 Richard Gross (er/ihm) richargh.de/ speakerdeck.com/richargh richargh.de Kotlin kontra Java

    Braucht man 2025 überhaupt noch Kotlin? IT Sanierung Hypermedia Programmier- Sprachen
  2. F# (schaut euch diese Schönheit an) Slide 3 by richargh.de

    from From Scott Wlaschin’s Domain-Modelling made Functional talk
  3. Kriterien für Programmiersprachen Slide 5 by richargh.de from Erwartete Langlebigkeit,

    mit guter Kompatibilität Genug Entwickler, die sie auch lernen wollen, wenig footguns Guter IDE-Support Reifes Ökosystem Eine Sprache für alles (bonus) Schnell und Schnelles Feedback Fundament: Passt zum Einsatzzweck
  4. Evolution*, Langlebigkeit und Breakages Slide 6 by richargh.de from •

    Limitiert auf Features für die Kriterien https://kotlinlang.org/docs/kotlin-evolution-principles.html Java MVN-Libs Java 8 › Stream<T> › Function<In, Out> Java 1 Java 21 › Record patterns › Virtual Threads Java 9 › Module System Kotlin ‘96 ’04 ‘14 ‘16 ‘17 ‘18 ‘19 ‘21 ‘23 ‘24 Kotlin 1+1.1 › Sealed Types › Kotlin/Js › @DslMarker Kotlin 1.3 › Coroutines ArchUnit 0.11 NullAway 0.7 Kotlin 1.6 › Exhaustive when Java 17 › Records › Sealed Types › Switch Expression › Pattern Matching › Encapsulate JDK
  5. Gibt es genug lernwillige Entwickler? StackOverflow 20242 [Survey: done extensive

    work?] 1. JavaScript (65%) 2. SQL (54%) 3. HTML/CSS (53%) 4. Python (47%) […] 7. Java (30%) […] 15. Kotlin (10%) Tiobe 03-20253 [most searched] 1. Python (24%) 2. C++ (11%) 3. Java (10%) 4. C (10%) 5. C# (5%) […] 19. Kotlin (1%) Slide 7 by richargh.de from 3 https://www.tiobe.com/tiobe-index/ 2 https://survey.stackoverflow.co/2024/technology 1 https://redmonk.com/sogrady/2024/03/08/language-rankings-1-24/ plus (Kotlin adopt since 2018) https://www.thoughtworks.com/radar/languages-and-frameworks/kotlin Redmonk 01-20241 [Github PRs, discussions on SO] 1. JavaScript 2. Python 3. Java 4. PHP 5. C# […] 17. Kotlin
  6. Kotlin IDE Support ist sowohl gut wie nicht Slide 8

    by richargh.de from LSP: Language Server Protocol Kotlin IDEs: https://kotlinlang.org/docs/kotlin-ide.html#eclipse 1 https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack 2 https://github.com/nvim-java/nvim-java 3 https://github.com/fwcd/kotlin-language-server IntelliJ VS Code Eclipse Microsoft/Eclipse/Oracle LSPs ✓ ✓ ✓ by Microsoft1 or Oracle (✓) Community maintained2 Community (un)maintend LSP-implementation(s)1 ✓ ✓ by JetBrains ~ community (un)maintainted3 ╳ did not find maintened plugin (Neo)Vim (and other editors)
  7. Beide bieten genug Performance1 Base64 encode/decode 0,663s NodeJs 0,875s Rust

    0,918s C/gcc 1,433s Java 1,531s Scala 1,567s Kotlin 1,659s Go 2,494s C#/.NET Core 3,249s Python/pypy Slide 9 by richargh.de from 1 https://github.com/kostya/benchmarks?tab=readme-ov-file#tests-execution s=Sekunden Java=JDK23, Kotlin=2.0.21, Scala=3.5.2, C#=Core 4x oder8? What (Staged) means: https://github.com/kostya/benchmarks/issues/485 Alternative1: https://programming-language-benchmarks.vercel.app/ Alternative2: https://benchmarksgame-team.pages.debian.net/benchmarksgame/index.html Wir ignorieren hier bewusst andere Punkte wie Effizienz (CPU, RAM) und verlassen uns darauf, dass nicht nur Benchmark, sondern auch Programme von Experten geschrieben wurden und diese lesbar und wartbar sind. bench.b Execute Brainf*** 1,012s Rust 1,111s C/gcc 1,188s Java 1,227s Kotlin 1,247s Go 1,367s C#/.NET Core 2,777s Scala 3,150s NodeJs 9,575s Python/pypy Matmul Multiply matrixes 3,034s C/gcc 3,064s Rust 3,107s Java 3,153s Go 3,197s Kotlin 3,201s NodeJs 3,263s Python/pypy 3,295s Scala 4,890s C#/.NET Core
  8. Performance-Benchmarks sind schwierig, es geht immer auch um Lesbarkeit Slide

    10 by richargh.de from 1BRC https://github.com/gunnarmorling/1brc?tab=readme-ov-file Zeit Funktionen/LoC Kommentar ~5 min 3/92 Baseline ~13 sek 11/250 Gut Lesbar ~5 sek 26/470 Wenig lesbar, Benutzt Unsafe ~2 sek 23/435 Gewinner: Wenig lesbar, GraalVM native bin, benutzt Unsafe
  9. Eine Sprache für alle oder eine Runtime für alle? Slide

    11 by richargh.de from 1 https://kotlinlang.org/docs/multiplatform.html 2 https://www.graalvm.org/22.0/docs/introduction/ 3 gibt noch keine Klassen, also keine WebComponents. Große Standard-Lib kommt immer mit dazu. 4 https://2025.wasm.io/sessions/the-future-of-write-once-run-anywhere-from-java-to- webassembly/ bekannte WASM-compiler sind TeaVM, JWebAssembly, CheerpJ Kotlin (src) Java (src) Android iOS Browser Server Native runtime JVM Truffle (GraalVM)4 Js Python Ruby JS WASM … 1 2 3
  10. Kriterien für Programmiersprachen Slide 12 by richargh.de from Erwartete Langlebigkeit,

    mit guter Kompatibilität Genug Entwickler, die sie auch lernen wollen, wenig footguns Guter IDE-Support Reifes Ökosystem Eine Sprache für alles (bonus) Schnell und Schnelles Feedback Fundament: Passt zum Einsatzzweck
  11. Kriterien für Programmiersprachen Slide 13 by richargh.de from Code liest

    sich wie Fachprosa (null-)Sicherheit zur Compile-Zeit Encapsulation & Information Hiding Kurz & knapp Interoperabilität mit Platform Erweiterte Nebenläufigkeit Erwartete Langlebigkeit, mit guter Kompatibilität Genug Entwickler, die sie auch lernen wollen, wenig footguns Guter IDE-Support Reifes Ökosystem Eine Sprache für alles (bonus) Schnell und Schnelles Feedback Fundament: Passt zum Einsatzzweck
  12. Kriterien für Programmiersprachen Slide 15 by richargh.de from Code liest

    sich wie Fachprosa (null-)Sicherheit zur Compile-Zeit Encapsulation & Information Hiding Kurz & knapp Interoperabilität mit Platform Erweiterte Nebenläufigkeit Erwartete Langlebigkeit, mit guter Kompatibilität Genug Entwickler, die sie auch lernen wollen, wenig footguns Guter IDE-Support Reifes Ökosystem Eine Sprache für alles (bonus) Schnell und Schnelles Feedback Fundament: Passt zum Einsatzzweck
  13. Braucht man 2025 überhaupt noch Kotlin? Slide 16 by richargh.de

    from Code liest sich wie Fachprosa (null-)Sicherheit zur Compile-Zeit Encapsulation & Information Hiding Kurz & knapp Interoperabilität mit Platform Erweiterte Nebenläufigkeit Erwartete Langlebigkeit, mit guter Kompatibilität Genug Entwickler, die sie auch lernen wollen, wenig footguns Guter IDE-Support Reifes Ökosystem Eine Sprache für alles (bonus) Schnell und Schnelles Feedback 2020: Definitiv Kotlin 2025: Glücklich genug mit Java 2026: F# ☺
  14. Braucht man 2025 überhaupt noch Kotlin? Slide 17 by richargh.de

    from Code liest sich wie Fachprosa (null-)Sicherheit zur Compile-Zeit Encapsulation & Information Hiding Kurz & knapp Interoperabilität mit Platform Erweiterte Nebenläufigkeit Erwartete Langlebigkeit, mit guter Kompatibilität Genug Entwickler, die sie auch lernen wollen, wenig footguns Guter IDE-Support Reifes Ökosystem Eine Sprache für alles (bonus) Schnell und Schnelles Feedback 2020: Definitiv Kotlin 2025: Glücklich genug mit Java 2030: Karten wieder neu gemischt.
  15. richargh.de Slide 18 by richargh.de from Dankeschön [email protected] für Folien

    & Fragen Gerne auf diese Themen ansprechen ☺ richargh.de Richard Gross (er/ihm) IT Sanierung Hypermedia Arbeitet für maibornwolff.de/ richargh.de richargh Kontakt Oder ein unverbindlicher 30min Termin über Modernisierung Programmier- Sprachen Kontakt Code https://github.com/Richargh/kotlin-kontra-java
  16. Performance bedeutet auch wie schnell es kompiliert Slide 20 by

    richargh.de from https://blog.jetbrains.com/kotlin/2024/04/k2-compiler-performance-benchmarks-and-how-to-measure-them-on-your-projects/ Hier ist aber nicht ganz klar welcher Task gemessen wurde. Annahme wäre: ./gradlew clean compileKotlin --profile --no-build-cache --no-parallel * Real Lines of Code = reine Codezeilen, keine Kommentare oder Leerzeichen JetBrains/Exposed 54k RLoC* Anki-Droid 99k RLoC* In der Praxis hat sich das bei bis zu 500k RLoC auch mit 1.5 schon gut angefühlt. Mehr performance is aber immer super ☺