¿Qué hay de nuevo en Kotlin 1.6? – CloudSavvy IT

Foto que muestra la superposición del logotipo de Kotlin en el código de computadora
Trismegist san / Shutterstock.com

Kotlin 1.6 Está fuera con nuevas funciones, un administrador de memoria experimental mejorado y una biblioteca estándar mejorada. Las adiciones ayudan a madurar el lenguaje multiplataforma y multidisciplinar cada vez más popular de JetBrains.

Nuevo administrador de memoria nativa

Podría decirse que el mayor cambio para el ecosistema de Kotlin es la llegada del nuevo administrador de memoria para Kotlin Native. Mientras todavía está etiquetado como vista previa para desarrolladores, el administrador actualizado es representativo de la dirección que tomará Kotlin en el futuro.

El diseño revisado está mejor equipado para lidiar con los diferentes backends de compilación utilizados para transformar Kotlin en código de plataforma nativa para iOS y Android. A veces, las plataformas requieren diferentes optimizaciones para una operación específica. El enfoque actual impone limitaciones a la simultaneidad y puede crear pérdidas de memoria sin una atención especial por parte del desarrollador.

El administrador de memoria de próxima generación aborda estas deficiencias. Ofrece primitivas sin fugas para operaciones simultáneas que son seguras de usar tal como están. Los cambios también aportan una mayor paridad a la gestión de la memoria nativa con el administrador de memoria existente para el desarrollo de JVM.

Si bien el nuevo sistema está disponible en Kotlin 1.6, actualmente no está diseñado para uso en producción. En algunas situaciones, el rendimiento podría verse reducido hasta 5x en comparación con el administrador de memoria heredado. Los esfuerzos de desarrollo están en curso en una versión de alto rendimiento que está lista para la adopción general.

Declaraciones Sealed When

Sellado when Las declaraciones le permiten recibir una advertencia del compilador cuando se olvida de manejar un posible caso. Si pasa una clase sellada, un tipo booleano o una enumeración a una when, normalmente querrá tomar un curso de acción explícito para cada posible valor de entrada:

sealed class Drivetrain {
    data class Electric(val Power: Int) : Drivetrain()
    data class Diesel(val Power: Int) : Drivetrain()
    data class Hybrid(val Diesel: Drivetrain, val Electric: Drivetrain) : Drivetrain()
}
 
fun getTotalPowerKwh(drivetrain: DriveTrain) : Int {
    when (drivetrain) {
        is Drivetrain.Diesel -> drivetrain.Diesel.Power
        is Drivetrain.Electric -> drivetrain.Electric.Power
    }
}

En el ejemplo anterior, el Drivetrain la clase sellada tiene tres clases de datos dentro de ella. El when La declaración solo maneja dos de ellos: si su código recibe una transmisión híbrida, se devolverá un valor incorrecto.

El compilador de Kotlin ahora le alertará sobre este problema. En Kotlin 1.7, no cubrir exhaustivamente todas las posibilidades resultará en un error de compilación.

Suspensión de transformaciones de tipo

Las transformaciones de tipos regulares a suspendidos se han estabilizado mediante conversiones automáticas del compilador. El compilador creará la conversión automáticamente cuando pase una expresión de tipo regular a un contexto donde se espera un tipo de suspensión.

Esto habilita un código como el siguiente:

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

Este código solía romperse en el segundo flow.collect() llamar. El createUserFunction variable se refiere a la definición de función regular, no a la suspensión creada por la primera llamada. Kotlin ahora manejará esto creando una versión suspendida cuando el contexto de recepción lo requiera.

Las funciones de suspensión también se admiten ahora como supertipos. Esto le permite pasar clases que implementan la suspensión de tipos funcionales siempre que se admita actualmente una referencia de función de suspensión.

class ImplementsSuspendingFunctionalType : suspend () -> Unit {
    override suspend fun invoke() { /* ... */ }
}

El suspend () -> Unit La interfaz se implementa de la misma manera que ya puede usar. () -> Unit para tipos sin suspensión.

Escáner de cobertura de código

Kotlin ahora tiene una herramienta oficial de escaneo de cobertura de código. Kover es un complemento de Gradle que recopila las estadísticas de cobertura de las pruebas para Kotlin JVM, multiplataforma y proyectos Java mixtos. Puede generar informes en formatos HTML y XML.

