Vad är nytt i Kotlin 1.6?

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

Kotlin 1.6 är ute med nya funktioner, en förbättrad experimentell minneshanterare och ett förbättrat standardbibliotek. Tilläggen hjälper mogna JetBrains’ alltmer populärt plattformsoberoende och tvärvetenskapligt språk.

Ny Native Memory Manager

Antagligen är den största förändringen för Kotlins ekosystem ankomsten av den nya minneshanteraren för Kotlin Native. Även om det fortfarande är märkt som en förhandsvisning av utvecklare, är den uppdaterade chefen representativ för den riktning Kotlin kommer att ta i framtiden.

Den reviderade designen är bättre rustad för att hantera de olika kompileringsbackends som används för att omvandla Kotlin till inbyggd plattformskod för iOS och Android. Ibland kräver plattformarna olika optimeringar för en specifik operation. Det nuvarande tillvägagångssättet sätter begränsningar på samtidighet och kan skapa minnesläckor utan särskild uppmärksamhet från utvecklarna.

Nästa generations minneshanterare åtgärdar dessa brister. Den erbjuder läckagefria primitiver för samtidiga operationer som är säkra att använda som de är. Ändringarna gör också att Native Memory Management blir mer likvärdigt med den befintliga minneshanteraren för JVM-utveckling.

Medan det nya systemet är tillgängligt i Kotlin 1.6, är det för närvarande inte avsett för produktionsanvändning. I vissa situationer kan prestandan reduceras med upp till 5 gånger jämfört med den äldre minneshanteraren. Utvecklingsinsatser pågår för en prestandaversion som är redo för allmän användning.

Sealed When Statements

Förseglad när uttalanden låter dig få en kompilatorvarning när du glömmer att hantera ett eventuellt fall. Om du skickar en förseglad klass, boolesk typ eller enum till ett när, vill du normalt vidta en explicit handling för varje möjligt inmatningsvärde:

förseglad klass Drivlina { dataklass Electric(val Power: Int) : Drivlina() dataklass Diesel(val Power: Int) : Drivlina() dataklass Hybrid(val Diesel: Drivlina, val Electric: Drivlina) : Drivlina() }   kul getTotalPowerKwh(drivetrain: DriveTrain) : Int { när (drivlina) { är Drivetrain.Diesel -> drivetrain.Diesel.Power är Drivetrain.Electric -> drivlina.Electric.Power } } Annons

I exemplet ovan har den förseglade klassen Drivetrain tre dataklasser. When-satsen hanterar bara två av dem – om din kod tar emot en hybriddrivlina kommer ett felaktigt värde att returneras.

Kotlin-kompilatorn kommer nu att varna dig om detta problem. I Kotlin 1.7 kommer det att inte uttömmande täcka alla möjligheter resultera i ett kompileringsfel.

Suspending Type Transformations

Transformationer från vanliga till suspenderande typer har stabiliserats via automatiska kompilatorkonverteringar. Kompilatorn skapar konverteringen automatiskt när du skickar ett uttryck av reguljär typ till en kontext där en suspenderande typ förväntas.

Detta aktiverar kod som följande:

roligt skapaAnvändarnamn: String) { //… }   flow.collect(::createUser)   val createUserFunction = ::createUser flow.collect(createUserFunction)

Denna kod användes för att bryta det andra flow.collect()-anropet. Variabeln createUserFunction hänvisar till den vanliga funktionsdefinitionen, inte den avstängning som skapades av det första anropet. Kotlin kommer nu att hantera detta genom att skapa en avstängd version när den mottagande kontexten kräver det.

Suspenderande funktioner stöds också som supertyper nu. Detta låter dig skicka klasser som implementerar suspenderande funktionstyper där en suspenderande funktionsreferens för närvarande stöds.

class ImplementsSuspendingFunctionalType : suspend () -> Enhet { åsidosätt avbryta kul åberopa() { /* … */} } Annons

The suspend () -> Enhetsgränssnitt implementeras på samma sätt som du redan kan använda () -> Enhet för icke-avstängande typer.

Code Coverage Scanner

Kotlin har nu ett officiellt skanningsverktyg för kodtäckning. Kover är ett Gradle-plugin som samlar in täckningsstatistik för tester för Kotlin JVM, Multiplatform och blandade Java-projekt. Den kan generera rapporter i HTML- och XML-format.

Kover ger full kompatibilitet med Kotlin-språket och dess Gradle-verktygskedja. Även om vissa tredjepartsverktyg redan kan ge täckningsresultat, finns de utanför ekosystemet och har inte alltid insyn i varje uppgift. Kover erbjuder ett helt integrerat tillvägagångssätt. Utveckling pågår med denna initiala utgåva märkt som experimentell.

För att aktivera Kover, lägg till följande rader i din byggfil på toppnivå:

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

Kover kommer nu att köras som en del av dina Gradle-byggen.

Standardbibliotekstillägg

Det finns är några anmärkningsvärda ändringar av standardbiblioteket, inklusive främjandet av flera betafunktioner till stabila:

readln() och readlnOrNull()

Dessa två nya funktioner läser och returnerar en rad från standardinmatningsströmmen. Den förra kommer att kasta om EOF-märket har nåtts medan det senare returnerar null.

typeOf()

Funktionen typeOf() låter dig bestämma den faktiska typen av en reifierad typ, vanligtvis uttryckt som T, vid körning.

inline kul <reified T> getTypeString() : Sträng { val typ = typeOf<T>() return type.toString() }

Samlingsbyggare

Nya byggfunktioner låter dig enkelt skapa samlingar från en uppsättning olika värden. Du kan kombinera kartor, listor och uppsättningar till nya samlingar med förstklassiga funktioner:

val frukter = listOf("äpple", "banan"); val veg = listOf("morot", "kål");   val matvaror = buildList { tillsätt("mjölk") addAll(frukt) addAll(veg) }   //[“mjölk”, “äpple”, “banan”, “morot”, “kål”]

Varaktighetsvärden

Klassen Varaktighet för att representera tidsvärden har flyttats till stabila. Den tillhandahåller en integrerad typ för att lagra en tidsperiods varaktighet i din kod. Klassen har metoder som underlättar enkla konverteringar mellan enheter:

//Emitterar 1.0 println(60.toDuration(DurationUnit.SECONDS).in Minutes);

Fler standardbiblioteksändringar

Heltal har nya funktioner rotateLeft() och rotateRight(). Dessa roterar numrets binära representation med ett specificerat antal bitar i de angivna riktningarna. Regexes får sekvensdelade funktioner och konsekvent beteende för replace() och replaceFirst() i Java- och JavaScript-miljöer.

Vissa befintliga funktioner har fasats ut. Funktionerna concat(), match() och matches() på strängar, liksom funktionen sort() på arrayer, kommer nu att utfärda varningar. Deras funktionalitet täcks redan av alternativa alternativ.

Andra ändringar

Kotlin 1.6 lägger till några ekosystemförbättringar och förbättringar av livskvalitet. Bland dessa finns stöd för Xcode 13 och möjligheten att kompilera Windows-byggen på vilken plattform som helst. Om du riktar in dig på mingwX64 eller mingwX86 för Windows kan du nu kompilera från vilket system som helst som stöder Kotlin/Native-utveckling.

Annons

Förbättringar av kompilatorcacher för Linux- och iOS-versioner har halverat typiska byggtider efter den första körningen. Uppdateringar av Kotlins beroendekedja minskar diskanvändningen avsevärt. Genom att byta till LLVM 11.1 har macOS-versionen minskat från 1200 MB till cirka 300 MB.

Om du använder Kotlin JavaScript kan du nu inaktivera automatiska nedladdningar av Node.js och Yarn under byggprocessen . Detta är användbart när du kompilerar kod i en förkonfigurerad miljö där värden redan har dessa beroenden installerade.

Sammanfattning

Kotlin 1.6 är en hälsosam version med nya experimentella funktioner som banar vägen framåt och en bra lista över språk- och standardbiblioteksändringar som du kan använda idag. Det har också skett förbättringar av interoperabilitet mellan Kotlin-smaker så att mer kod kommer att bete sig likadant oavsett om den är kompilerad för JVM, Native eller JavaScript.

Milstolpen på 1,6 ser också Kotlins underhållare erbjuda en förlängd supportperiod för äldre API-versioner. Tre tidigare versioner kommer nu att stödjas på en rullande kadens. Detta innebär att du för närvarande kan välja att utveckla mot Kotlin version 1.3 till 1.6, vilket ger dig mer tid att uppgradera mellan utgåvorna.

Du kan flytta till Kotlin 1.6 idag genom att uppdatera din version av IntelliJ IDEA, Android Studio, Xcode , eller Kotlin CLI-kompilatorn. Det är värt att läsa igenom kompatibilitetsguiden först för att se till att du har åtgärdat alla tidigare rapporterade utfasningar som kommer att leda till varningar eller fel i 1.6.