Können "experimentelle" Kotlin-Coroutinen in der Produktion verwendet werden?

83

Können Kotlin-Coroutinen in der Produktion verwendet werden und was bedeutet ihr experimenteller Status?

Roman Elizarov
quelle

Antworten:

110

UPDATE : Kotlin-Coroutinen sind ab Kotlin 1.3 nicht mehr experimentell.

Kotlin-Coroutinen können und sollten in der Produktion verwendet werden. Dies war der Hauptgrund, sie offiziell in Kotlin 1.1 zu veröffentlichen. Nach der Veröffentlichung hatte sich das JetBrains-Team verpflichtet, die Abwärtskompatibilität in Bezug auf alle Änderungen aufrechtzuerhalten, die in den kleineren Versionen während ihrer Entwicklung vorgenommen werden, und es den Mitarbeitern zu ermöglichen, sie in komplexen Produktionsanwendungen sicher zu testen.

Kurz gesagt, der Unterschied zwischen "experimentellen" und "normalen" Funktionen besteht darin, dass für normale Kotlin-Funktionen in geringfügigen Updates keine neuen Inhalte hinzugefügt werden können, da eine "vollständige Kompatibilitätsgarantie" besteht, während für experimentelle Funktionen neue Funktionen hinzugefügt werden können. Es kann jedoch nichts entfernt werden (aufgrund der Abwärtskompatibilitätsgarantie).

Experimentelle Coroutinen verwenden einen separaten kotlin.coroutines.experimentalPaketnamen, sodass der kotlin.coroutinesalte kompilierte Code nach Abschluss des Coroutine-Designs und dem Wechsel zum Paket nicht beschädigt wird, sondern weiterhin über eine separate Support-Bibliothek funktioniert.

Weitere (lange gelesene) Diskussionen darüber, warum sie "experimentell" sind und was dies bedeutet, finden Sie in diesem Forumsbeitrag von Andrey Breslav.

Die gleiche Frage gilt für Coroutinen-Unterstützungsbibliotheken.

Die aktuelle Version von kotlinx.coroutinesist für den Produktionsbetrieb konzipiert. Es ist ziemlich gut mit Tests abgedeckt, viele Dinge sind bereits optimiert, alle Änderungen werden unter Berücksichtigung der Probleme der Abwärtskompatibilität mit zuvor kompiliertem Code vorgenommen. Es dient sicherlich als Prüfstand für verschiedene Coroutine-basierte Dinge, daher gibt es einige Teile, die in der Dokumentation der entsprechenden Funktionen und Klassen eindeutig als "in Arbeit" oder "instabil" gekennzeichnet sind. Standardmäßig gelten jedoch alle öffentlichen APIs in kotlinx.coroutinesals stabil und werden bei Bedarf mit geeigneten Migrationshilfen weiterentwickelt.

Roman Elizarov
quelle
5
Es macht mir immer noch Sorgen, wenn ich die hervorgehobene Warnung zu der Funktion sehe, die wir verwenden, z. B. Start, Angabe The feature "coroutines" is experimental (see more here)und Link zu kotlinlang.org/docs/diagnostics/experimental-coroutines.html
Elye,
4
Es ist ein bisschen wie ein Catch-22, nicht wahr? Wie werden sie kampferprobt, wenn niemand sie ausprobiert? :) Andererseits liegt meine Erfahrung mit den "experimentellen" Funktionen von JetBrains weit über der Erfahrung mit Veröffentlichungen in "Produktionsqualität" von vielen anderen Anbietern. Insbesondere hatte ich absolut keine Probleme mit der Implementierung von Coroutinen; Die einzigen "Störungen", die ich sah, betrafen einige Details in ihrer Behandlung durch das statische Typsystem, die keine Auswirkungen auf die Laufzeit haben. Sie haben in Hazelcast Jet ziemlich ernsthafte Stresstests und Benchmarks mit Bravour bestanden.
Marko Topolnik
Teile dieser Antwort sind offensichtlich falsch. Das gesamte Paket ist experimentell, nicht einige Teile davon.
Jean de Klerk