Sortie de Kotlin 1.4 M1 avec un nouvel algorithme de d'inférence de type

Par:
fredericmazue

mer, 25/03/2020 - 14:52

L'éditeur JetBrains a annoncé la sortie de la nouvelle version de son langage maison : Kotlin 1.4 M1. Une nouvelle version riche dont la nouveauté la plus remarquable et l'arrivée d'un nouvel algorithme d'inférence de type.

Il était possible d'essayer ce nouvel algorithme avec Kotlin 1.3 en spécifiant une option de compilation. Désormais ce nouvel algorithme est utilisé par défaut.

Le nouvel algorithme d'inférence déduit des types dans de nombreux cas où l'ancienne inférence vous obligeait à les spécifier explicitement. Par exemple, dans l'exemple suivant, le type du paramètre lambda it est correctement déduit comme étant String?

val rulesMap: Map<String, (String?) -> Boolean> = mapOf(
    "weak" to { it != null },
    "medium" to { !it.isNullOrBlank() },
    "strong" to { it != null && "^[a-zA-Z0-9]+$".toRegex().matches(it) }

On peut encore remarquer une API de réflexion commune révisée. Désormais, celle-ci ne contient que les membres disponibles sur les trois plates-formes cibles (JVM, JS, Native) afin que vous puissiez être sûr que le même code fonctionne sur l'une d'entre elles.

Mais il faut aussi remarquer une absence de compatibilité binaire. En effet un changement majeur avec le nouveau backend du compilateur IR est l'absence de compatibilité binaire avec le backend par défaut. Ce manque de compatibilité entre les deux backends pour Kotlin / JS signifie qu'une bibliothèque créée avec le nouveau backend du compilateur IR ne peut pas être utilisée à partir du backend par défaut, et vice versa. Si vous souhaitez utiliser le backend du compilateur IR pour votre projet, vous devez mettre à jour toutes les dépendances de Kotlin vers des versions qui prennent en charge ce nouveau backend.

En ce qui concerne les performances, Kotlin 1.4 M1, propose un nouvel allocateur d'objets qui fonctionne jusqu'à deux fois plus rapidement sur certains benchmarks, selon JetBrains. Actuellement, le nouvel allocateur est expérimental et n'est pas utilisé par défaut; vous pouvez y basculer en utilisant l'option du compilateur -Xallocator=mimalloc.

Toutes les niueautés de Kotlin 1.4 M1 sont récapitulées dans l'annance de JetBrains mentionnée ci-dessus.