Kotlin 1.1 : JavaScript, Coroutines, et plus…

Cet article est la traduction du post officiel de Jetbrains. Quand il est indiqué «nous», il s’agit de Jetbrains ;-).

Aujourd’hui nous livrons Kotlin 1.1. C’est un grand pas en avant qui permet l’utilisation de Kotlin dans de nombreux nouveaux scénarios et nous espérons que vous l’apprécierez.

Notre vision pour Kotlin est d’offrir un unique langage expressif, performant et fortement typé pour tous les composants des applications modernes. Kotlin 1.1 réalise deux pas importants dans cette direction.

Tout d’abord, la compilation en JavaScript n’est plus expérimentale et supporte toutes les fonctionnalités du langage, une part importante de la librairie standard, ainsi que l’interopérabilité JavaScript. Vous pouvez ainsi migrer vos applications frontend web en Kotlin, tout en continuant à utiliser les frameworks JavaScript modernes tels que React.

Nous introduisons dans cette version les coroutines. Ces alternatives légères aux threads permettent des applications backends beaucoup plus scalables, en autorisant des charges très importantes sur une instance unique de JVM. Les coroutines sont également un outil très expressif pour implémenter des mécanismes asynchrones, ce qui s’avère important pour construire des interfaces réactives sur toutes les plateformes.

Nous détaillons ci-dessous plus en détail ces deux changements. Parmi les autres nouveautés se trouvent : les alias de type, les bound callable reference , la déstructuration des lambdas. La liste entière se trouve sur notre page What’s new (jetez un coup d’œil aux exemples exécutables!).

Coroutines

Les coroutines de Kotlin rendent le code asynchrone non bloquant aussi simple que du code synchrone.

La programmation asynchrone se développe énormément dans le monde informatique. La seule chose qui la limite est la complexité considérable ajoutée à nos systèmes par ce type de programmation. Kotlin offre désormais un moyen pour maîtriser cette complexité en faisant des coroutines un outil de premier ordre dans le langage à travers l’unique concept des suspending functions. Une telle fonction (ou lambda) représente un traitement qui peut être suspendu (sans blocage de thread) et repris plus tard.

Techniquement, les coroutines sont une implémentation très légère de multitâche coopératif (très semblables aux fibres). Elles agissent comme des threads fortement améliorés: quasiment pas de coût au démarrage, extrêmement bon marché à suspendre (la suspension est l’équivalent pour les coroutines du blocage pour les threads), très faciles à composer et à personnaliser.

Nous avons conçu les coroutines pour un maximum de flexibilité. L’impact au sein du langage est très faible. L’essentiel est réalisé sous forme de bibliothèques. Le projet kotlinx.coroutines comprend des bibliothèques pour Rx, CompletableFuture, NIO, JavaFx et Swing. Des bibliothèques similaires peuvent être écrites pour Android et JavaScript. De nombreuses constructions intégrées dans d’autres langages peuvent désormais être exprimées sous forme de bibliothèques Kotlin. Cela inclut generators/yield de Python, channel/select de Go et async/await de C#:

Vous trouverez plus de détail dans la documentation.

Note importante. Malgré tous leurs avantages, les coroutines Kotlin sont d’une conception assez nouvelle. Elle a besoin d’essais approfondis et réels avant de garantir son exactitude et sa complétude. C’est pourquoi nous la publions sous un drapeau “opt-in” expérimental. Les règles dans le langage ne devraient pas changer, mais les API peuvent nécessiter certains ajustements en Kotlin 1.2.

Le support de JavaScript

Comme indiqué précédemment, toutes les fonctionnalités du langage y compris les coroutines sont disponibles à la fois sous JVM/Android et JavaScript. La réflexion en JavaScript n’existe pas encore mais nous sommes en train d’y travailler. Cela signifie qu’une application Web peut être entièrement écrite en Kotlin. Nous l’avons expérimenté avec succès chez Jetbrains. Nous publierons prochainement des tutoriels et d’autres éléments à ce sujet.

Kotlin pour JavaScript possède des types dynamiques pour interagir avec le code JavaScript «natif». Pour utiliser les librairies JavaScript reconnues à travers des API fortement typées, vous pouvez vous appuyer sur ts2kt converter avec des en-têtes de DefinitelyTyped.

Nous supportons à la fois Node.js et le navigateur. La librairie standard est disponible à travers npm.

Plus de détail dans notre documentation.

Outillage

Kotlin 1.1 n’est pas une version majeure pour l’outillage. Nous préférons livrer les fonctionnalités d’outillage dès qu’elles sont prêtes dans la mesure où elles n’affectent pas ou ne dépendent pas du langage. C’est ainsi que vous avez vu de nombreuses améliorations dans les versions Kotlin 1.0.x.

Pour mettre en évidence quelques-unes:

  • Plugins Kotlin pour tous les IDE principaux: IntelliJ IDEA, Android Studio, Eclipse et NetBeans
  • Compilation incrémentale dans IntelliJ IDEA et Gradle
  • Plugins de compilation pour Spring, JPA et Mockito (rendant les classes ouvertes et générant des constructeurs sans arg)
  • Kapt pour le traitement des annotations
  • Support de Lint pour les projets Android
  • Nombreuses intentions IDE, inspections, corrections rapides, refactorings et améliorations de code