Kover proporciona compatibilidad total con el lenguaje Kotlin y su cadena de herramientas Gradle. Aunque algunas herramientas de terceros ya pueden proporcionar puntuaciones de cobertura, existen fuera del ecosistema y no siempre tienen visibilidad de todas las tareas. Kover ofrece un enfoque totalmente integrado. El desarrollo está en curso con esta versión inicial etiquetada como experimental.

Para habilitar Kover, agregue las siguientes líneas a su archivo de compilación de nivel superior:

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

Kover ahora se ejecutará como parte de tus compilaciones de Gradle.

Adiciones de biblioteca estándar

Hay algunos cambios notables en la biblioteca estándar, incluida la promoción de varias funciones beta a estable:

readln () y readlnOrNull ()

Estas dos nuevas funciones leen y devuelven una línea del flujo de entrada estándar. El primero lanzará si se ha alcanzado la marca EOF mientras que el segundo regresa null.

tipo de()

El typeOf() La función le permite determinar el tipo real de un tipo reificado, generalmente expresado como T, en tiempo de ejecución.

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

Constructores de colecciones

Las nuevas funciones del constructor le permiten crear fácilmente colecciones a partir de un conjunto de valores diferentes. Puede combinar mapas, listas y conjuntos en nuevas colecciones utilizando funciones de primera clase:

val fruits = listOf("apple", "banana");
val veg = listOf("carrot", "cabbage");
 
val groceries = buildList {
    add("milk")
    addAll(fruits)
    addAll(veg)
}
 
// ["milk", "apple", "banana", "carrot", "cabbage"]

Valores de duración

El Duration La clase para representar valores de tiempo se ha promovido a estable. Proporciona un tipo integrado para almacenar una duración de período de tiempo en su código. La clase tiene métodos que facilitan conversiones fáciles entre unidades:

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

Más cambios en la biblioteca estándar

Los enteros tienen nuevos rotateLeft() y rotateRight() funciones. Estos rotan la representación binaria del número en un número específico de bits en las direcciones indicadas. Ganancia de expresiones regulares funciones de secuencia dividida y comportamiento consistente para replace() y replaceFirst() en entornos Java y JavaScript.

Algunas funciones existentes han sido desaprobados. El concat(), match(), y matches() funciones en cadenas, así como el sort() función en matrices, ahora emitirá advertencias. Su funcionalidad ya está cubierta por opciones alternativas.

Otros cambios

Kotlin 1.6 agrega algunas mejoras en el ecosistema y mejoras en la calidad de vida. Entre estos se encuentra el soporte para Xcode 13 y la capacidad de compilar compilaciones de Windows en cualquier plataforma. Si estás apuntando mingwX64 o mingwX86 para Windows, ahora puede compilar desde cualquier sistema que admita el desarrollo Kotlin / Native.

Mejoras para compilar cachés para las compilaciones de Linux e iOS se han reducido a la mitad los tiempos de compilación típicos después de la primera ejecución. Las actualizaciones de la cadena de dependencias de Kotlin reducen significativamente el uso del disco. Cambiar a LLVM 11.1 ha cortado el versión macOS de 1200 MB a alrededor de 300 MB.

Si está utilizando JavaScript de Kotlin, ahora puede deshabilitar descargas automáticas de Node.js y Yarn durante el proceso de compilación. Esto es útil cuando está compilando código en un entorno preconfigurado donde el host ya tiene instaladas estas dependencias.

Resumen

Kotlin 1.6 es una versión saludable con nuevas características experimentales que allanan el camino hacia el futuro y una buena lista de cambios de lenguaje y bibliotecas estándar que puede usar hoy. También ha habido mejoras en la interoperabilidad entre los sabores de Kotlin, por lo que más código se comportará de la misma manera, ya sea que esté compilado para JVM, nativo o JavaScript.

El hito 1.6 también hace que los mantenedores de Kotlin ofrezcan un período de soporte extendido para versiones anteriores de API. Ahora se admitirán tres versiones anteriores en una cadencia continua. Esto significa que actualmente puede optar por desarrollar con las versiones 1.3 a 1.6 de Kotlin, lo que le brinda más tiempo para actualizar entre lanzamientos.

Puede pasar a Kotlin 1.6 hoy mismo actualizando su versión de IntelliJ IDEA, Android Studio, Xcode o el compilador CLI de Kotlin. Vale la pena revisar el guía de compatibilidad primero para asegurarse de haber abordado todas las bajas informadas anteriormente que generarán advertencias o errores en 1.6.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad