Kotlin 1.0 est disponible en version finale
Le langage de programmation pour JVM et Android mise sur la compatibilité avec plusieurs outils existants

Le , par Olivier Famien, Chroniqueur Actualités
Depuis plus de 5 ans, Jetbrains et les contributeurs de la plateforme GitHub se sont lancés dans la mise en œuvre de Kotlin, le langage de programmation open source statiquement typé. Selon ses concepteurs, Kotlin se veut clair, sûr et suffisamment outillé pour répondre aux besoins des utilisateurs.


Un des points saillants mis en avant par l’équipe de développement, outre ceux cités, est son caractère interopérable avec le langage de programmation Java et sa compatibilité avec les architectures déjà existantes. Selon les dires d’Andrey Breslav, le concepteur en chef de ce langage, « n’importe quelle bibliothèque Java peut être utilisée dans Kotlin et vice versa ».

Aussi, ajoute-t-il, les développeurs embrassant ce langage n’auront pas besoin de tout « réapprendre, réinventer, refaire à partir de zéro », car les outils tels qu’Ant, Gradle et Maven peuvent être utilisés pour la compilation, IntelliJ IDEA ou Eclipse peuvent être utilisés comme environnement de développement et un outil en ligne permet de coder et effectuer des tests directement dans le navigateur. C’est ce qui incite Andrey et son équipe à décrire Kotlin comme un langage « pragmatique ».

Au début de ce mois, l’équipe de Jetbrains avait annoncé la disponibilité de la version Release Candidate (RC) de Kotlin 1.0. Avec cette version RC, les développeurs devaient recompiler leur code pour s’assurer qu’il fonctionne avec la nouvelle mouture.

Par ailleurs, la release candidate marquant une étape importante vers la sortie de première version stable, il était évident que la version finale de ce langage ne tarderait pas à voir le jour. Et depuis quelques heures, c’est désormais le cas. L’équipe de Jetbrains vient d’annoncer la disponibilité de la version finale de Kotlin 1.0.

À partir de cette phase, affirme Andrey Breslav, « nous nous engageons à assurer à long terme la compatibilité descendante du langage et de sa bibliothèque standard (Kotlin-stdlib) ». Pour parvenir à cela, Andrey explique dans la feuille de route « qu’un nouveau compilateur fonctionnera avec des binaires plus anciens (mais les compilateurs plus anciens ne pourront pas comprendre la composition des binaires plus récents, comme javac 1.6 n’est pas capable de lire les classes compilées par javac 1.8) ».

De même, plusieurs travaux tels que l’amélioration des performances de la chaine d’outils de Kotlin sont prévus, ainsi qu’un support de JavaScript et un support générant du bytecode Java 8 avec des expressions lambda optimisées.

Mais pour l’heure, l’on note dans cette version finale quelques changements au niveau de la bibliothèque et du compilateur. On peut citer par exemple le fait que :

  • l’annotation kotlin.Metadata doit être utilisée au lieu de KotlinClass ;
  • les anciennes annotations des métadonnées ont été supprimées du package kotlin.jvm.internal ;
  • l’usage de HALF_EVEN comme mode d’arrondi par défaut est préconisé pour l’opérateur de division BigDecimal ;
  • la taille de la mémoire tampon pour les opérations IO est maintenant de 8 k comme celle par défaut dans la classe Java BufferedReader ;
  • les éléments de la bibliothèque dépréciés dans la version RC ont été abandonnés ;
  • le problème d’incompatibilité avec RoboVM a été résolu ;
  • une mauvaise inférence du type du résultat obtenu avec la structure conditionnelle if/else a été réglée ;
  • un problème de visibilité interne des projets Gradle dans IntelliJ IDEA 16 a été corrigé ;
  • le compilateur déclenche l’exception UninferredParameterTypeConstructor dans un bloc de code où tous les types sont conditionnés par la condition When. Ce problème a été également réglé.

Pour ceux qui souhaitent utiliser Kotlin, nous rappelons qu’il est possible de s’en servir pour développer des applications côté serveur, des applications mobiles Android et des applications de bureau.

Kotlin sur GitHub

Source : Blog Jetbrains

Et vous ?

Que pensez-vous de cette version finale ? Les arguments présentés sont-ils suffisants pour vous faire migrer vers ce langage ?

Utilisez-vous déjà Kotlin ? Comment le trouvez-vous vis-à-vis des autres langages ?

Voir aussi

Forum Autres langages pour la JVM


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de tails tails - Membre éprouvé https://www.developpez.com
le 15/02/2016 à 20:00
Je m'y suis essayé il y a quelques temps, notamment pour le développement Android.
Je codais notamment dans Android Studio grâce au plugin Gradle.

La syntaxe et les fonctionnalités du langages me sont apparues agréables. J'ai eu l'impression en quelque sortes de me simplifier le développement de la même manière qu'avec le langage Groovy : la courbe d'apprentissage m'est apparue très courte d'ailleurs.

Seul bémol (c'était bien avant la sortie du 1.0, que je n'ai pas encore testé), lors d'un déploiement en mode débogage sur un vrai périphérique, l'application que je développais ne pouvais pas démarrer, alors que sur les émulateurs (x86) elle fonctionnait correctement.
Avatar de IsiTech IsiTech - Membre actif https://www.developpez.com
le 15/02/2016 à 23:18
Je test Kotlin pour du développement Android depuis peu et j'aime beaucoup. La syntaxe est particulièrement agréable, toutes les bibliothèques que j'utilise sur mes projets Android fonctionnent avec Kotlin et le langage est bien intégré à Android Studio.

Je pense que Kotlin a toutes les chances de se faire une place dans le développement Android, il reste à espérer que Jetbrains continue à supporter le langage et que Google s'y intéresse.
Avatar de baos! baos! - Membre du Club https://www.developpez.com
le 19/02/2016 à 9:12
Le principal avantage de kotlin est sans doute sa capacité à éviter le NullPointerException via la phase de compilation et une syntaxe spécifique (Son seul concurrent est ceylon, un langage récent aussi).
C'est plus puissant que le "Option" de scala; les langages existants (Java, C# ...) ne peuvent adopter ce principe sans briser leur compatibilité ascendante; c'est sans doute une évolution aussi importante que l'avait été le garbage collector de Java à sa sortie.
Si ce langage n'a pas le succès qu'il mérite; au minimum, ce principe du NullSafety devra faire partie des langages d'avenir
Avatar de Logan Mauzaize Logan Mauzaize - Rédacteur/Modérateur https://www.developpez.com
le 19/02/2016 à 22:16
Ayant étudié de prêt Ceylon, je suis curieux de regarder ce langage de plus prêt. Le problème c'est que ce n'est pas le seul sur la pile sans compter les frameworks, les bases de données, les sérialisations, les middlewares, etc. difficile de tout regarder dans le détail.

En parlant de Ceylon, il va plus loin dans la sûreté en l'appliquant également dans la conversion (cast), ainsi il n'y a pas de ClassCastException non plus. Est-ce que Kotlin fait de même ?

Autre point, y a-t-il un projet porteur pour ce langage comme Play!/Akka pour Scala, Gradle/Grails pour Groovy ? Je pense que c'est ce qui fait cruellement défaut à Ceylon pour réellement décollé. Même si un gros travail a été fait pour proposer une API Vert.x pour Ceylon.
Avatar de _skip _skip - Expert éminent https://www.developpez.com
le 20/02/2016 à 11:10
Un des premiers points positifs de Kotlin, qui était un blocker pour moi avec Ceylon, c'est l'absence de compromis sur les types standards de java.
Je comprends que pour certaines personnes, les tableaux sans boxing ainsi que les nombres de moins de 64 bits (byte, short, float, int) ne soient pas nécessaires. Malheureusement c'est pas valable dans mon cas, avoir des listes de 1000000 int primitifs ou 1000000 longs boxés, ça revient pas au même. J'ai l'impression que c'est un compromis imposé au backend JVM pour le bénéfice de l'interop javascript, en réalité je suis pas sûr des vraies raisons.

