{"id":188440,"date":"2021-08-25T10:15:15","date_gmt":"2021-08-25T09:15:15","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kotlin\/2021\/08\/kotlin-1-5-30-released\/"},"modified":"2021-10-05T14:52:47","modified_gmt":"2021-10-05T13:52:47","slug":"kotlin-1-5-30-est-disponible","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/fr\/kotlin\/2021\/08\/kotlin-1-5-30-est-disponible\/","title":{"rendered":"Kotlin 1.5.30 est disponible!"},"content":{"rendered":"\n<p>Kotlin 1.5.30 \u00e9tant la derni\u00e8re version incr\u00e9mentale avant Kotlin 1.6.0, elle comprend de nombreuses fonctionnalit\u00e9s exp\u00e9rimentales pour le langage et la biblioth\u00e8que standard que nous pr\u00e9voyons de publier dans Kotlin 1.6.0. Essayez-les et faites-nous part de vos commentaires, vous pouvez vraiment influencer le r\u00e9sultat final&nbsp;! Parmi ces fonctionnalit\u00e9s exp\u00e9rimentales, vous trouverez notamment les d\u00e9clarations <code>when<\/code> scell\u00e9es, des modifications des exigences relatives \u00e0 l&#8217;opt-in, l&#8217;instanciation des classes d&#8217;annotation et des am\u00e9liorations des API stdlib <code>Duration<\/code> et <code>Regex<\/code>.<\/p>\n\n\n\n<p>Avec Kotlin 1.5.30, vous b\u00e9n\u00e9ficiez \u00e9galement de la prise en charge native d&#8217;Apple Silicon, du backend Kotlin\/JS IR en version b\u00eata, de la possibilit\u00e9 d&#8217;utiliser des biblioth\u00e8ques <code>cinterop<\/code> personnalis\u00e9es dans le code natif partag\u00e9 des applications multiplateformes, de la prise en charge des cha\u00eenes d&#8217;outils Java fournie par le plugin Kotlin Gradle, et bien plus encore.<\/p>\n\n\n\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Mise \u00e0 jour vers Kotlin 1.5.30\" href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/08\/kotlin-1-5-30-released\/#how-to-install\">Faire la mise \u00e0 jour vers Kotlin 1.5.30<\/a><\/p>\n\n\n\n<p>Cet article donne un aper\u00e7u des mises \u00e0 jour apport\u00e9es par cette version&nbsp;:<\/p>\n\n\n\n<ul><li><strong>Am\u00e9liorations du langage<\/strong>, avec notamment les d\u00e9clarations <code>when<\/code> scell\u00e9es, la prise en charge des fonctions <code>suspend<\/code> en tant que supertypes et des modifications des exigences en mati\u00e8re d&#8217;opt-in.<\/li><li><strong>Am\u00e9liorations pour Koltin multiplatform<\/strong>, avec notamment la possibilit\u00e9 d&#8217;utiliser des biblioth\u00e8ques <code>cinterop<\/code> personnalis\u00e9es dans du code natif partag\u00e9 et la prise en charge de XCFrameworks comme format de sortie.<\/li><li><strong>Am\u00e9liorations Kotlin\/JVM<\/strong>, avec notamment l&#8217;instanciation des classes d&#8217;annotation et la configuration am\u00e9lior\u00e9e de la prise en charge des annotations de nullabilit\u00e9.<\/li><li><strong>Am\u00e9liorations de Kotlin\/Native<\/strong>, avec notamment la prise en charge native d&#8217;Apple Silicon et un DSL Kotlin am\u00e9lior\u00e9 pour le plugin Gradle CocoaPods.<\/li><li><strong>Am\u00e9liorations pour Kotlin\/JS IR<\/strong>, avec notamment le passage du backend JS IR en version b\u00eata et une meilleure exp\u00e9rience de d\u00e9bogage pour le nouveau backend.<\/li><li><strong>Am\u00e9liorations relatives \u00e0 Gradle<\/strong>, avec notamment la prise en charge des cha\u00eenes d&#8217;outils Java qui facilite la d\u00e9finition explicite des arguments JVM pour le d\u00e9mon Kotlin.<\/li><li><strong>Am\u00e9liorations de la biblioth\u00e8que standard<\/strong> pour les API <code>Duration<\/code> et <code>Regex<\/code>.<\/li><\/ul>\n\n\n\n<!--more-->\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Nouveaut\u00e9s de Kotlin 1.5.30\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/rNbb3A9IdOo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Mise \u00e0 jour automatique vers Kotlin 1.5.30<\/h2>\n\n\n\n<p>Si vous utilisez <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/idea\/download\/\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> ou <a href=\"https:\/\/developer.android.com\/studio\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Android Studio<\/a>, vous pouvez opter pour la mise \u00e0 jour automatique de Kotlin vers sa nouvelle version.<\/p>\n\n\n\n<p>Retrouvez les indications pour l&#8217;installation de Kotlin 1.5.30 \u00e0 la fin de cet article.<\/p>\n\n\n\n<div style=\"background-color: #f1f6fe; margin-bottom: 2px; padding: 5px; margin-right: 0%; text-align: left; min-height: px;\">\n<p><b>Remarque&nbsp;:<\/b> la derni\u00e8re version d&#8217;IntelliJ IDEA (2021.2) ne prend pas en charge Kotlin 1.5.30. Si vous avez d\u00e9j\u00e0 effectu\u00e9 la mise \u00e0 jour, vous pouvez facilement installer IntelliJ IDEA 2021.1 en utilisant l&#8217;application <a href=\"https:\/\/www.jetbrains.com\/toolbox-app\/\" target=\"_blank\" rel=\"noopener\">Toolbox App<\/a> et utiliser Kotlin 1.5.30 dans cette version ou vous attendre la disponibilit\u00e9 de la version 1.5.31.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"language\">Langage<\/h2>\n\n\n\n<p>La <a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html#roadmap-details\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">feuille de route de Kotlin<\/a> pr\u00e9voit l&#8217;ajout de la prise en charge des d\u00e9clarations <code>when<\/code> scell\u00e9es, les annotations d&#8217;opt-in, l&#8217;am\u00e9lioration de l&#8217;inf\u00e9rence de type et la stabilisation de l&#8217;inf\u00e9rence du constructeur.&nbsp;<\/p>\n\n\n\n<p>Kotlin 1.5.30 fournit un aper\u00e7u de ces fonctionnalit\u00e9s, dont la publication est pr\u00e9vue pour la version 1.6.0.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">D\u00e9clarations <code>when<\/code> scell\u00e9es<\/h3>\n\n\n\n<p>Les <code>when<\/code> scell\u00e9es ont re\u00e7u plus de <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-12380\" target=\"_blank\" rel=\"noopener\">280 votes dans YouTrack<\/a>. Si vous <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#exhaustive-when-statements-for-sealed-and-boolean-subjects\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">activez cette fonctionnalit\u00e9 dans la version 1.5.30<\/a>, le compilateur Kotlin vous avertira si l&#8217;une de vos d\u00e9clarations <code>when<\/code> n&#8217;est pas exhaustive. Cela permet d&#8217;am\u00e9liorer la s\u00e9curit\u00e9 de votre code sans que vous ayez \u00e0 introduire vos propres fonctions.<\/p>\n\n\n\n<p>Essayez cette fonctionnalit\u00e9 et donnez votre avis dans <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-12380\" target=\"_blank\" rel=\"noopener\">ce ticket YouTrack<\/a>.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prise en charge des fonctions <code>suspend<\/code> en tant que supertypes<\/h3>\n\n\n\n<p>Kotlin 1.5.30 offre un aper\u00e7u de la possibilit\u00e9 d&#8217;utiliser des types fonctionnels <code>suspend<\/code> comme super interfaces, bien qu&#8217;il y ait encore <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#suspending-functions-as-supertypes\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">quelques limitations<\/a>. C&#8217;est l&#8217;une des pi\u00e8ces manquantes dans la conception des coroutines de Kotlin.<\/p>\n\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nclass MyClass: suspend () -&gt; Unit {\n    override suspend fun invoke() { TODO() }\n}\n<\/pre>\n\n\n\n<p><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#suspending-functions-as-supertypes\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Activez cette fonctionnalit\u00e9<\/a>, essayez-la et donnez votre avis dans <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/kt-18707\" target=\"_blank\" rel=\"noopener\">ce ticket YouTrack<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Modifications des exigences en mati\u00e8re d&#8217;opt-in<\/h3>\n\n\n\n<p>Kotlin 1.5.30 marque une \u00e9tape suppl\u00e9mentaire vers la <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-22956\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">publication des annotations d&#8217;opt-in<\/a> &nbsp;:<\/p>\n\n\n\n<ul><li>Pr\u00e9sentation <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#changes-to-using-opt-in-requirement-annotations-with-different-targets\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">de nouvelles r\u00e8gles<\/a> pour l&#8217;utilisation et la d\u00e9claration des annotations d&#8217;exigences d&#8217;opt-in sur diff\u00e9rentes cibles.&nbsp;<\/li><li>Exigence d&#8217;opt-in m\u00eame pour les utilisations implicites d&#8217;une API exp\u00e9rimentale. Par exemple, si le type de retour de la fonction est marqu\u00e9 comme un \u00e9l\u00e9ment d&#8217;API exp\u00e9rimental, l&#8217;utilisation de la fonction n\u00e9cessitera un opt-in m\u00eame si la d\u00e9claration n&#8217;est pas marqu\u00e9e comme n\u00e9cessitant un opt-in explicitement.<\/li><\/ul>\n\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n\/\/ Library code\n\n@RequiresOptIn(message = &quot;This API is experimental.&quot;)\n@Retention(AnnotationRetention.BINARY)\n@Target(AnnotationTarget.CLASS)\nannotation class MyDateTime \/\/ Opt-in requirement annotation\n\n@MyDateTime\nclass DateProvider \/\/ A class requiring opt-in\n\n\/\/ Client code\n\n\/\/ Warning: experimental API usage\nfun createDateSource(): DateProvider { \/* ... *\/ }\n\nfun getDate(): Date {\n    val dateSource = createDateSource() \/\/ Also warning: experimental API usage\n    \/\/ ... \n}\n<\/pre>\n\n\n\n<p>Testez ces nouveaut\u00e9s et partagez vos retours dans <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-22956\" target=\"_blank\" rel=\"noopener\">ce ticket YouTrack<\/a>.&nbsp;<\/p>\n\n\n\n<p>En savoir plus sur <a href=\"https:\/\/kotlinlang.org\/docs\/opt-in-requirements.html\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">les exigences en mati\u00e8re d&#8217;opt-in<\/a>.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Am\u00e9lioration de l&#8217;inf\u00e9rence de type sur les types g\u00e9n\u00e9riques r\u00e9cursifs<\/h3>\n\n\n\n<p>Lorsque <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#improvements-to-type-inference-for-recursive-generic-types\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">l&#8217;inf\u00e9rence de type sur les types g\u00e9n\u00e9riques r\u00e9cursifs<\/a> est activ\u00e9e, le compilateur de Kotlin 1.5.30 peut inf\u00e9rer un argument de type en se basant uniquement sur les limites sup\u00e9rieures du param\u00e8tre de type correspondant s&#8217;il s&#8217;agit d&#8217;un g\u00e9n\u00e9rique r\u00e9cursif. Cela permet de cr\u00e9er divers mod\u00e8les avec des types g\u00e9n\u00e9riques r\u00e9cursifs qui sont souvent utilis\u00e9s en Java pour r\u00e9aliser des API de constructeur.<\/p>\n\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n\/\/ Kotlin 1.5.20\nval containerA = PostgreSQLContainer&lt;Nothing&gt;(DockerImageName.parse(&quot;postgres:13-alpine&quot;)).apply {\n    withDatabaseName(&quot;db&quot;)\n    withUsername(&quot;user&quot;)\n    withPassword(&quot;password&quot;)\n    withInitScript(&quot;sql\/schema.sql&quot;)\n}\n\n\/\/ Kotlin 1.5.30\nval containerB = PostgreSQLContainer(DockerImageName.parse(&quot;postgres:13-alpine&quot;))\n    .withDatabaseName(&quot;db&quot;)\n    .withUsername(&quot;user&quot;)\n    .withPassword(&quot;password&quot;)\n    .withInitScript(&quot;sql\/schema.sql&quot;)\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9limination des restrictions d&#8217;inf\u00e9rence du constructeur<\/h3>\n\n\n\n<p>Lorsque <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#eliminating-builder-inference-restrictions\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">l&#8217;\u00e9limination des restrictions d&#8217;inf\u00e9rence du constructeur<\/a> est activ\u00e9e, Kotlin 1.5.30 supprime supprime les limites d&#8217;inf\u00e9rence du constructeur.  Vous pouvez non seulement sp\u00e9cifier l&#8217;information de type que l&#8217;inf\u00e9rence du constructeur peut d\u00e9duire, mais \u00e9galement utiliser la fonction <code>get<\/code> sur celle-ci. Par exemple, vous pouvez appeler <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.collections\/-list\/get.html\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\"><code>get()<\/code><\/a> \u00e0 l&#8217;int\u00e9rieur d&#8217;un argument lambda de <code>buildList()<\/code> sans arguments de type explicitement sp\u00e9cifi\u00e9s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"multiplatform\">Kotlin Multiplatform<\/h2>\n\n\n\n<p>Kotlin 1.5.30 apporte plusieurs am\u00e9liorations pour Kotlin Multiplatform&nbsp;:<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#ability-to-use-custom-cinterop-libraries-in-shared-native-code\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Possibilit\u00e9 d&#8217;utiliser des biblioth\u00e8ques <code>cinterop<\/code> personnalis\u00e9es dans du code natif partag\u00e9<\/a>, ce qui \u00e9tend la possibilit\u00e9 de partager des biblioth\u00e8ques d\u00e9pendantes de la plateforme livr\u00e9es avec Kotlin\/Native.&nbsp;<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#support-for-xcframeworks\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Prise en charge de XCFrameworks<\/a> comme format de sortie pour tous les projets Kotlin Multiplatform. XCFrameworks permet de regouper la logique pour toutes les plateformes et architectures cibles dans un seul paquet et il n&#8217;est pas n\u00e9cessaire de supprimer les architectures inutiles avant de publier l&#8217;application sur l&#8217;App Store.<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#new-default-publishing-setup-for-android-artifacts\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Nouvelle configuration de publication par d\u00e9faut pour les artefacts Android<\/a>. Cette configuration sera compatible avec tout type de build (comme <code>debug<\/code> ou <code>release<\/code>) par d\u00e9faut. Avant la version 1.5.30, les <a href=\"https:\/\/docs.gradle.org\/current\/userguide\/publishing_gradle_module_metadata.html\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">m\u00e9tadonn\u00e9es<\/a> g\u00e9n\u00e9r\u00e9es par le plugin Gradle <code>maven-publish<\/code> lors de la publication d&#8217;une biblioth\u00e8que multiplateforme pour Android incluaient l&#8217;attribut de type de build pour chaque variante Android publi\u00e9e. Cela le rendait compatible uniquement avec le m\u00eame type de build que celui utilis\u00e9 par l&#8217;utilisateur de la biblioth\u00e8que.&nbsp;<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kotlin-jvm\">Kotlin\/JVM<\/h2>\n\n\n\n<p>Avec Kotlin 1.5.30, Kotlin\/JVM re\u00e7oit les mises \u00e0 jour suivantes&nbsp;:<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#improved-nullability-annotation-support-configuration\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Am\u00e9lioration de la configuration de la prise en charge des annotations de nullabilit\u00e9<\/a>. Vous pouvez sp\u00e9cifier si le compilateur doit signaler une incoh\u00e9rence de nullabilit\u00e9 sur la base d&#8217;informations provenant de types sp\u00e9cifiques d&#8217;annotations de nullabilit\u00e9. D\u00e9couvrez comment <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#improved-nullability-annotation-support-configuration\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">activer cette am\u00e9lioration<\/a> et consultez la <a href=\"https:\/\/kotlinlang.org\/docs\/java-interop.html#nullability-annotations\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">liste compl\u00e8te des annotations de nullabilit\u00e9 prises en charge<\/a>, qui a \u00e9t\u00e9 enrichie avec les annotations RxJava3.&nbsp;<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#instantiation-of-annotation-classes\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Instanciation des classes d&#8217;annotation<\/a>. Si vous <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#instantiation-of-annotation-classes\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">activez cette fonctionnalit\u00e9<\/a>, vous pouvez appeler les constructeurs de <a href=\"https:\/\/kotlinlang.org\/docs\/annotations.html\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">classes d&#8217;annotation<\/a> dans toute partie du code pour obtenir une instance de r\u00e9sultat. Cette fonctionnalit\u00e9 couvre les m\u00eames cas d&#8217;utilisation que la convention Java qui permet l&#8217;impl\u00e9mentation d&#8217;une interface d&#8217;annotation. Apprenez-en plus sur l&#8217;instanciation des classes d&#8217;annotation dans <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/annotation-instantiation.md\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">ce KEEP<\/a>.<\/li><\/ul>\n\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nannotation class InfoMarker(val info: String)\n\nfun processInfo(marker: InfoMarker) = ...\n\nfun main(args: Array&lt;String&gt;) {\n    if (args.size != 0)\n        processInfo(getAnnotationReflective(args))\n    else\n        processInfo(InfoMarker(&quot;default&quot;))\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kotlin-native\">Kotlin\/Native<\/h2>\n\n\n\n<p>Kotlin 1.5.30 apporte les am\u00e9liorations suivantes pour Kotlin\/Native&nbsp;:<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#apple-silicon-support\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Prise en charge native d&#8217;Apple Silicon<\/a>. Vous pouvez d\u00e9sormais construire des applications sur du mat\u00e9riel bas\u00e9 sur Apple Silicon pour toutes les cibles prises en charge par les Mac Intel sans avoir \u00e0 utiliser <a href=\"https:\/\/developer.apple.com\/documentation\/apple-silicon\/about-the-rosetta-translation-environment\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">l&#8217;environnement de traduction Rosetta<\/a>. Les nouvelles cibles introduites dans la version 1.5.30 (<code>macosArm64<\/code>, <code>iosSimulatorArm64<\/code>, <code>watchosSimulatorArm64<\/code> et <code>tvosSimulatorArm64<\/code>) permettent d&#8217;ex\u00e9cuter nativement du code Kotlin sur Apple Silicon.&nbsp;<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#improved-kotlin-dsl-for-the-cocoapods-gradle-plugin\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Am\u00e9lioration du DSL Kotlin pour le plugin Gradle CocoaPods<\/a><em>. <\/em>Kotlin 1.5.30 am\u00e9liore la configuration de CocoaPods en fournissant un nouveau format DSL pour les frameworks qui est identique \u00e0 une d\u00e9finition de framework pour les cibles Apple. Vous pouvez d\u00e9finir s&#8217;il s&#8217;agit d&#8217;un type statique ou dynamique, activer l&#8217;exportation explicite des d\u00e9pendances et l&#8217;integration de Bitcode, et configurer d&#8217;autres options.<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#experimental-interoperability-with-swift-5-5-async-await\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Interop\u00e9rabilit\u00e9 exp\u00e9rimentale avec Swift 5.5 async\/await.<\/a><em> <\/em>Apprenez-en plus sur l&#8217;\u00e9tat actuel de l&#8217;interop\u00e9rabilit\u00e9 de Swift 5.5 et partagez vos commentaires dans <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-47610\" target=\"_blank\" rel=\"noopener\">ce ticket YouTrack<\/a>.<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#deprecation-of-linkage-against-dlls-without-import-libraries-for-mingw-targets\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Abandon des liens vers les DLL<\/a> sans biblioth\u00e8ques d&#8217;importation pour MinGW (Windows). Cet arr\u00eat est le r\u00e9sultat du passage \u00e0 <a href=\"https:\/\/lld.llvm.org\/\" target=\"_blank\" rel=\"noopener\">l&#8217;\u00e9diteur de liens LLD<\/a>, qui apporte de meilleures performances et des am\u00e9liorations. N&#8217;h\u00e9sitez pas \u00e0 nous faire part de vos remarques et de vos craintes concernant la transition vers l&#8217;\u00e9diteur de liens LLD sur <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-47605\" target=\"_blank\" rel=\"noopener\">ce ticket YouTrack<\/a>.<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#improved-swift-objective-c-mapping-for-objects-and-companion-objects\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Am\u00e9lioration du mappage Swift\/Objective-C pour les objets et les objets compagnons<\/a>. Il est d\u00e9sormais possible d&#8217;acc\u00e9der aux objets et aux objets compagnons d&#8217;une mani\u00e8re plus intuitive pour les d\u00e9veloppeurs iOS natifs, en utilisant les propri\u00e9t\u00e9s <code>.shared<\/code> et <code>.companion<\/code>.&nbsp;<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kotlin-js\">Kotlin\/JS<\/h2>\n\n\n\n<p>Kotlin 1.5.30 fournit les am\u00e9liorations suivantes pour Kotlin\/JS&nbsp;:<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#js-ir-compiler-backend-reaches-beta\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Le backend du compilateur JS IR passe en version b\u00eata<\/a>. Pour faciliter votre migration vers le nouveau backend, vous pouvez consulter le <a href=\"https:\/\/kotlinlang.org\/docs\/js-ir-migration.html\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">guide de migration<\/a> et utiliser le nouveau <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/17183-kotlin-js-inspection-pack\/\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">plugin IDE Kotlin\/JS Inspection Pack<\/a>, qui vous guident pour la r\u00e9alisation des changements n\u00e9cessaires directement dans IntelliJ IDEA.<\/li><li>Une <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#better-debugging-experience-for-applications-with-the-kotlin-js-ir-backend\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">meilleure exp\u00e9rience de d\u00e9bogage pour les applications avec le backend Kotlin\/JS IR<\/a><em>,<\/em> gr\u00e2ce \u00e0 la g\u00e9n\u00e9ration de cartes source JavaScript. Vous pouvez d\u00e9sormais b\u00e9n\u00e9ficier de la prise en charge des points d&#8217;arr\u00eat, du stepping et des traces de pile lisibles avec des r\u00e9f\u00e9rences de source appropri\u00e9es dans tout d\u00e9bogueur JavaScript. En savoir plus sur <a href=\"https:\/\/kotlinlang.org\/docs\/js-debugging.html\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">le d\u00e9bogage des applications Kotlin\/JS<\/a>.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"gradle\">Gradle<\/h2>\n\n\n\n<p>Kotlin 1.5.30 <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-45778\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">am\u00e9liorer l&#8217;exp\u00e9rience utilisateur du plugin Gradle Kotlin<\/a>&nbsp;avec les fonctionnalit\u00e9s suivantes:<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#support-for-java-toolchains\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Prise en charge des cha\u00eenes d&#8217;outils Java<\/a>. Gradle 6.7 a introduit la <a href=\"https:\/\/blog.gradle.org\/java-toolchains\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">prise en charge des cha\u00eenes d&#8217;outils Java<\/a>, qui permettent de s\u00e9lectionner facilement un JDK pour la compilation d&#8217;un projet. D\u00e9clarez simplement la version dont vous avez besoin dans le script de build et Gradle s&#8217;occupe du reste. Il la trouve sur votre machine h\u00f4te ou la t\u00e9l\u00e9charge et l&#8217;installe si elle ne s&#8217;y trouve pas encore. Le plugin Gradle Kotlin prend en charge les cha\u00eenes d&#8217;outils Java pour les t\u00e2ches de compilation Kotlin\/JVM. Pour les versions 6.1-6.6 de Gradle, d\u00e9finissez un emplacement JDK avec <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#ability-to-specify-jdk-home-with-useskotlinjavatoolchain-interface\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">l&#8217;interface <code>UsesKotlinJavaToolchain<\/code><\/a>.<\/li><li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#easier-way-to-explicitly-specify-kotlin-daemon-jvm-arguments\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Des moyens plus simples de sp\u00e9cifier explicitement les arguments JVM du d\u00e9mon Kotlin.<\/a>. Si rien n&#8217;est sp\u00e9cifi\u00e9 pour le d\u00e9mon Kotlin, il h\u00e9rite des arguments du d\u00e9mon Gradle. D\u00e9sormais, vous pouvez aussi sp\u00e9cifier des arguments pour une t\u00e2che sp\u00e9cifique et pour l&#8217;extension Kotlin en une seule ligne dans <code>build.gradle.kts<\/code> ou <code>gradle.properties<\/code>.<\/li><\/ul>\n\n\n\n<p><code>build.gradle.kts<\/code><\/p>\n\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nkotlin {\n    kotlinDaemonJvmArgs = listOf(&quot;-Xmx486m&quot;, &quot;-Xms256m&quot;, &quot;-XX:+UseParallelGC&quot;)\n}\n<\/pre>\n\n\n\n<p><code>gradle.properties<\/code><\/p>\n\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nkotlin.daemon.jvmargs = -Xmx486m -Xms256m -XX:+UseParallelGC\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"stdlib\">Biblioth\u00e8que standard<\/h2>\n\n\n\n<p>Kotlin 1.5.30 apporte des am\u00e9liorations aux API <code>Duration<\/code> et <code>Regex<\/code> de la biblioth\u00e8que standard&nbsp;:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Am\u00e9liorations de l&#8217;API Duration<\/h3>\n\n\n\n<p>Comme indiqu\u00e9 dans la <a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html#roadmap-details\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">feuille de route des biblioth\u00e8ques<\/a>, nous allons <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-46784\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">stabiliser l&#8217;API Duration dans Kotlin 1.6.0<\/a>. C&#8217;est donc la derni\u00e8re occasion de l&#8217;essayer et de nous faire part de vos commentaires sur les modifications que vous souhaitez. Merci de partager vos commentaires dans <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/issues\/190\" target=\"_blank\" rel=\"noopener\">ce KEEP.<\/a><\/p>\n\n\n<p>Kotlin 1.5.30 offre un aper\u00e7u des am\u00e9liorations de l&#8217;API. La sortie de <code>Duration.toString()<\/code> est maintenant plus lisible. Par exemple, <code>Duration.minutes(920).toString()<\/code> produit <code>15h 20m<\/code> au lieu de <code>920m<\/code>.<\/p>\n<p>Une dur\u00e9e n\u00e9gative est d\u00e9sormais pr\u00e9c\u00e9d\u00e9e d&#8217;un signe moins (<code>-<\/code>) et est entour\u00e9e de parenth\u00e8ses si elle est constitu\u00e9e de plusieurs \u00e9l\u00e9ments&nbsp;: <code>-12m<\/code> et <code>-(1h 30m)<\/code>.<\/p>\n<p>Cette version fournit \u00e9galement un aper\u00e7u de <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#standard-library\" target=\"_blank\" rel=\"noopener\">nouvelles fonctions pour l&#8217;analyse syntaxique de Duration \u00e0 partir de String<\/a>&nbsp;:<\/p>\n<ul>\n<li><code>parse()<\/code> analyse les objets Duration \u00e0 partir de cha\u00eenes format\u00e9es comme les <code>toString()<\/code> de Duration ou \u00e0 partir de cha\u00eenes repr\u00e9sentant des dur\u00e9es <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_8601#Durations\" target=\"_blank\" rel=\"noopener\">ISO 8601<\/a> (comme les sorties <code>toIsoString()<\/code>).<\/li>\n<li><code>parseIsoString()<\/code> analyse les objets Duration \u00e0 partir de cha\u00eenes repr\u00e9sentant des dur\u00e9es ISO 8601.<\/li>\n<li>\u00c9quivalents <code>*OrNull()<\/code> pour les deux fonctions.<\/li>\n<\/ul>\n<pre class=\"kotlin-code\" data-min-compiler-version=\"1.5.30\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">import kotlin.time.Duration\nimport kotlin.time.ExperimentalTime\n\n@ExperimentalTime\nfun main() {\n\/\/sampleStart\n    val isoFormatString = \"PT1H30M\"\n    val defaultFormatString = \"1h 30m\"\n    println(Duration.parse(isoFormatString)) \/\/ \"1h 30m\"\n    println(Duration.parse(defaultFormatString)) \/\/ \"1h 30m\"\n\/\/sampleEnd\n}\n<\/pre>\n<h3>Am\u00e9liorations de l&#8217;API Regex<\/h3>\n<p>Kotlin 1.5.30 fournit de nouvelles fonctions exp\u00e9rimentales pour les expressions r\u00e9guli\u00e8res&nbsp;:<\/p>\n<ul>\n<li><code>matchesAt()<\/code> v\u00e9rifie si une expression r\u00e9guli\u00e8re a une correspondance dans la position sp\u00e9cifi\u00e9e d&#8217;une cha\u00eene.<\/li>\n<li><code>matchAt()<\/code> renvoie la correspondance si elle a \u00e9t\u00e9 trouv\u00e9e.<\/li>\n<\/ul>\n<pre class=\"kotlin-code\" data-min-compiler-version=\"1.5.30\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">fun main(){\n\/\/sampleStart\n    val releaseText = \"Kotlin 1.5.30 is released!\"\n    val versionRegex = \"\\\\d[.]\\\\d[.]\\\\d+\".toRegex()\n    println(versionRegex.matchAt(releaseText, 0)) \/\/ \"null\"\n    println(versionRegex.matchAt(releaseText, 7)?.value) \/\/ \"1.5.30\"\n\/\/sampleEnd\n}\n<\/pre>\n<ul>\n<li><code>splitToSequence()<\/code> est une fonction diff\u00e9r\u00e9e de <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-regex\/split.html\" target=\"_blank\" rel=\"noopener\"><code>split()<\/code><\/a>. Elle divise la cha\u00eene autour des correspondances de l&#8217;expression r\u00e9guli\u00e8re donn\u00e9e, mais renvoie le r\u00e9sultat sous forme de <code>Sequence<\/code>. Une fonction similaire a \u00e9galement \u00e9t\u00e9 ajout\u00e9e \u00e0 <code>CharSequence<\/code>.<\/li>\n<\/ul>\n<pre class=\"kotlin-code\" data-min-compiler-version=\"1.5.30\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">fun main(){\n\/\/sampleStart\n    val colorsText = \"green, red , brown&amp;blue, orange, pink&amp;green\"\n    val regex = \"[,\\\\s]+\".toRegex()\n    val mixedColor = regex.splitToSequence(colorsText)\n        .onEach { println(it) }\n        .firstOrNull { it.contains('&amp;') }\n    println(mixedColor) \/\/ \"brown&amp;blue\"\n\/\/sampleEnd\n}\n<\/pre>\n<h2 id=\"how-to-install\">Comment installer Kotlin 1.5.30<\/h2>\n<p>Si vous utilisez <a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> ou <a href=\"https:\/\/developer.android.com\/studio\" target=\"_blank\" rel=\"noopener\">Android Studio<\/a>, votre IDE vous proposera de faire la mise \u00e0 jour vers Kotlin 1.5.30 automatiquement. Vous pouvez \u00e9galement faire la mise \u00e0 jour manuellement en suivant <a href=\"https:\/\/kotlinlang.org\/docs\/releases.html#update-to-a-new-release\" target=\"_blank\" rel=\"noopener\">ces instructions<\/a>.&nbsp;<\/p>\n<p>Vous pouvez t\u00e9l\u00e9charger les derni\u00e8res versions des IDE suivants pour b\u00e9n\u00e9ficier d&#8217;une prise en charge \u00e9tendue pour Kotlin :<\/p>\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> \u2013 pour d\u00e9velopper des applications Kotlin pour diff\u00e9rentes plateformes.<\/li>\n<li><a href=\"https:\/\/developer.android.com\/studio\" target=\"_blank\" rel=\"noopener\">Android Studio<\/a> \u2013 pour le d\u00e9veloppement d&#8217;applications mobiles Android et multiplateformes.<\/li>\n<\/ul>\n<p>Assurez-vous aussi de mettre \u00e0 jour les biblioth\u00e8ques kotlinx vers des <a href=\"https:\/\/kotlinlang.org\/releases.html#release-details\" target=\"_blank\" rel=\"noopener\">versions compatibles<\/a> et de sp\u00e9cifier la version 1.5.30 de Kotlin dans les scripts de build de vos projets existants.<\/p>\n<p>Si vous avez besoin du compilateur de ligne de commande, il peut \u00eatre t\u00e9l\u00e9charg\u00e9 \u00e0 partir de la <a href=\"https:\/\/github.com\/JetBrains\/kotlin\/releases\/tag\/v1.5.30\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">page GitHub de la version<\/a>.<\/p>\n<h3>En cas de probl\u00e8me<\/h3>\n<ul>\n<li>Trouvez de l&#8217;aide sur <a href=\"http:\/\/kotlinlang.slack.com\/\" target=\"_blank\" rel=\"noopener\">Slack<\/a> (<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">recevoir une invitation<\/a>).<\/li>\n<li>Signalez les probl\u00e8mes dans notre outil de suivi <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KT\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>.<\/li>\n<\/ul>\n<div style=\"background-color: #f1f6fe; margin-bottom: 2px; padding: 5px; margin-right: 0%; text-align: left; min-height: px;\">\n<p>Tenez-vous au courant des derni\u00e8res fonctionnalit\u00e9s de Kotlin&nbsp;! Inscrivez-vous en remplissant le formulaire \u00e0 droite de cet article pour recevoir les actualit\u00e9s relatives \u00e0 Kotlin.<\/p>\n<\/div>\n<h2>En lire et en voir plus<\/h2>\n<ul>\n<li><a href=\"https:\/\/youtu.be\/rNbb3A9IdOo\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">Vid\u00e9o Nouveaut\u00e9s de Kotlin 1.5.30<\/a><\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html\" target=\"_blank\" rel=\"noopener\">Docs sur les Nouveaut\u00e9s de Kotlin 1.5.30<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/06\/kotlin-1-5-20-released\/\">Article de blog sur Kotlin 1.5.20<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlin-1-5-0-released\/\">Article de blog sur Kotlin 1.5.0<\/a><\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\" target=\"_blank\" rel=\"noopener\">Feuille de route de Kotlin<\/a><\/li>\n<\/ul>\n<h2>Contributeurs externes <img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/72x72\/1f44f.png\" alt=\"&#x1f44f;\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/72x72\/1f44f.png\" alt=\"&#x1f44f;\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/72x72\/1f44f.png\" alt=\"&#x1f44f;\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\"><\/h2>\n<p>Nous remercions tous nos contributeurs externes dont les requ\u00eates pull ont \u00e9t\u00e9 incluses dans cette version&nbsp;:<\/p>\n<p><a href=\"https:\/\/github.com\/jsjeon\" target=\"_blank\" rel=\"noopener\">Jinseong Jeon<\/a>, <a href=\"https:\/\/github.com\/pyos\" target=\"_blank\" rel=\"noopener\">pyos<\/a>, <a href=\"https:\/\/github.com\/tgeng\" target=\"_blank\" rel=\"noopener\">Tianyu Geng<\/a>, <a href=\"https:\/\/github.com\/punzki\" target=\"_blank\" rel=\"noopener\">Mark Punzalan<\/a>, <a href=\"https:\/\/github.com\/madsager\" target=\"_blank\" rel=\"noopener\">Mads Ager<\/a>, <a href=\"https:\/\/github.com\/gavra0\" target=\"_blank\" rel=\"noopener\">Ivan Gavrilovic<\/a>, <a href=\"https:\/\/github.com\/sfs\" target=\"_blank\" rel=\"noopener\">Steven Sch\u00e4fer<\/a>, <a href=\"https:\/\/github.com\/knebekaizer\" target=\"_blank\" rel=\"noopener\">Vladimir Ivanov<\/a>, <a href=\"https:\/\/github.com\/hungvietnguyen\" target=\"_blank\" rel=\"noopener\">Hung Nguyen<\/a>, <a href=\"https:\/\/github.com\/gharrma\" target=\"_blank\" rel=\"noopener\">Matthew Gharrity<\/a>, <a href=\"https:\/\/github.com\/neetopia\" target=\"_blank\" rel=\"noopener\">Jiaxiang Chen<\/a>, <a href=\"https:\/\/github.com\/KvanTTT\" target=\"_blank\" rel=\"noopener\">Ivan Kochurkin<\/a>, <a href=\"https:\/\/github.com\/CommanderTvis\" target=\"_blank\" rel=\"noopener\">Iaroslav Postovalov<\/a>, <a href=\"https:\/\/github.com\/t-kameyama\" target=\"_blank\" rel=\"noopener\">Toshiaki Kameyama<\/a>, <a href=\"https:\/\/github.com\/Udinic\" target=\"_blank\" rel=\"noopener\">Udi Cohen<\/a>, <a href=\"https:\/\/github.com\/scaventz\" target=\"_blank\" rel=\"noopener\">Xin Wang<\/a>, <a href=\"https:\/\/github.com\/bracadabra\" target=\"_blank\" rel=\"noopener\">bracadabra<\/a><\/p>","protected":false},"author":813,"featured_media":175099,"comment_status":"closed","ping_status":"closed","template":"","categories":[907],"tags":[671],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/188440"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=188440"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/188440\/revisions"}],"predecessor-version":[{"id":188550,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/188440\/revisions\/188550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/175099"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=188440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=188440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=188440"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=188440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}