Blog

Arrow für Kotlin veröffentlicht stabile Version 1.2.0

Simon Vergauwen

Aktualisiert Oktober 15, 2025
5 Minuten

Pfeil 1.2.0

Wir freuen uns, endlich Arrow 1.2.0 ankündigen zu können, die stabile Version, die auf die im April veröffentlichte 1.2.0-RC folgt. In der Version 1.2.0 haben wir ein brandneues Modul für Tippfehler und zusätzliche Optionen für die Ausfallsicherheit eingeführt.

Mit der Version 1.2.0 haben wir die APIs für Version 2.0 fertiggestellt. Um die Beteiligung der Community zu gewährleisten, haben wir alle Funktionen und Typen, die wir entfernen möchten, während des RC-Release-Zyklus als @Deprecated markiert. Eines unserer Hauptziele bei der 1.2.x-Reihe ist es, Anregungen aus der Community zu erhalten, und wir freuen uns, von den Auswirkungen dieser Änderungen auf Ihre Projekte zu hören.

Diese Version feiert auch den 10. Geburtstag von Arrow und markiert den ersten Commit von einer Hälfte der Ursprungsbibliotheken von Arrow! Simon Vergauwen gab auf der KotlinConf einen kurzen Überblick über die vergangenen 10 Jahre, den Sie sich hier ansehen können.

Änderungen von RC

Wir haben während der Phase der Release Candidate ein überwältigend positives Feedback erhalten. Die Änderungen zwischen der Version 1.2.0-RC und der stabilen Version sind relativ gering und beinhalten keine grundlegenden Änderungen. Wir haben insbesondere ein Problem im Zusammenhang mit kapt behoben und drei kleine Funktionen eingeführt. Schauen wir uns jede dieser Funktionen im Detail an.

Verbesserungen für Raise

Mehrere Teams haben damit begonnen, ihre Codebasen auf den neuen typisierten Fehlermechanismus auf der Grundlage von Raise zu portieren. Als Reaktion auf ihr Feedback haben wir der Bibliothek eine neue Dienstfunktion hinzugefügt.

withError

Bei der Arbeit mit typisierten Fehlern unter Verwendung von Raise oder Either in Arrow kommt es häufig vor, dass man auf unterschiedliche typisierte Fehler aus verschiedenen Schichten oder Modulen stößt. Wir haben eine neue DSL namens eingeführt, um den Komfort in solchen Szenarien zu erhöhen. Diese DSL ermöglicht die Installation einer Transformation (Error) -> OtherError innerhalb der DSL.

data class Error(val message: String)
data class OtherError(val message: String)

fun Error.toOtherError(): OtherError =
  OtherError(message)

fun one(): Either<Error, Int> = Error("BOOM!").left()
fun two(): Either<OtherError, Int> = 2.right()

val res: Either<OtherError, Int> = either {
  withError(Error::toOtherError) {
    one().bind() + two().bind()
  }
} shouldBeLeft OtherError("Boom!")

merge Glücks- und Irrwege

Die Funktion merge im Typ Either von Arrow ermöglicht es Ihnen, eine Either zu "glätten", wenn die Seiten Left und Right denselben Typ haben. In der neuesten Version bietet nun auch der Typ Raise die gleiche Funktionalität innerhalb seiner DSL.

val res: String = merge {
  if(Random.nextBoolean()) raise("failed")
  else "success"
} shouldBe "failed"

Neue Schnittstelle NonEmptyCollection

In Arrow 1.2.0 führen wir auf der Grundlage einer Slack-Diskussion ein gemeinsames Elternteil für NonEmptyList und NonEmptySet ein. Diese Verbesserung bringt einen neuen Elterntyp für nicht leere Sammlungen. Außerdem überladen die nicht leeren Sammlungen jetzt mehr Methoden und bieten Rückgabetypen, die nicht null sind, im Gegensatz zu den nullbaren Rückgabetypen, die von regulären Kotlin-Sammlungen bereitgestellt werden.

Vollständige API-Dokumente

Mit der Veröffentlichung von 1.2.0-RC haben wir eine neue Website eingerichtet, die eine umfassende Überarbeitung der Dokumentation beinhaltet. Diese Überarbeitung konzentriert sich auf reale Anwendungsfälle und praktische Beispiele für die Verwendung von Arrow. Infolgedessen mag die KDoc-Dokumentation spärlich erschienen sein, insbesondere für neue APIs. In Arrow 1.2.0 haben wir dieses Problem angegangen, indem wir sichergestellt haben, dass alle APIs in den KDocs vollständig dokumentiert sind.

Wenn Sie Feedback zur Website haben, reichen Sie bitte ein Problem im Arrow Website Repository ein. Wenn Sie Feedback zu den API-Dokumenten haben, reichen Sie bitte ein Problem im Arrow-Repository ein.

Pfeil-Optik KSP

Bisher hatte das Arrow Optics KSP-Plugin Probleme, wenn es mit kapt kombiniert wurde. Wir freuen uns, Ihnen mitteilen zu können, dass wir dieses Problem in Arrow 1.2.0 behoben haben. Sie können das Arrow Optics KSP-Plugin jetzt wieder mit kapt-basierten Projekten verwenden.

Darüber hinaus bietet Arrow 1.2.0 Unterstützung für die Deaktivierung von Inline-Code in dem generierten KSP. Insbesondere die Verwendung von inline im Plug-in machte es schwierig, @optics mit privaten oder internen Feldern zu verwenden. Standardmäßig bleibt diese Funktion aktiviert (angesichts der wichtigen Leistungsvorteile von Inline in diesem Fall), was eine nahtlose Integration mit Ihren Projekten ermöglicht.

ksp {
    arg("inline", "true")
    ...
}

Modul zur Serialisierung

Eine neue Bibliothek, arrow-core-serialization, ist in dieser Version enthalten. Diese Bibliothek exportiert die Serializer, die für die Verwendung von Arrow Core-Typen mit kotlinx.serialization, einer der am häufigsten verwendeten Bibliotheken im Kotlin-Ökosystem, erforderlich sind. Zuvor haben wir nur Jackson unterstützt.

Damit schließen wir eines der am längsten bestehenden Probleme in unserem Repository. Wir haben in diesem Entwicklungszyklus eine zusätzliche Fehlerbehebungsrunde durchgeführt, um sicherzustellen, dass unser Tracker aktuell ist.

Pläne für Arrow 2.0

Die Angleichung der Veröffentlichung von Kotlin 2.0 und Arrow 2.0 ist für die Binärkompatibilität am sinnvollsten. Wir gehen davon aus, dass diese Angleichung aus Kotlin-Sicht nur geringfügige Auswirkungen haben wird. Sie wird jedoch der gesamten Community den gleichzeitigen Übergang zu beiden Hauptversionen erleichtern und sicherstellen, dass niemand die Vorteile der 2.0 API verpasst.

Wir gehen davon aus, dass der K2-Compiler gegen Ende des Jahres oder Anfang 2024 veröffentlicht wird. Bleiben Sie auf dem Laufenden, wenn wir etwas über seine Veröffentlichung verkünden! In der Zwischenzeit gibt dies Arrow 1.x die Möglichkeit, weiter zu reifen und zusätzliches Feedback und Verbesserungen aus der Community zu integrieren, während wir uns der Veröffentlichung von 2.0 nähern. Gemeinsam sind wir am stärksten!

Danke

Ein besonderer Dank geht an alle, die Arrow im Laufe der Jahre unterstützt und mitgestaltet haben. Ihr unschätzbares Feedback und Ihre Unterstützung waren entscheidend für die Entwicklung und das Wachstum von Arrow.

Das vollständige Änderungsprotokoll finden Sie auf GitHub.

Xebia Kotlin

Wir, das funktionale Team bei Xebia, sind große Fans von Kotlin und erforschen die vielen Möglichkeiten, die es für die Backend-Szene bietet. Wir sind stolze Betreuer von Arrow, einer Reihe von Begleitbibliotheken zu Kotlins Standardbibliothek, Coroutines und Compiler, und bieten Kotlin-Schulungen an, um Kotlin-Experten zu werden. Wenn Sie mit uns sprechen möchten, können Sie unser Kontaktformular verwenden oder uns auf dem Kotlin Slack folgen.

Verfasst von

Simon Vergauwen

Arrow maintainer & Principal Engineer @ Xebia Functional from Antwerp, Belgium Working with Kotlin since 2015 & Fanatic OSS'er

Contact

Let’s discuss how we can support your journey.