{"id":440559,"date":"2024-02-02T10:17:53","date_gmt":"2024-02-02T09:17:53","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=rust&#038;p=440559"},"modified":"2024-02-02T11:32:13","modified_gmt":"2024-02-02T10:32:13","slug":"les-erreurs-du-compilateur-rust-les-plus-couramment-rencontrees-dans-rustrover-1ere-partie","status":"publish","type":"rust","link":"https:\/\/blog.jetbrains.com\/fr\/rust\/2024\/02\/02\/les-erreurs-du-compilateur-rust-les-plus-couramment-rencontrees-dans-rustrover-1ere-partie\/","title":{"rendered":"Les erreurs du compilateur Rust les plus couramment rencontr\u00e9es dans RustRover\u00a0&#8211; 1\u00e8re Partie"},"content":{"rendered":"<p>Le compilateur Rust est une cr\u00e9ature pointilleuse et exigeante. S&#8217;il est m\u00e9content du code source, il peut renvoyer plus de 400 erreurs diff\u00e9rentes (sans compter ceux qui sont ajout\u00e9s chaque mois !). Certaines de ces erreurs sont extr\u00eamement rares, tandis que d&#8217;autres compliquent le travail des d\u00e9veloppeurs Rust au quotidien. Dans le premier article de cette s\u00e9rie, nous examinons une partie des messages d&#8217;erreur du compilateur Rust que les d\u00e9veloppeurs rencontrent le plus fr\u00e9quemment dans RustRover, l&#8217;IDE de JetBrains con\u00e7u pour la programmation en Rust, et vous donnons des conseils pour \u00e9viter ces erreurs. Commen\u00e7ons par pr\u00e9ciser ce que nous entendons par \u00ab erreurs les plus les plus couramment rencontr\u00e9es \u00bb.<\/p>\n<h2 class=\"wp-block-heading\">Identification des erreurs les plus courantes \u00e0 partir des donn\u00e9es d&#8217;utilisation de RustOver<\/h2>\n<p>Tout utilisateur de RustRover peut donner son accord pour que JetBrains dispose de <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/settings-usage-statistics.html\" target=\"_blank\" rel=\"noopener\">ses donn\u00e9es d&#8217;utilisation anonymis\u00e9es<\/a>. Plus le nombre d&#8217;utilisateurs acceptant de partager leurs donn\u00e9es d&#8217;utilisation est important et plus ils utilisent RustRover, plus nous sommes en mesure de comprendre leur exp\u00e9rience et d&#8217;am\u00e9liorer les fonctionnalit\u00e9s d&#8217;assistance au codage de l&#8217;IDE. Nous profitons donc de cette occasion pour remercier toutes les personnes qui partagent leurs donn\u00e9es d&#8217;utilisation ! La confidentialit\u00e9 des donn\u00e9es \u00e9tant une priorit\u00e9, l&#8217;IDE ne collecte que des informations tr\u00e8s limit\u00e9es, qui ne permettent en aucun cas de remonter \u00e0 l&#8217;utilisateur. Ces donn\u00e9es anonymes nous permettent aussi d&#8217;identifier les types de messages d&#8217;erreur g\u00e9n\u00e9r\u00e9s le plus fr\u00e9quemment.<\/p>\n<p>Lorsqu&#8217;un utilisateur ayant donn\u00e9 son consentement lance la commande Cargo Build depuis l&#8217;IDE (par exemple, en d\u00e9clenchant une configuration Run qui n\u00e9cessite la compilation d&#8217;un projet) et que le compilateur Rust signale une erreur, nous enregistrons un <a href=\"https:\/\/doc.rust-lang.org\/error_codes\/error-index.html\" target=\"_blank\" rel=\"noopener\">code d&#8217;erreur<\/a>. Cela n&#8217;inclut pas <em>tous<\/em> les probl\u00e8mes qui surviennent pendant que les utilisateurs \u00e9crivent leur code, mais seulement ceux qui persistent apr\u00e8s qu&#8217;ils aient cr\u00e9\u00e9 leur projet. Les erreurs interm\u00e9diaires peuvent souvent \u00eatre corrig\u00e9es \u00e0 l&#8217;aide des inspections et des correctifs rapides fournis par l&#8217;IDE.\u00a0<\/p>\n<p>Nous avons collect\u00e9 les codes d&#8217;erreur des utilisateurs de RustRover et avons class\u00e9 les erreurs en fonction de leur fr\u00e9quence. Cet article porte sur les erreurs figurant de la 10\u00e8me \u00e0 la 6\u00e8me place et le prochain r\u00e9v\u00e9lera les cinq erreurs les plus fr\u00e9quentes. Nous allons examiner les causes de ces erreurs en utilisant des exemples simples et voir quels sont les moyens de les corriger.<\/p>\n<h2 class=\"wp-block-heading\">Erreur fr\u00e9quente n\u00b0\u00a010\u00a0: E0412 <em>(Un nom de type utilis\u00e9 n&#8217;est pas dans la port\u00e9e)<\/em><\/h2>\n<p>Rust fait une distinction stricte entre les sites de d\u00e9claration de type et les utilisations de nom de type. Chaque nom de type (y compris les types g\u00e9n\u00e9riques) doit \u00eatre d\u00e9clar\u00e9 quelque part et \u00eatre disponible dans la port\u00e9e dans laquelle il est utilis\u00e9. Lorsque le compilateur rencontre une utilisation de nom de type et n&#8217;a pas d&#8217;information sur son site de d\u00e9claration, il \u00e9met l&#8217;erreur E0412. Environ 12\u00a0% des utilisateurs de RustRover ont d\u00e9j\u00e0 fait l&#8217;exp\u00e9rience de cette erreur.<\/p>\n<p>Imaginons que vous ayez saisi <code>i42<\/code> au lieu de <code>i32<\/code>. RustRover d\u00e9tecte ce probl\u00e8me et met en \u00e9vidence le nom de type inconnu. Le compilateur donne plus de d\u00e9tails et propose un correctif qui peut \u00eatre facilement appliqu\u00e9 en cliquant sur le bouton <em>Apply fix<\/em> dans la sortie du compilateur\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-418741\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/image-16.png\" alt=\"\" width=\"1600\" height=\"900\" \/><\/figure>\n<p>Une erreur E0412 peut se produire dans d&#8217;autres situations, notamment :<\/p>\n<ul>\n<li>Si l&#8217;on oublie de d\u00e9clarer un type.<\/li>\n<li>Lorsqu&#8217;un type est import\u00e9 dans la port\u00e9e actuelle.<\/li>\n<li>En cas d&#8217;introduction d&#8217;un nom de type g\u00e9n\u00e9rique qui rend le type inaccessible au compilateur.<\/li>\n<\/ul>\n<p>Pour r\u00e9soudre le probl\u00e8me, vous pouvez fournir une d\u00e9claration de type (d\u00e9clarer un struct ou introduire un nom de type g\u00e9n\u00e9rique correctement) ou amener le type dans une port\u00e9e (via la clause <code>use<\/code>). L&#8217;<a href=\"https:\/\/doc.rust-lang.org\/error_codes\/E0412.html\" target=\"_blank\" rel=\"noopener\">explication officielle de l&#8217;erreur E0412<\/a> donne plus d&#8217;exemples.<\/p>\n<h2 class=\"wp-block-heading\">Erreur fr\u00e9quente n\u00b0\u00a09\u00a0: E0061 (<em>Un nombre non valide d&#8217;arguments a \u00e9t\u00e9 pass\u00e9 lors de l&#8217;appel d&#8217;une fonction<\/em>)<\/h2>\n<p>Bien que RustRover connaisse cette erreur et fournisse plusieurs correctifs, 13\u00a0% des utilisateurs la laissent passer et omettent de la corriger avant la cr\u00e9ation de leurs projets.<\/p>\n<p>L&#8217;intitul\u00e9 de cette erreur est assez explicite\u00a0: une fonction est d\u00e9clar\u00e9e dans la port\u00e9e actuelle ou import\u00e9e depuis un autre endroit, et le site d&#8217;appel donne trop ou trop peu d&#8217;arguments. Voyons-en un exemple et comparons les suggestions de RustRover \u00e0 celles du compilateur Rust\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-418752\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/image-17.png\" alt=\"\" width=\"1600\" height=\"900\" \/><\/figure>\n<p>Si on a l&#8217;habitude de programmer avec un autre langage, on pourrait \u00eatre tent\u00e9 de fournir un deuxi\u00e8me argument, en oubliant qu&#8217;en Rust, cette m\u00e9thode n&#8217;en prend qu&#8217;un seul. RustRover et le compilateur Rust nous invitent donc \u00e0 supprimer le second argument. Il est appr\u00e9ciable de b\u00e9n\u00e9ficier de cette suggestion de la part de l&#8217;IDE avant d&#8217;avoir cr\u00e9\u00e9 le projet. Pr\u00eatez attention aux lignes de soulignement rouges ondul\u00e9es dans votre code : g\u00e9n\u00e9ralement, elles sont l\u00e0 pour une bonne raison !<\/p>\n<p>La situation devient plus int\u00e9ressante si la fonction que nous appelons est d\u00e9finie dans notre propre code. Supposons que nous continuons de travailler sur le m\u00eame exemple de code\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-418763\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/image-18.png\" alt=\"\" width=\"1600\" height=\"900\" \/><\/figure>\n<p>Dans ce cas, RustRover sugg\u00e8re comme premi\u00e8re solution d&#8217;ajouter un param\u00e8tre \u00e0 la fonction, ce qui peut faire sens. Le compilateur Rust insiste quant \u00e0 lui pour le supprimer. Cette divergence a une explication logique. Le travail du compilateur consiste \u00e0 s&#8217;assurer que le programme est correct, et le moyen le plus facile d&#8217;y parvenir consiste \u00e0 \u00e9liminer l&#8217;argument suppl\u00e9mentaire sur le site de l&#8217;appel. En revanche, la mission de l&#8217;IDE est de vous accompagner vers la r\u00e9alisation de votre objectif. Si vous avez saisi cet argument pour votre fonction, RustRover consid\u00e8re qu&#8217;il est probable que cela soit volontaire et tente donc de vous aider \u00e0 terminer ce que vous avez commenc\u00e9.<\/p>\n<h2 class=\"wp-block-heading\">Erreur fr\u00e9quente n\u00b0\u00a08\u00a0: E0282 (<em>Le compilateur n&#8217;a pas pu d\u00e9duire un type et a demand\u00e9 une annotation de type<\/em>)<\/h2>\n<p>Parfois le compilateur est perdu\u00a0: il ne trouve pas quel est le type requis pour une variable et ne peut que sugg\u00e9rer d&#8217;ajouter une annotation manuellement. Si vous avez d\u00e9j\u00e0 rencontr\u00e9 cette erreur, bienvenue au club : 13,5\u00a0% des utilisateurs de RustRover y ont d\u00e9j\u00e0 \u00e9t\u00e9 confront\u00e9s.<\/p>\n<p>La source principale des erreurs telles que E0282 est la g\u00e9n\u00e9ricit\u00e9. De nombreuses fonctions de biblioth\u00e8ques utilisent des param\u00e8tres de type g\u00e9n\u00e9rique, mais le compilateur doit instancier ces param\u00e8tres en type concret, ce qui est source de confusion pour lui. Prenons l&#8217;exemple\u00a0suivant\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-418774\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/image-19.png\" alt=\"\" width=\"1600\" height=\"900\" \/><\/figure>\n<p>Ici nous devons collecter des nombres \u00e0 partir d&#8217;une cha\u00eene dans un conteneur. Malheureusement, le compilateur ne peut pas d\u00e9terminer le type des nombres ou le genre de conteneur dont il s&#8217;agit.<\/p>\n<p>Le compilateur sugg\u00e8re la sp\u00e9cification du type de conteneur en premier. Cependant, si nous appliquons ce correctif, nous obtiendrons de nouveau le m\u00eame genre d&#8217;erreur, mais concernant <code>str::parse<\/code> cette fois. <code>collect<\/code> et <code>parse<\/code> sont des m\u00e9thodes g\u00e9n\u00e9riques, mais le compilateur a besoin de conna\u00eetre le type pr\u00e9cis afin de compiler le code qui les utilise. Veuillez noter que RustRover ne met pas les erreurs en \u00e9vidence, car nous travaillons encore au perfectionnement de sa fonctionnalit\u00e9 de v\u00e9rification de type.<\/p>\n<p>Il existe plusieurs fa\u00e7ons de corriger le probl\u00e8me, car une annotation de type peut \u00eatre ajout\u00e9e \u00e0 diff\u00e9rents endroits. Nous pouvons sp\u00e9cifier le type concret du vecteur <code>numbers<\/code>\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"rust\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">let numbers: Vec = \"1\u00a0 5 \u00a0 \u00a0 6 \u00a0 3\"<\/pre>\n<p>Ou nous pouvons mentionner le m\u00eame type lors de l&#8217;appel de <code>collect<\/code>\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"rust\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   .collect::&lt;Vec&gt;();<\/pre>\n<p>Enfin, nous pouvons mentionner diff\u00e9rents types \u00e0 diff\u00e9rents endroits\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"rust\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">let numbers = \"1\u00a0 5 \u00a0 \u00a0 6 \u00a0 3\"\n\u00a0\u00a0\u00a0.split_whitespace()\n\u00a0\u00a0\u00a0.map(str::parse::)\n\u00a0\u00a0\u00a0.map(Result::unwrap)\n\u00a0\u00a0\u00a0.collect::&lt;Vec&gt;();<\/pre>\n<p>Cette erreur est facile \u00e0 corriger\u00a0: il suffit de sp\u00e9cifier le type ou les types que vous voulez.<\/p>\n<h2 class=\"wp-block-heading\">Erreur fr\u00e9quente n\u00b0\u00a07\u00a0: E0432 (<em>Une importation n&#8217;a pas \u00e9t\u00e9 r\u00e9solue<\/em>)<\/h2>\n<p>RustRover fournit de nombreuses fonctionnalit\u00e9s de saisie semi-automatique. Commen\u00e7ons par exemple en introduisant une expression r\u00e9guli\u00e8re dans notre code\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-418785\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/image-20.png\" alt=\"\" width=\"1600\" height=\"421\" \/><\/figure>\n<p>Si vous choisissez la premi\u00e8re suggestion, deux autres choses vont se produire en plus de la saisie semi-automatique elle-m\u00eame\u00a0:<\/p>\n<ul>\n<li>Une d\u00e9pendance de la crate <code>regex<\/code> sera ajout\u00e9e \u00e0 votre fichier <kbd>Cargo.toml<\/kbd>.<\/li>\n<li>Une clause <code>use regex::Regex;<\/code> sera ajout\u00e9e en haut du fichier.<\/li>\n<\/ul>\n<p>Lorsque vous ajoutez des clauses d&#8217;utilisation comme cela, les importations sont \u00e9crites automatiquement et correctement. Mais il faut parfois \u00e9crire les importations manuellement et c&#8217;est l\u00e0 que l&#8217;erreur E0432 risque de se produire. 15,5 % des utilisateurs de RustRover la rencontrent occasionnellement, le plus souvent en cas de faute dans le nom d&#8217;une crate ou d&#8217;un module, de tentative d&#8217;importation de quelque chose d&#8217;inexistant ou de pr\u00e9sence d&#8217;une clause <code>use<\/code> erron\u00e9e dans le code apr\u00e8s l&#8217;avoir copi\u00e9e\/coll\u00e9e \u00e0 partir un autre endroit. La premi\u00e8re suggestion est de toujours v\u00e9rifier les d\u00e9pendances et les noms.<\/p>\n<p>Parfois, RustRover peut nous aider \u00e0 \u00e9viter cette erreur. S&#8217;il a connaissance de la crate que nous tentons d&#8217;importer, il sugg\u00e8re l&#8217;ajout d&#8217;une d\u00e9pendance lorsque vous collez du code depuis des sources externes ou fournit une assistance via les correctifs rapides suivants :<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-418796\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/image-21.png\" alt=\"\" width=\"1567\" height=\"335\" \/><\/figure>\n<p>L&#8217;ajout de la d\u00e9pendance correspondante \u00e0 <kbd>Cargo.toml<\/kbd> corrige l&#8217;erreur imm\u00e9diatement. Une fois que la crate est disponible, il est plus s\u00fbr d&#8217;utiliser la saisie semi-automatique pour les autres composants du chemin dans les clauses <code>use<\/code>, afin d&#8217;\u00e9viter la survenance de nouveaux probl\u00e8mes avec les noms. Rappelez-vous aussi que la disponibilit\u00e9 de certains noms peut d\u00e9pendre des fonctionnalit\u00e9s de la crate qui sont activ\u00e9es.<\/p>\n<p>Il peut \u00e9galement y avoir des probl\u00e8mes avec les noms de chemin sp\u00e9ciaux tels que <code>super<\/code> ou <code>crate<\/code>, notamment parce qu&#8217;ils sont trait\u00e9s diff\u00e9remment dans les diff\u00e9rentes versions de Rust. Vous trouverez plus d&#8217;informations \u00e0 ce sujet dans l&#8217;<a href=\"https:\/\/doc.rust-lang.org\/error_codes\/E0432.html\" target=\"_blank\" rel=\"noopener\">explication officielle<\/a>.<\/p>\n<h2 class=\"wp-block-heading\">Erreur fr\u00e9quente n\u00b0\u00a06\u00a0: E0382 (<em>Une variable a \u00e9t\u00e9 utilis\u00e9e apr\u00e8s que son contenu ait \u00e9t\u00e9 d\u00e9plac\u00e9<\/em>)<\/h2>\n<p>Point int\u00e9ressant\u00a0: les probl\u00e8mes li\u00e9s \u00e0 la possession\u00a0! 17\u00a0% des utilisateurs de RustRover ont d\u00e9j\u00e0 rencontr\u00e9 cette erreur. L&#8217;<a href=\"https:\/\/doc.rust-lang.org\/error_codes\/E0382.html\" target=\"_blank\" rel=\"noopener\">explication officielle<\/a> est tr\u00e8s d\u00e9taill\u00e9e et donne de nombreux exemples. Malheureusement, RustRover n&#8217;est pas d&#8217;une grande aide dans ce cas. Si un <a href=\"https:\/\/www.jetbrains.com\/help\/rust\/rust-external-linters.html\" target=\"_blank\" rel=\"noopener\">linter externe<\/a> est d\u00e9sactiv\u00e9, le m\u00e9canisme interne de RustRover ne voit aucun probl\u00e8me dans le code suivant\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"rust\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">fn main() {\n\u00a0\u00a0\u00a0let vec = vec![1, 2, 3, 4, 5];\n\u00a0\u00a0\u00a0let mut sum = 0;\n\u00a0\u00a0\u00a0for v in vec {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sum += v;\n\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0println!(\"Sum of {vec:?} elements is {sum}\");\n}<\/pre>\n<p>Ce code d&#8217;aspect anodin serait parfaitement l\u00e9gitime dans certains autres langages de programmation. Nous avons un vecteur et voulons calculer la somme de ses \u00e9l\u00e9ments. Si vous travaillez habituellement avec C et que vous ne connaissez pas les astuces de programmation li\u00e9es aux it\u00e9rateurs, vous \u00e9cririez plut\u00f4t une boucle <code>for<\/code> traditionnelle \u00e0 la place. Une fois les \u00e9l\u00e9ments ajout\u00e9s, il n&#8217;y aurait alors plus qu&#8217;\u00e0 imprimer le vecteur et le r\u00e9sultat des calculs. Exact ?<\/p>\n<p>Eh bien pas ce n&#8217;est pas le cas avec Rust, \u00e0 cause des r\u00e8gles de la possession propres au langage.\u00a0<\/p>\n<p>Le probl\u00e8me est que la source de donn\u00e9es dans la boucle <code>for<\/code> est \u00e9tendue \u00e0 l&#8217;appel <code>into_iter()<\/code>, qui prend alors possession de l&#8217;ensemble du vecteur. Par cons\u00e9quent, lorsque nous tenterons ensuite d&#8217;acc\u00e9der aux \u00e9l\u00e9ments du vecteur dans <code>println!<\/code>, le compilateur indiquera qu&#8217;il a \u00e9t\u00e9 d\u00e9plac\u00e9.<\/p>\n<p>Le correctif propos\u00e9 par le navigateur\u00a0est simple : it\u00e9rer sur <code>&amp;vec<\/code> pour \u00e9viter de le <em>d\u00e9placer<\/em> dans la boucle, puis l&#8217;<em>emprunter<\/em> .<\/p>\n<p>En g\u00e9n\u00e9ral, il est utile de conserver constamment une trace des r\u00e8gles de possession des valeurs. Le d\u00e9placement et l&#8217;emprunt de valeurs sont des concepts fondamentaux de Rust. Il est important pour les n\u00e9ophytes d&#8217;assimiler ces concepts d\u00e8s le d\u00e9but.<\/p>\n<h2 class=\"wp-block-heading\">R\u00e9sum\u00e9<\/h2>\n<p>Dans ce premier article, nous avons pass\u00e9 en revue certaines des erreurs du compilateur Rust les plus fr\u00e9quentes en nous basant sur les donn\u00e9es d&#8217;utilisation de RustRover. Dans le prochain article, nous verrons les 5 erreurs les plus fr\u00e9quentes et tenterons de r\u00e9pondre \u00e0 une question que se posent tous les d\u00e9veloppeurs Rust : \u00ab Quelle partie de Rust cause le plus de probl\u00e8mes ? \u00bb.<\/p>\n\n\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":813,"featured_media":418716,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rust\/440559"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rust"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/rust"}],"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=440559"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rust\/440559\/revisions"}],"predecessor-version":[{"id":440779,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rust\/440559\/revisions\/440779"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/418716"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=440559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=440559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=440559"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=440559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}