Les points les plus intéressants à mon sens dans Ceylon et qui me manquent en java, soit

  • les properties (un remplacement de getter/setter sans méthodes détournées comme Lombok)
  • la distinction entre référence nullable ou non
  • Les variables immuable (final) ou non
  • l'inférence de type


Je les retrouve aussi dans Kotlin. En revanche, un point sympa dans ceylon qui n'est pas dans Kotlin, ce sont les intersections et les unions de type.

J'ai utilisé kotlin dans un projet non stratégique ces derniers jours (conversion de données) et je voulais tester en même temps l'interaction avec du java standard. J'ai utilisé l'une des choses les plus moches de java, soit du JAXB dont j'ai recouvert mes classes kotlin d'annotations. Je m'attendais à ce que ça foire à cause de la réflection et de différences subtiles sur la nature des types, Je n'ai eu aucun effort spécifique à faire pour sérializer mes objets en XML dans un sens et l'autre, j'ai juste du mettre des valeurs par défaut aux arguments de mon constructeur principal pour être compatible javaBean. Ajouté une librairie java pour parser du HTML, aucun souci là non plus, je me sers directe de la lib sans ciment.

J'ai adoré me servir des extensions de la lib standard pour la classe File (ForeachLine, Writer)
https://kotlinlang.org/api/latest/jv...java.io.-file/

Je me sers peu des lambdas dans java8 sur les collections et les map, en quelques minutes de Kotlin j'en suis devenu accroc. Etant utilisateur d'Intellij ultimate, j'avais droit à un support IDE de pointe, la syntaxe sort naturellement, y'a ce petit "it" pour faire référence à l'objet concerné qu'on peut renommer si le souhaite en cas de nesting, tout cela coule tout seul, concis et lisible. Normalement je suis pas emballé par les déclarations "nomVariable : Type" mais ça pose en fait rarement problème tant j'use et abuse de l'inférence de type.

Bref, après ce premier contact, sentiment très positif. J'ai l'impression de faire du python avec le typage poussé (càd avec l'IDE qui comprend ce que vous retourne vos constructions et l'autocomplétion en conséquence) tout en pouvant profiter pleinement de l'écosystème de java. Pour moi c'était l'un des possibles juste milieu pour la JVM, un java amélioré avec 80% de ce que Scala offre de vraiment utile mais sans l'effort d'apprentissage.

Je ne saurais pas pondre une comparaison ceylon et kotlin, mais je trouve qu'ils vont tous les deux dans le bon sens et surtout les deux se relisent très très bien. Je n'aurai aucun souci à les utiliser pour un développement en équipe avec des développeurs de niveau inégal (alors que Scala je serais prudent à ce que je risque de devoir lire). C'est cependant dommage qu'effectivement, autant pour l'un que pour l'autre, il manque le super framework qui donne envie, comme play! pour Scala.
Avatar de UnFroMage UnFroMage - Futur Membre du Club https://www.developpez.com
le 25/02/2016 à 11:29
Citation Envoyé par _skip Voir le message
Un des premiers points positifs de Kotlin, qui était un blocker pour moi avec Ceylon, c'est l'absence de compromis sur les types standards de java.
Je comprends que pour certaines personnes, les tableaux sans boxing ainsi que les nombres de moins de 64 bits (byte, short, float, int) ne soient pas nécessaires. Malheureusement c'est pas valable dans mon cas, avoir des listes de 1000000 int primitifs ou 1000000 longs boxés, ça revient pas au même.
Je ne veux pas faire de la promo pour Ceylon dans une discussion sur Kotlin, ça serait mal venu. Par contre je voulais juste répondre à ça pour dire que en Ceylon si vous compilez pour la JVM, vous pouvez utiliser les tableaux de la JVM (`int[]` -> `java.lang.IntArray` en Ceylon par exemple) qui ne feront donc pas de boxing.
Avatar de Michael Guilloux Michael Guilloux - Chroniqueur Actualités https://www.developpez.com
le 29/11/2017 à 12:05
Kotlin 1.2 est disponible : cette nouvelle version permet de partager le code entre la JVM et JavaScript
et améliore de 25 % les temps de compilation

L'équipe JetBrains vient de publier une nouvelle version majeure de son langage de programmation Kotlin : la version 1.2. Rappelons-le, Kotlin est un langage de programmation orienté objet et fonctionnel, avec un typage statique qui permet de compiler pour la Machine virtuelle Java (JVM) et JavaScript. Il est également un langage de choix pour le développement Android. Sa première version officielle, Kotlin 1.0, a été publiée en février 2016 et la version 1.1 en mars dernier.

Kotlin 1.2 est donc la deuxième version majeure pour cette année, et est présenté par l'équipe JetBrains comme une grande avancée vers son objectif de permettre l’utilisation de Kotlin dans tous les composants d’une application moderne. « Avec Kotlin 1.1, nous avons fourni le support officiel de JavaScript comme cible de déploiement, permettant ainsi de compiler Kotlin en JS pour une exécution dans le navigateur », expliquent les développeurs du langage. « Avec Kotlin 1.2, nous ajoutons la possibilité de partager le code entre la JVM et JavaScript. Vous pouvez désormais écrire une seule fois la logique métier de votre application et la réutiliser dans toutes les couches de votre application — le backend, un navigateur frontend et une application mobile Android. » L'équipe JetBrains dit également travailler sur des bibliothèques favorisant la réutilisation du code, comme une bibliothèque cross-platform de sérialisation.

La principale nouveauté dans Kotlin concerne donc les projets multiplateformes, mais il y a aussi des gains de performance pour la compilation, ainsi que d’autres améliorations du langage et de la bibliothèque standard.

Projets multiplateformes

Un projet multiplateforme vous permet de construire plusieurs couches de votre application — backend, frontend et App Android — depuis la même base de code. Ce type de projet contient à la fois des modules communs, qui contiennent du code indépendant de la plateforme, et des modules plateforme, qui contiennent le code spécifique à une plateforme (JVM ou JS) et qui peuvent utiliser des bibliothèques de cette plateforme. Kotlin 1.2 vous permet donc d'appeler du code plateforme depuis un module commun.


Comme cela a été également mentionné précédemment, JetBrains travaille sur une série de bibliothèques communes pour vous permettre de déplacer plus de code vers des modules communs. Il s’agit notamment de :

  • kotlin.test, qui est inclus par défaut dans Kotlin 1.2 et vous permet d’écrire vos tests une seule fois et de les exécuter à la fois dans la JVM et en JS ;
  • kotlinx.html, qui supporte un rendu isomorphique — le même code produit du HTML en backend et en frontend ;
  • kotlinx.serialization, qui permet de sérialiser facilement vos objets Kotlin entre les différentes couches de votre application, en utilisant JSON ou ProtoBuf comme format de sérialisation.

Il est important de préciser que les projets multiplateformes sont actuellement disponibles en tant que fonctionnalité expérimentale. Cela veut dire que la fonctionnalité peut être utilisée, mais il est possible que sa conception soit modifiée dans la prochaine version de Kotlin. Dans ce cas, JetBrains assure qu’il fournira aux développeurs des outils de migration.

Performances de compilation

Kotlin 1.2 vient avec des optimisations pour les performances du compilateur. JetBrains dit avoir amélioré les temps de compilation de 25 % par rapport à Kotlin 1.1, et prévoit d’autres améliorations significatives qui seront introduites dans les mises à jour Kotlin 1.2.x.

Autres améliorations du langage et de la bibliothèque standard

JetBrains a également réalisé des améliorations ciblées du langage et de la bibliothèque standard. Il s'agit entre autres de :

  • une syntaxe plus concise pour transmettre plusieurs paramètres à une annotation (array literals) ;
  • le support de lateinit sur les propriétés top-level et les variables locales, ainsi que la vérification de l’initialisation effective d’une variable lateinit ;
  • des smart casts plus évolués et une amélioration de l’inférence de type dans certains cas ;
  • la compatibilité de la bibliothèque standard avec les restrictions de séparation de package introduites par Java 9 ;
  • un nouveau package kotlin.math dans la bibliothèque standard ;
  • de nouvelles fonctions dans la bibliothèque standard pour travailler avec les séquences et les collections, comprenant notamment une série de fonctions pour séparer une collection ou une séquence en plusieurs groupes de taille définie.

Kotlin : une adoption croissante dans la communauté des développeurs et éditeurs

Comme nous l’avons déjà mentionné, Kotlin est maintenant un langage officiel pour le développement Android, avec un support inclus dans Android Studio 3.0. Comme conséquence, JetBrains note que Kotlin est déjà utilisé dans plus de 17 % des projets sous Android Studio 3.0, y compris dans des applications des startups les plus actives et des entreprises du Fortune 500.

Du côté serveur, il faut également noter que Spring Framework 5.0 a été publié avec de nombreuses fonctionnalités de support de Kotlin, et le framework événementiel pour la JVM Vert.x supporte Kotlin depuis la publication de la version 3.4.0. Par ailleurs, Gradle est désormais fourni avec le support d’un DSL Kotlin, et le projet Gradle Kotlin DSL s’approche rapidement de la publication de sa version 1.0.

JetBrains explique que depuis la sortie de Kotlin 1.1 en mars de cette année, l’adoption du langage a connu une croissance très importante dans le monde. L'intérêt croissant pour Kotlin s'est confirmé récemment à la première conférence internationale KotlinConf qui a réuni environ 1200 participants à San Francisco les 2 et 3 novembre.

Kotlin 1.2 étant disponible, vous pouvez l'essayer en ligne à l'adresse try.kotlinlang.org ou directement dans vos IDE :
  • sous Maven, Gradle et npm : utilisez 1.2.0 comme numéro de version pour le compilateur et la bibliothèque standard ;
  • sous IntelliJ IDEA : utilisez la version 2017.3 qui contient Kotlin 1.2. Pour les versions précédentes, installez ou mettez à jour le plugin Kotlin plugin à la version 1.2 ;
  • sous Android Studio : installez ou mettez à jour le plugin depuis Plugin Manager ;
  • sous Eclipse : installez le plugin en utilisant Marketplace.

Il faut noter que le compilateur en ligne de commande peut être téléchargé depuis la page GitHub sur les notes de version. En ce qui concerne la compatibilité, avec Kotlin 1.2, le langage et la bibliothèque standard assurent la compatibilité ascendante. Cela veut dire que ce qui compilait et s’exécutait dans les versions 1.0 et 1.1 devrait continuer à fonctionner avec la version 1.2. Pour aider les équipes de grande taille à effectuer la mise à jour de leur code progressivement, l'équipe JetBrains fournit aussi des options de compilateur qui désactivent les nouvelles fonctionnalités.

Sources : Blog JetBrains, Nouveautés dans Kotlin 1.2

Et vous ?

Utilisez-vous Kotlin ? Si oui, avec quel IDE ?
Que pensez-vous des nouveautés de Kotlin 1.2 ?
Qu’attendez-vous encore du langage ?

Voir aussi :

Android Studio 3.0 est disponible avec le support de Kotlin, plus de fonctionnalités Java 8 et bien plus
Développement Android : Kotlin gagnerait du terrain au détriment de Java, et Realm prédit qu'il sera le plus utilisé fin 2018
Classement Tiobe : Kotlin, le langage pour JVM entre dans le top 50, et pourrait connaître la même ascension rapide que Swift, selon certains
Avatar de ilapasle25 ilapasle25 - Inactif https://www.developpez.com
le 29/11/2017 à 21:19
Je connais pas Kotline mais j'ai pas envie connaitre. Java marche et marchera toujours bien, pourquoi changer ?
Avatar de nhugodot nhugodot - Membre du Club https://www.developpez.com
le 08/12/2017 à 8:26
Kotlin, sans e, merci.

Qu'un langage puisse tourner sur 2 VM différentes, Java et ES (arrêtons de parler de JS svp...), wow! On a aujourd'hui 3 "terminaux" cibles, le web, Android et iOS, et on aimerait effectivement n'avoir qu'un code...: ES pour les SPA utilisant WebView mais plus lent que du natif, PWA (Ionic 3...) bientôt si Apple enfin ne fait pas d'abus de quasi monopole, WebAssembly (WASM) idem si Apple veut bien, ES avec React Native ou NativeScript ou mieux, C# avec MS Xamarin, hybrides quasi natifs, ou ce nouveau Kotlin pour Web et Android. (Quid de Dart sur framework Flutter pour Android et iOS?). Ca commence à faire beaucoup de solution et de types d'hybridations, un tableau serait utile pour éclaircir le présent et futur proches...
Et le futur d'Android, c'est FuschiaOS avec les langages C, C++, Rust, Go, Python et Swift supportés, mais pas ES ni Java, soit justement... pas Kotlin, pourtant désormais supporté officiellement par Google pour son Android actuel!!! Allez comprendre...

On sera in fine drivé par le chaînon faible, comme JS/ES a fini sur les serveurs (Node) à défaut des langages sérieux serveurs sur le navigateur: Apple iOS et son "Swift et rien que Swift" (et un peu de ES mais juste pour vous faire plaisir et surtout pas d'ombre à ma vache à lait Ap'Store et sa com° de 30% + 99€/an...). C'est d'ailleurs bien pour ça que Google a annoncé le support de Swift pour Fuschia... mais pas de Kotlin. Et puisque Swift est désormais open-source, pourquoi pas l'enrichir (le forker?) pour qu'il sache faire du web (sur WebAssembly) et sur Android? On peut rêver...

En 2000, on s'était pris à rêver à ne plus coder en windows et peut-être mac mais tout en web, maintenant on doit coder en web, android, ios, et peut-être en windows et en macos... un rêve s'est perdu en route...
Avatar de SurferIX SurferIX - Membre chevronné https://www.developpez.com
le 08/12/2017 à 15:01
Citation Envoyé par nhugodot Voir le message
Kotlin, sans e, merci. (...)
En 2000, on s'était pris à rêver à ne plus coder en windows et peut-être mac mais tout en web, maintenant on doit coder en web, android, ios, et peut-être en windows et en macos... un rêve s'est perdu en route...
Merci beaucoup pour toutes ces informations, très utiles. Cela confirme que rester dans des langages bétons comme C / C++ est plutôt pérenne...

De mon côté, je reste sur Unity / C# pour Linux, Windows, Android, iOS et même PS4, pour des applis professionnelles avec un bon UI. Oui je sais c'est lourd, une appli Unity plein de RAM juste pour afficher 4 combobox et 6 checkboxes + 2 boutons, mais en termes de cross-compilation + fonctionnement 100% identique sur tous les supports, c'est simple : il n'y a rien de mieux, tout court. En plus C# est vraiment un langage excellent.
Côté Web, même chose pour la rentabilité : rien n'arrive à la cheville de Django / Python.

Mais je supporte Kotlin à ma façon : je paie une souscription PyCharm à Jetbrains depuis trois ans déjà !
Contacter le responsable de la rubrique Accueil