Nous allons continuer de travailler pour rendre nos outils encore mieux et livrer les mises à jour dans les versions 1.1.x.

La première année de Kotlin: Adoption et communauté

Kotlin grandit. Plus de 160 000 personnes l’ont utilisé au cours de la dernière année. Les projets OSS sur Github sont passés de 2.4M à 10M lignes de code Kotlin (x4). Notre communauté Slack est passée de 1'400 à plus de 5'700 personnes (plus de x4). De nombreuses rencontres et groupes d’utilisateurs sont organisés par la communauté du monde entier. Nous voyons de plus en plus de livres et de cours en ligne de Kotlin publiés.

Kotlin est autant utilisé sous Android qu’en développement serveur. Nous observons une base utilisateur répartie à environ 50/50. Spring Framework 5.0 a introduit le support Kotlin, ainsi que Vert.x 3.4. Gradle et TeamCity utilisent Kotlin pour les scripts de construction. D’autres projets utilisant Kotlin peuvent être trouvés sur kotlin.link.

Beaucoup d’entreprises renommées utilisent Kotlin en production: Amazon Web Services, Pinterest, Coursera, Netflix, Uber, Square, Trello, Basecamp et bien d’autres. Corda, un livre distribué développé par un consortium de banques connues (comme Goldman Sachs, Wells Fargo, J.P. Morgan, Deutsche Bank, UBS, HSBC, BNP Paribas, Société Générale), a plus de 90% de Kotlin dans sa base de code.

Nous sommes reconnaissants à tous nos utilisateurs, contributeurs et défenseurs dans toutes les parties du monde. Votre soutien est très important pour nous!

Organize your own Kotlin 1.1 Event

Kotlin 1.1 est une bonne raison pour une rencontre d’utilisateur locaux et d’amis. Nous avons préparer des éléments de support pour vous aider à organiser un évènement de ce type. Le 23 mars nous organiserons une session live avec les membres de l’équipe Kotlin. Il existe également un pack organisateur. Plus d’info et enregistrez votre évènement ici.

La suite

Pour faire de Kotlin un langage véritablement full-stack, nous allons fournir l’outillage et le support du langage pour compiler le même code pour plusieurs plates-formes. Cela facilitera le partage des modules entre le client et le serveur. Nous continuerons à améliorer l’outillage JavaScript et le support des bibliothèques. Entre autres choses, nous travaillons déjà sur la la compilation incrémentale pour JavaScript. Restez à l’écoute des mises à jour 1.1.x.

Java 9 est bientôt disponible. Nous fournirons le support de ses nouvelles fonctionnalités avant sa sortie.

Nous espérons obtenir beaucoup de retours sur les coroutines au cours des prochains mois. L’amélioration de cette section du langage (en termes de performance et de fonctionnalité) fait partie de nos priorités.

À part cela, notre prochaine version sera principalement axée sur la maintenance, les améliorations de performance, l’infrastructure et la correction de bug.

P.S. L’exécution du code sur plusieurs plates-formes est une axe stratégique pour Kotlin. Avec la version 1.1, nous pouvons fonctionner sur des serveurs, des ordinateurs de bureau, des appareils Android et des navigateurs. Mais à l’avenir nous allons compiler Kotlin en code natif pour l’exécuter sur beaucoup plus de plates-formes (y compris, par exemple, iOS et les périphériques embarqués). Une excellente équipe, chez JetBrains, travaille sur ce projet. Nous espérons vous montrer quelque chose d’intéressant bientôt. Cela ne vise cependant aucune version particulière.

Instructions d’installation

Comme toujours, vous pouvez essayer Kotlin en ligne sur try.kotlinlang.org.

Sous Maven/Gradle: Utilisez 1.1.0 comme numéro de version pour le compilateur et la librairie standard. Voir la documentation ici.

Dans IntelliJ IDEA: 2017.1 dispose de Kotlin 1.1 inclus, pour les versions précédentes installez ou mettez à jour le plugin Kotlin à la version 1.1.

Dans Android Studio: installez ou mettez à jour le plugin via le Plugin Manager.

Dans Eclipse: installez le plugin par le Marketplace.

Le compilateur en ligne de commande peut être téléchargé depuis la page Github de la version 1.1.

Compatibilité. La compatibilité ascendante est respectée en Kotlin 1.1 (pour le langage et la bibliothèque standard): du code compilé et exécuté en 1.0 continuera à fonctionner en 1.1. Pour aider les grandes équipes qui mettent à à jour progressivement leur code, nous fournissons un commutateur de compilation qui désactive les nouvelles fonctionnalités. Voici un document qui couvre les scénarios courants et les pièges possibles.

Have a nice Kotlin!

Show your support

Clapping shows how much you appreciated Gaetan Zoritchak’s story.