Wat is er nieuw in Kotlin 1.6?

0
154
Trismegist san/Shutterstock.com< /figure>

Kotlin 1.6 is uit met nieuwe functies, een verbeterde experimentele geheugenmanager en een verbeterde standaardbibliotheek. De toevoegingen helpen JetBrains te rijpen’ steeds populairder wordende cross-platform en cross-discipline taal.

Nieuwe Native Memory Manager

De grootste verandering voor het Kotlin-ecosysteem is misschien wel de komst van de nieuwe geheugenbeheerder voor Kotlin Native. Hoewel het nog steeds wordt aangeduid als een ontwikkelaarsvoorbeeld, is de bijgewerkte manager representatief voor de richting die Kotlin in de toekomst zal inslaan.

Het herziene ontwerp is beter uitgerust om om te gaan met de verschillende compilatie-backends die worden gebruikt om Kotlin om te zetten in native platformcode voor iOS en Android. Soms vereisen de platforms verschillende optimalisaties voor een specifieke operatie. De huidige aanpak legt beperkingen op aan gelijktijdigheid en kan geheugenlekken veroorzaken zonder speciale aandacht van de ontwikkelaar.

De volgende generatie geheugenmanager lost deze tekortkomingen op. Het biedt lekvrije primitieven voor gelijktijdige bewerkingen die veilig kunnen worden gebruikt zoals ze zijn. De wijzigingen brengen ook het native geheugenbeheer meer in overeenstemming met de bestaande geheugenmanager voor JVM-ontwikkeling.

Hoewel het nieuwe systeem beschikbaar is in Kotlin 1.6, is het momenteel niet bedoeld voor productiegebruik. In sommige situaties kunnen de prestaties tot 5x worden verminderd in vergelijking met de oude geheugenbeheerder. Er wordt gewerkt aan een performante versie die klaar is voor algemene toepassing.

Sealed When-statements

Met verzegelde wanneer-instructies kunt u een compilerwaarschuwing ontvangen wanneer u vergeet een mogelijk geval af te handelen. Als je een verzegelde klasse, boolean type of enum doorgeeft aan wanneer, wil je normaal gesproken een expliciete actie ondernemen voor elke mogelijke invoerwaarde:

verzegelde klasse Aandrijflijn { gegevensklasse Elektrisch(val Vermogen: Int) : Aandrijflijn() gegevensklasse Diesel(val Vermogen: Int) : Aandrijflijn() dataklasse Hybrid(val Diesel: aandrijflijn, val Elektrisch: aandrijflijn) : Aandrijflijn() }   leuk getTotalPowerKwh(aandrijflijn: DriveTrain) : Int { wanneer (aandrijflijn) { is Aandrijving.Diesel -> aandrijflijn.Diesel.Power is Drivetrain.Electric -> aandrijflijn.Electric.Power } } Advertentie

In het bovenstaande voorbeeld heeft de verzegelde klasse Drivetrain drie dataklassen. Het when-statement behandelt er slechts twee – als uw code een hybride aandrijflijn ontvangt, wordt een onjuiste waarde geretourneerd.

De Kotlin-compiler zal u nu op dit probleem wijzen. In Kotlin 1.7 zal het niet uitputtend behandelen van alle mogelijkheden resulteren in een compilatiefout.

Typetransformaties opschorten

Transformaties van normale naar opschortende typen hebben gestabiliseerd via automatische compilerconversies. De compiler maakt de conversie automatisch aan wanneer u een expressie van het reguliere type doorgeeft aan een context waarin een opschortingstype wordt verwacht.

Hierdoor wordt de volgende code mogelijk:

fun createUser(naam: String) { //… }   flow.collect(::createUser)   val createUserFunction = ::createUser flow.collect(createUserFunction)

Deze code werd gebruikt om te breken bij de tweede flow.collect()-aanroep. De variabele createUserFunction verwijst naar de normale functiedefinitie, niet naar de opschorting die door de eerste aanroep is gemaakt. Kotlin zal dit nu afhandelen door een opgeschorte versie te maken wanneer de ontvangende context dit vereist.

Suspending-functies worden nu ook ondersteund als supertypes. Hiermee kunt u klassen doorgeven die opschortende functionele typen implementeren overal waar momenteel een opschortende functieverwijzing wordt ondersteund.

class ImplementsSuspendingFunctionalType : suspend () -> Eenheid { overschrijven opschorten plezier aanroepen() { /* … */} } Advertentie

De opschorting () -> Unit-interface wordt op dezelfde manier geïmplementeerd als u al kunt gebruiken () -> Eenheid voor niet-opschortende typen.

Code Coverage Scanner

Kotlin heeft nu een officiële scantool voor codedekking. Kover is een Gradle-plug-in die de dekkingsstatistieken verzamelt van tests voor Kotlin JVM-, Multiplatform- en gemengde Java-projecten. Het kan rapporten genereren in HTML- en XML-indeling.

Kover biedt volledige compatibiliteit met de Kotlin-taal en de Gradle-toolchain. Hoewel sommige tools van derden al dekkingsscores kunnen bieden, bestaan ​​ze buiten het ecosysteem en hebben ze niet altijd inzicht in elke taak. Kover biedt een volledig geïntegreerde aanpak. De ontwikkeling is gaande met deze eerste release die als experimenteel wordt bestempeld.

Om Kover in te schakelen, voegt u de volgende regels toe aan uw buildbestand op het hoogste niveau:

plugins { id(“org.jetbrains.kotlinx.kover) “) versie “0.4.2” }

Kover wordt nu uitgevoerd als onderdeel van uw Gradle-builds.

Standard Library Additions

Daar zijn een paar opmerkelijke wijzigingen in de standaardbibliotheek, waaronder de promotie van verschillende bètafuncties naar stabiel:

readln() en readlnOrNull()

Deze twee nieuwe functies lezen en retourneren een regel uit de standaard invoerstroom. De eerste zal gooien als de EOF-markering is bereikt, terwijl de laatste null retourneert.

typeOf()

Met de functie typeOf() kunt u het werkelijke type bepalen van een gereïficeerd type, meestal uitgedrukt als T, tijdens runtime.

inline plezier <reified T> getTypeString() : String { val type = typeOf<T>() retourneer type.toString() }

Collection Builders

Met nieuwe builderfuncties kun je eenvoudig collecties maken op basis van een reeks verschillende waarden. U kunt kaarten, lijsten en sets combineren tot nieuwe collecties met behulp van eersteklas functies:

val fruits = lijst van("appel", "banaan"); val veg = lijst van("wortel", "kool");   val boodschappen = buildList { voeg ""melk"" toe addAll(fruits) addAll(veg) }   //["melk", "appel", "banaan", "wortel", "kool"]

Duurwaarden

De klasse Duration voor het weergeven van tijdwaarden is gepromoveerd tot stabiel. Het biedt een geïntegreerd type om een ​​tijdsperiode in uw code op te slaan. De klasse heeft methoden die gemakkelijke conversies tussen eenheden mogelijk maken:

//Emits 1.0 println(60.toDuration(DurationUnit.SECONDS).inMinutes);

Meer standaardbibliotheekwijzigingen

Gehele getallen hebben nieuwe functies roterenLeft() en roterenRechts(). Deze roteren de binaire representatie van het getal met een bepaald aantal bits in de aangegeven richtingen. Regexes krijgen sequentiesplitsingsfuncties en consistent gedrag voor Replace() en ReplaceFirst() in Java- en JavaScript-omgevingen.

Sommige bestaande functies zijn verouderd. De functies concat(), match() en matches() op strings, evenals de functie sort() op arrays, zullen nu waarschuwingen geven. Hun functionaliteit wordt al gedekt door alternatieve opties.

Andere wijzigingen

Kotlin 1.6 voegt enkele ecosysteemverbeteringen en verbeteringen van de levenskwaliteit toe. Een van deze is ondersteuning voor Xcode 13 en de mogelijkheid om Windows-builds op elk platform te compileren. Als je mingwX64 of mingwX86 voor Windows target, kun je nu compileren vanaf elk systeem dat Kotlin/Native-ontwikkeling ondersteunt.

Advertentie

Verbeteringen aan compilercaches voor Linux- en iOS-builds hebben de typische bouwtijden na de eerste run gehalveerd. Updates voor de Kotlin-afhankelijkheidsketen verminderen het schijfgebruik aanzienlijk. Door over te schakelen naar LLVM 11.1 is de macOS-versie teruggebracht van 1200 MB naar ongeveer 300 MB.

Als u Kotlin JavaScript gebruikt, kunt u nu automatische downloads van Node.js en Yarn uitschakelen tijdens het bouwproces . Dit is handig wanneer u code compileert in een vooraf geconfigureerde omgeving waar de host deze afhankelijkheden al heeft geïnstalleerd.

Samenvatting

Kotlin 1.6 is een gezonde release met nieuwe experimentele functies die de weg vrijmaken voor de toekomst en een goede selectie van taal- en standaardbibliotheekwijzigingen die je vandaag kunt gebruiken. Er zijn ook verbeteringen aangebracht in de interoperabiliteit tussen Kotlin-smaken, zodat meer code zich hetzelfde zal gedragen, of het nu is gecompileerd voor JVM, Native of JavaScript.

De 1.6-mijlpaal ziet ook de beheerders van Kotlin bieden een verlengde ondersteuningsperiode voor oudere API-versies. Drie eerdere versies worden nu ondersteund op een rollende cadans. Dit betekent dat je er momenteel voor kunt kiezen om te ontwikkelen tegen Kotlin-versies 1.3 tot 1.6, waardoor je meer tijd hebt om te upgraden tussen releases.

Je kunt vandaag overstappen naar Kotlin 1.6 door je versie van IntelliJ IDEA, Android Studio, Xcode bij te werken. , of de Kotlin CLI-compiler. Het is de moeite waard om eerst de compatibiliteitsgids door te nemen om er zeker van te zijn dat u alle eerder gemelde beëindigingen hebt aangepakt die waarschuwingen of fouten in 1.6 veroorzaken.