{"id":529617,"date":"2024-11-22T10:34:38","date_gmt":"2024-11-22T09:34:38","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=rust&#038;p=529617"},"modified":"2024-11-22T10:37:14","modified_gmt":"2024-11-22T09:37:14","slug":"comment-se-former-a-rust-en-2024-un-guide-complet-pour-aider-les-debutants-a-maitriser-la-programmation-rust","status":"publish","type":"rust","link":"https:\/\/blog.jetbrains.com\/fr\/rust\/2024\/11\/22\/comment-se-former-a-rust-en-2024-un-guide-complet-pour-aider-les-debutants-a-maitriser-la-programmation-rust\/","title":{"rendered":"Comment se former \u00e0 Rust en 2024\u00a0: un guide complet pour aider les d\u00e9butants \u00e0 ma\u00eetriser la programmation Rust"},"content":{"rendered":"<p>Vous envisagez d&#8217;apprendre un nouveau langage de programmation et pensez \u00e0 Rust, mais n&#8217;avez pas encore pris votre d\u00e9cision. Vous savez d\u00e9j\u00e0 \u00e9crire du code et avez une certaine exp\u00e9rience avec au moins un langage de programmation, probablement Python ou JavaScript. Vous avez d\u00e9j\u00e0 entendu un certain nombre de choses \u00e0 propos de Rust. De nombreuses personnes en parlent comme d&#8217;un langage de programmation syst\u00e8me moderne, qui apporte s\u00e9curit\u00e9 et performances et r\u00e9sout des probl\u00e8mes difficiles \u00e0 \u00e9viter avec d&#8217;autres langages de programmation (tels que C ou C++). Vous avez aussi s\u00fbrement entendu dire que Rust devenait de plus en plus populaire. Vous voyez r\u00e9guli\u00e8rement des articles de blog expliquant que Google, Microsoft, Amazon et d&#8217;autres grands acteurs du secteur l&#8217;ont d\u00e9j\u00e0 adopt\u00e9 et que son adoption est aussi en augmentation dans plusieurs autres secteurs d&#8217;activit\u00e9. Mais vous avez aussi entendu dire que Rust n&#8217;est pas le langage le plus facile \u00e0 apprendre et vous vous demandez si vous pourrez y arriver.<\/p>\n<p>Si vous vous reconnaissez dans la description ci-dessus, cet article est fait pour vous. Mon objectif est de r\u00e9pondre \u00e0 toutes les questions que vous vous posez \u00e0 propos de l&#8217;apprentissage de Rust. Je commencerai par pr\u00e9senter les avantages de Rust pour les d\u00e9veloppeurs et ferai une comparaison avec d&#8217;autres langages de programmation concurrents. Je poursuivrai par une pr\u00e9sentation des fonctionnalit\u00e9s et concepts de Rust les plus importants, qui font qu&#8217;ils se d\u00e9marquent des autres langages de programmation. Je partagerai ensuite des recommandations pour bien d\u00e9marrer avec Rust, des suggestions sur les formations les plus efficaces et diverses ressources p\u00e9dagogiques utiles (livres, guides, tutoriels et cours), ainsi que des conseils pour vous aider \u00e0 relever les d\u00e9fis que vous pourrez rencontrer durant votre parcours d&#8217;apprentissage. Enfin, j&#8217;\u00e9voquerai les domaines du d\u00e9veloppement logiciel dans lesquels l&#8217;utilisation de Rust fait vraiment la diff\u00e9rence et vous expliquerai pourquoi et comment.<\/p>\n<h2 class=\"wp-block-heading\">Pourquoi apprendre Rust en 2024 ?<\/h2>\n<p>Les derni\u00e8res enqu\u00eates men\u00e9es aupr\u00e8s des d\u00e9veloppeurs ont montr\u00e9 que Rust est l&#8217;un des 12 langages de programmation les plus utilis\u00e9s dans le secteur de l&#8217;informatique. Selon les donn\u00e9es de ces enqu\u00eates, 10 \u00e0 13 % des d\u00e9veloppeurs de logiciels travaillent r\u00e9guli\u00e8rement avec Rust. Si on prend seulement en consid\u00e9ration ceux qui sont en phase d&#8217;apprentissage de la programmation, la proportion d&#8217;utilisateurs de Rust est alors de 11 \u00e0 18 %. Les personnes qui se forment \u00e0 Rust constituent un puissant moteur de croissance. <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/lp\/devecosystem-2023\/\" target=\"_blank\" rel=\"noopener\">L&#8217;Enqu\u00eate sur l&#8217;\u00e9tat de l&#8217;\u00e9cosyst\u00e8me des d\u00e9veloppeurs<\/a> r\u00e9v\u00e8le que Rust a connu une croissance constante au cours des six derni\u00e8res ann\u00e9es et ne montre aucun signe de stagnation :<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-511130\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/image-17.png\" alt=\"\" width=\"1600\" height=\"1342\" \/><\/figure>\n<p>Vous remarquerez que Rust est le seul langage ayant obtenu un r\u00e9sultat \u00e0 deux chiffres dans la colonne \u00ab\u00a0Likely to adopt\u00a0\u00bb\u00a0!<\/p>\n<p>L&#8217;engouement des d\u00e9veloppeurs pour Rust est \u00e9galement significatif. Comment puis-je le savoir ? Les r\u00e9sultats de l&#8217;enqu\u00eate sur les d\u00e9veloppeurs de StackOverflow en attestent :<\/p>\n<ul>\n<li>Rust continue d&#8217;\u00eatre <a href=\"https:\/\/survey.stackoverflow.co\/2024\/technology#admired-and-desired\" target=\"_blank\" rel=\"noopener\">le langage qui suscite le plus d&#8217;int\u00e9r\u00eat<\/a> dans la communaut\u00e9 de d\u00e9veloppeurs, et ce depuis de nombreuses ann\u00e9es cons\u00e9cutives (huit ans ? neuf ans ? On ne sait m\u00eame plus exactement\u00a0!).<\/li>\n<li>Les d\u00e9veloppeurs qui travaillent d\u00e9j\u00e0 avec Rust <a href=\"https:\/\/survey.stackoverflow.co\/2024\/technology#worked-with-vs-want-to-work-with\" target=\"_blank\" rel=\"noopener\">n&#8217;envisagent aucunement de passer<\/a> \u00e0 un autre langage de programmation.<\/li>\n<\/ul>\n<p>En tant que participant r\u00e9gulier \u00e0 des conf\u00e9rences pour les d\u00e9veloppeurs Rust, je peux \u00e9galement t\u00e9moigner de cet engouement pour Rust. Les utilisateurs de Rust constituent l&#8217;une des communaut\u00e9s de d\u00e9veloppeurs les plus dynamiques et conviviales.<\/p>\n<p>D&#8217;un autre c\u00f4t\u00e9, l&#8217;enqu\u00eate de StackOverflow <a href=\"https:\/\/survey.stackoverflow.co\/2024\/technology#4-change-in-salaries-between-2023-and-2024\" target=\"_blank\" rel=\"noopener\">rapporte<\/a> une baisse du salaire annuel m\u00e9dian au cours des deux derni\u00e8res ann\u00e9es, mais cette tendance s&#8217;observe \u00e9galement pour d&#8217;autres langages de programmation populaires. Malgr\u00e9 son adoption croissante par de grandes entreprises et des entreprise de taille moyenne du secteur informatique, nombreuses petites entreprises n&#8217;utilisent pas encore Rust, il pourrait donc y avoir davantage d&#8217;offres d&#8217;emploi pour des d\u00e9veloppeurs Rust \u00e0 l&#8217;avenir (je vous invite \u00e0 consulter <a href=\"https:\/\/www.reddit.com\/r\/rust\/comments\/174rwyf\/rust_job_market_super_competitive_october_2023\/\" target=\"_blank\" rel=\"noopener\">cette passionnante discussion<\/a> pour plus d&#8217;informations sur ce sujet).<\/p>\n<p>Si on examine plus en d\u00e9tail les fonctionnalit\u00e9s et l&#8217;\u00e9cosyst\u00e8me du langage, on comprend imm\u00e9diatement les chiffres mentionn\u00e9s plus haut. Rust a \u00e9t\u00e9 con\u00e7u pour offrir \u00e0 la fois davantage de s\u00e9curit\u00e9 en mati\u00e8re de m\u00e9moire et de meilleures performances. Les choix uniques qu&#8217;ont fait les concepteurs du langage favorisent la diminution des erreurs d&#8217;acc\u00e8s \u00e0 la m\u00e9moire dans le code, ce qui r\u00e9duit les risques de failles de s\u00e9curit\u00e9 sans que les performances n&#8217;en p\u00e2tissent. Alors, quel est donc le \u00ab prix \u00e0 payer \u00bb pour cela ? Eh bien, c&#8217;est tout le temps que vous devez passer \u00e0 convaincre le compilateur Rust que votre code est vraiment s\u00fbr. Une fois que le compilateur est d&#8217;accord avec vous, vous \u00eates tranquille. Ensemble, la s\u00e9curit\u00e9 de la m\u00e9moire et les performances du langage permettent d&#8217;offrir une exp\u00e9rience beaucoup plus fluide aux utilisateurs de solutions logicielles (c&#8217;est-\u00e0-dire quasiment tout le monde de nos jours). La biblioth\u00e8que standard de Rust, d&#8217;autres biblioth\u00e8ques essentielles et ensembles d&#8217;outils am\u00e9liorent \u00e9galement l&#8217;exp\u00e9rience de d\u00e9veloppement. Par exemple, d\u00e9velopper des applications concurrentes hautes performances en Rust n&#8217;est pas difficile, car l&#8217;\u00e9cosyst\u00e8me est mature et bien \u00e9quip\u00e9 pour prendre en charge de telles t\u00e2ches.<\/p>\n<p>Les d\u00e9veloppeurs appr\u00e9cient \u00e9galement le grand nombre de secteurs d&#8217;activit\u00e9 et de domaines technologiques dans lesquels Rust est applicable. L&#8217;<a href=\"https:\/\/blog.rust-lang.org\/2024\/02\/19\/2023-Rust-Annual-Survey-2023-results.html\" target=\"_blank\" rel=\"noopener\">enqu\u00eate annuelle sur Rust<\/a> la plus r\u00e9cente a notamment identifi\u00e9 les domaines suivants\u00a0:<\/p>\n<ul>\n<li>Applications c\u00f4t\u00e9 serveur et autres applications backend.<\/li>\n<li>Applications, services et infrastructures de cloud computing.<\/li>\n<li>Syst\u00e8mes distribu\u00e9s.<\/li>\n<li>R\u00e9seaux informatiques.<\/li>\n<li>S\u00e9curit\u00e9 informatique.<\/li>\n<li>D\u00e9veloppement embarqu\u00e9.<\/li>\n<li>D\u00e9veloppement de jeux.<\/li>\n<li>Frontends web (y compris WebAssembly).<\/li>\n<li>Et bien d&#8217;autres.<\/li>\n<\/ul>\n<p>Rust n&#8217;est \u00e9videmment pas le seul langage de programmation utilis\u00e9 dans ces domaines. Il a des concurrents dans chacun d&#8217;eux. Il est souvent compar\u00e9 \u00e0 C++ ou \u00e0 Go, car ils ont de nombreux points communs, mais ils diff\u00e8rent sur plusieurs points, notamment en ce qui concerne les garanties en mati\u00e8re de s\u00e9curit\u00e9 de la m\u00e9moire, les performances, la disponibilit\u00e9 des outils et des biblioth\u00e8ques, la simplicit\u00e9 du langage et les secteurs d&#8217;activit\u00e9s dans lesquels ils sont le plus utilis\u00e9s. Rust n&#8217;obtient pas les meilleurs r\u00e9sultats \u00e0 tous les niveaux, mais offre des performances aussi bonnes que C++ et se distingue par sa capacit\u00e9 \u00e0 permettre d\u2019\u00e9viter les pi\u00e8ges li\u00e9s \u00e0 l\u2019acc\u00e8s \u00e0 la m\u00e9moire facilement et de cr\u00e9er des applications sans erreurs.<\/p>\n<h2 class=\"wp-block-heading\">Comprendre les concepts fondamentaux de Rust<\/h2>\n<p>Prenons de la hauteur pour avoir une vue d&#8217;ensemble de Rust et de ses fonctionnalit\u00e9s. Rust n&#8217;est ni un langage de programmation orient\u00e9 objet, ni un langage de programmation fonctionnel. Il ne comporte pas de classes et ne prend pas directement en charge les mod\u00e8les orient\u00e9s objet. Il peut op\u00e9rer avec des fonctions comme valeurs de premi\u00e8re classe, mais cette capacit\u00e9 est limit\u00e9e par rapport aux langages fonctionnels \u00e0 part enti\u00e8re (comme Haskell ou OCaml).<\/p>\n<h3 class=\"wp-block-heading\">\u00c9crire du code avec des fonctions, des valeurs et des types<\/h3>\n<p>Les programmes en Rust sont structur\u00e9s comme des collections de fonctions combin\u00e9es en modules. Les fonctions manipulent les valeurs. Les valeurs sont typ\u00e9es de mani\u00e8re statique, ce qui signifie que chaque valeur ou expression doit avoir un type attribu\u00e9 au moment de la compilation. Rust fournit \u00e0 la fois des types primitifs et compos\u00e9s (tableaux et structures), et sa biblioth\u00e8que standard fournit de nombreux types suppl\u00e9mentaires pour les collections de valeurs. Il prend en charge les types g\u00e9n\u00e9riques, ce qui permet d&#8217;\u00e9viter d&#8217;avoir \u00e0 mentionner des types sp\u00e9cifiques et de fournir des d\u00e9finitions plus g\u00e9n\u00e9rales. Rust fournit \u00e9galement des traits comme collections de m\u00e9thodes (c&#8217;est-\u00e0-dire de fonctions) qui peuvent \u00eatre impl\u00e9ment\u00e9s pour des types sp\u00e9cifiques. Les traits permettent \u00e0 Rust d&#8217;atteindre les m\u00eames niveaux d&#8217;abstraction logicielle que les langages orient\u00e9s objet qui prennent en charge l&#8217;h\u00e9ritage et le polymorphisme.<\/p>\n<h3 class=\"wp-block-heading\">Gestion de la m\u00e9moire<\/h3>\n<p>L&#8217;approche de Rust en mati\u00e8re de gestion de la m\u00e9moire repose sur le principe suivant\u00a0: <strong>le compilateur Rust doit savoir pr\u00e9cis\u00e9ment \u00e0 quels emplacements la m\u00e9moire est allou\u00e9e dans le code, comment on y acc\u00e8de, et l\u00e0 o\u00f9 elle n&#8217;est plus n\u00e9cessaire<\/strong>. Ces informations permettent de contr\u00f4ler l&#8217;acc\u00e8s \u00e0 la m\u00e9moire et de lib\u00e9rer automatiquement la m\u00e9moire allou\u00e9e en ins\u00e9rant les instructions correspondantes directement dans le code g\u00e9n\u00e9r\u00e9, ce qui contribue \u00e0 \u00e9viter de nombreux pi\u00e8ges courants auxquels on est expos\u00e9 avec d&#8217;autres langages. Cette approche diff\u00e8re de la gestion automatique de la m\u00e9moire (comme en JavaScript, Python, Java ou C#), dans laquelle les fragments de m\u00e9moire qui ne sont plus n\u00e9cessaires sont d\u00e9tect\u00e9s au moment de l&#8217;ex\u00e9cution et supprim\u00e9s par le ramasse-miettes. Rust \u00e9conomise ainsi le temps n\u00e9cessaire \u00e0 l&#8217;ex\u00e9cution des algorithmes correspondants au moment de l&#8217;ex\u00e9cution et atteint un double objectif de s\u00e9curit\u00e9 de la m\u00e9moire et de performance.<\/p>\n<p>Pour pouvoir inf\u00e9rer des connaissances sur l&#8217;acc\u00e8s \u00e0 la m\u00e9moire, Rust fixe des limites concernant ce qui peut \u00eatre fait avec la m\u00e9moire et d\u00e9finit des r\u00e8gles strictes pour garantir l&#8217;exactitude\u00a0:<\/p>\n<ul>\n<li>Chaque fragment de m\u00e9moire doit appartenir \u00e0 une seule variable : le <em>mod\u00e8le de propri\u00e9t\u00e9<\/em> de Rust repose sur ce point.<\/li>\n<li>La mutation d&#8217;un fragment de m\u00e9moire n\u00e9cessite un acc\u00e8s exclusif (par opposition \u00e0 une simple lecture de la m\u00e9moire).<\/li>\n<li>Rust permet de cr\u00e9er des r\u00e9f\u00e9rences mutables et immuables \u00e0 des fragments de m\u00e9moire (en les empruntant) mais utilise un <em>v\u00e9rificateur d&#8217;emprunt<\/em> pour garantir l&#8217;exactitude (par exemple, en interdisant plus d&#8217;une r\u00e9f\u00e9rence mutable).<\/li>\n<li>Le compilateur Rust calcule et v\u00e9rifie les <em>dur\u00e9es de vie<\/em> de chaque variable dans un programme, de l&#8217;emplacement o\u00f9 elle est cr\u00e9\u00e9e \u00e0 celui o\u00f9 elle est supprim\u00e9e (o\u00f9 elle devient inaccessible).<\/li>\n<\/ul>\n<p>Les exigences du compilateur peuvent \u00eatre per\u00e7ues comme trop strictes. C&#8217;est une cause de frustration courante, en particulier lors de l&#8217;apprentissage du langage : le compilateur Rust peut refuser un fragment de code qui est logiquement correct.<\/p>\n<p>Pour faciliter la compr\u00e9hension de ces concepts, examinons l&#8217;\u00e9quivalent Rust du programme Python suivant\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def print_list(numbers):\n   for number in numbers:\n       print(str(number) + \" \", end=\"\")\n   print()\n\n\ndef add_one(numbers):\n   numbers.append(1)\n\n\ndef main():\n   numbers = [1, 1, 1]\n   print_list(numbers)\n   add_one(numbers)\n   print_list(numbers)\n\n\nif __name__ == '__main__':\n   main()<\/pre>\n<p>Nous avons donc un fragment de m\u00e9moire (la liste Python) avec trois \u00e9l\u00e9ments. Nous l&#8217;imprimons, ajoutons un \u00e9l\u00e9ment suppl\u00e9mentaire, et l&#8217;imprimons \u00e0 nouveau. Nous ne mentionnons jamais aucun type ici. Python n&#8217;a besoin d&#8217;aucun signe de gestion de la m\u00e9moire dans le programme, m\u00eame si la m\u00e9moire doit \u00eatre allou\u00e9e et lib\u00e9r\u00e9e \u00e0 un moment donn\u00e9. De plus, nous transmettons la liste <code>numbers<\/code> facilement, sans avoir \u00e0 penser au contr\u00f4le d&#8217;acc\u00e8s \u00e0 la m\u00e9moire.\u00a0<\/p>\n<p>Le m\u00eame code en Rust diff\u00e8re non seulement par sa syntaxe, mais aussi dans son approche des types et de la gestion de la m\u00e9moire\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=\"\">\/\/ Here we take a vector by reference (&amp;).\n\/\/ We are not allowed to mutate elements.\n\/\/ We don't take ownership; we just borrow.\nfn print_vec(numbers: &amp;Vec) {\n   for number in numbers {\n       print!(\"{} \", number);\n   }\n   println!()\n}\n\n\n\/\/ Here we take a vector by mutable reference (&amp;mut).\n\/\/ We are now allowed to mutate elements and the vector itself.\n\/\/ We still don't take ownership; we just borrow.\nfn add_one(numbers: &amp;mut Vec) {\n   numbers.push(1)\n}\n\n\nfn main() {\n   let mut numbers = vec![1,1,1];\n   \/\/ We pass a reference\n   print_vec(&amp;numbers);\n   \/\/ We pass a mutable reference\n   add_one(&amp;mut numbers);\n   \/\/ We pass a reference again\n   print_vec(&amp;numbers);\n}<\/pre>\n<p>Je vous invite \u00e0 explorer ces deux fragments de code et \u00e0 trouver par vous-m\u00eame les similitudes et les diff\u00e9rences entre eux. M\u00eame sans comprendre Rust, vous pouvez vous en faire une id\u00e9e g\u00e9n\u00e9rale simplement en examinant ce code.<\/p>\n<p>Malgr\u00e9 le passage des r\u00e9f\u00e9rences en param\u00e8tres, la variable numbers reste propri\u00e9taire de la m\u00e9moire allou\u00e9e. Rust utilise par d\u00e9faut un acc\u00e8s m\u00e9moire en lecture seule et requiert une sp\u00e9cification explicite pour l&#8217;acc\u00e8s en \u00e9criture. Rust garantit \u00e9galement que la m\u00e9moire soit lib\u00e9r\u00e9e apr\u00e8s la derni\u00e8re utilisation dans le deuxi\u00e8me appel \u00e0 <code>print_vec<\/code>.\u00a0<\/p>\n<p>Voici une variante de la fonction add_one qui prend possession d&#8217;un vecteur et rend l&#8217;ensemble du programme incorrect\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 add_one_incorrect(mut numbers: Vec) {\n\u00a0\u00a0\u00a0numbers.push(1)\n}<\/pre>\n<p>Quel est le probl\u00e8me ? Eh bien, apr\u00e8s avoir appel\u00e9 la fonction <code>add_one_incorrect<\/code>, la variable numbers ne poss\u00e8de plus la m\u00e9moire\u00a0; sa dur\u00e9e de vie est termin\u00e9e, nous ne pouvons donc rien imprimer\u00a0! La capture d&#8217;\u00e9cran ci-dessous montre quel est le probl\u00e8me\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-511178\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-18-at-18.19.01.png\" alt=\"\" width=\"2414\" height=\"1303\" \/><\/figure>\n<p>Avant l&#8217;introduction de la version incorrecte, le v\u00e9rificateur d&#8217;emprunt de Rust pouvait garantir que le passage des r\u00e9f\u00e9rences ne posait aucun probl\u00e8me. Apr\u00e8s l&#8217;introduction d&#8217;une erreur, cela n&#8217;est plus possible. Ici, le comportement du langage montre \u00e0 quel point l&#8217;acc\u00e8s \u00e0 la m\u00e9moire est strictement contr\u00f4l\u00e9.<\/p>\n<h3 class=\"wp-block-heading\">Concurrence<\/h3>\n<p>La concurrence est la capacit\u00e9 d&#8217;un syst\u00e8me \u00e0 ex\u00e9cuter plusieurs t\u00e2ches ou processus simultan\u00e9ment ou pendant des p\u00e9riodes qui se chevauchent pour am\u00e9liorer l&#8217;efficacit\u00e9 et les performances. Cela peut impliquer une ex\u00e9cution parall\u00e8le sur de multiples processeurs ou une ex\u00e9cution entrelac\u00e9e sur un seul processeur, ce qui permet \u00e0 un syst\u00e8me de traiter plusieurs op\u00e9rations simultan\u00e9ment et de g\u00e9rer plusieurs t\u00e2ches plus efficacement.<\/p>\n<p>Les Rustac\u00e9s disent g\u00e9n\u00e9ralement de la concurrence de Rust qu&#8217;elle est impressionnante. Plusieurs facteurs expliquent cette perception :<\/p>\n<ul>\n<li>Le mod\u00e8le de propri\u00e9t\u00e9 ajoute plus de contr\u00f4le sur le partage des donn\u00e9es entre les threads concurrents.<\/li>\n<li>L&#8217;adoption de structures de donn\u00e9es immuables simplifie l&#8217;impl\u00e9mentation d&#8217;algorithmes concurrents et contribue \u00e0 la s\u00e9curit\u00e9 des threads.<\/li>\n<li>La transmission des messages via les canaux adopt\u00e9s en Rust r\u00e9duit consid\u00e9rablement les complexit\u00e9s li\u00e9es \u00e0 la concurrence d&#8217;\u00e9tat partag\u00e9.<\/li>\n<li>L&#8217;approche de Rust en mati\u00e8re de dur\u00e9e de vie et de gestion de la m\u00e9moire rend g\u00e9n\u00e9ralement le code qui utilise des primitives de concurrence telles que des verrous, des s\u00e9maphores ou des barri\u00e8res, plus concis et plus s\u00fbr.<\/li>\n<li>Dans de nombreux cas, l&#8217;approche de Rust en mati\u00e8re de programmation asynchrone \u00e9vite d&#8217;utiliser des sch\u00e9mas de concurrence complexes et permet d&#8217;\u00e9crire du code concis et clair.<\/li>\n<\/ul>\n<p>Bien que la concurrence ne soit pas la premi\u00e8re chose que les d\u00e9butants apprennent lorsqu&#8217;ils abordent Rust, elle reste plus facile \u00e0 comprendre que dans de nombreux autres langages de programmation. Plus important encore, Rust vous aide \u00e0 \u00e9crire un code concurrent moins propice aux erreurs.<\/p>\n<h2 class=\"wp-block-heading\">Premiers pas avec Rust<\/h2>\n<p>Il suffit d&#8217;installer deux choses sur votre ordinateur pour d\u00e9marrer avec Rust\u00a0:<\/p>\n<ol>\n<li>La cha\u00eene d&#8217;outils Rust\u00a0: une collection d&#8217;outils qui comprend le compilateur Rust et d&#8217;autres utilitaires.<\/li>\n<li>Un \u00e9diteur de code ou un IDE (environnement de d\u00e9veloppement int\u00e9gr\u00e9).\u00a0<\/li>\n<\/ol>\n<p>La premi\u00e8re \u00e9tape est simple\u00a0: allez sur <a href=\"https:\/\/rustup.rs\/\" target=\"_blank\" rel=\"noopener\">rustup.rs<\/a> et ex\u00e9cutez la commande qu&#8217;ils sugg\u00e8rent, ou t\u00e9l\u00e9chargez un installateur, en fonction de votre syst\u00e8me d&#8217;exploitation.<\/p>\n<p>La deuxi\u00e8me \u00e9tape n\u00e9cessite de faire un choix. Vous pouvez utiliser un \u00e9diteur de code configur\u00e9 pour prendre en charge Rust (par exemple, Visual Studio Code prend en charge Rust mais requiert un peu de configuration) ou opter pour un IDE Rust d\u00e9di\u00e9 (tel que <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/rust\/\" target=\"_blank\" rel=\"noopener\">RustRover<\/a>, l&#8217;IDE de JetBrains gratuit pour une utilisation \u00e0 des fins d&#8217;apprentissage).<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/fr-fr\/rust\/download\/#section=window\" target=\"\" rel=\"noopener\">Obtenez RustRover gratuitement<\/a><\/div>\n<\/div>\n<p>Si vous choisissez RustRover, vous n&#8217;avez rien \u00e0 configurer. Vous pouvez le lancer, cr\u00e9er un nouveau projet (\u00e0 l&#8217;aide du bouton <em>New Project<\/em> sur l&#8217;\u00e9cran d&#8217;accueil), et ex\u00e9cuter le programme <em>Hello, world!<\/em> g\u00e9n\u00e9r\u00e9 par d\u00e9faut (utilisez l&#8217;ic\u00f4ne triangulaire verte dans la goutti\u00e8re pour ex\u00e9cuter la fonction main)\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-511141\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/image-18.png\" alt=\"\" width=\"1600\" height=\"1202\" \/><\/figure>\n<p>Si vous rencontrez un probl\u00e8me, consultez le guide de d\u00e9marrage rapide de RustRover (<a href=\"https:\/\/www.jetbrains.com\/help\/rust\/quick-start-guide-rustrover.html\" target=\"_blank\" rel=\"noopener\">Quick Start Guide<\/a>).\u00a0<\/p>\n<p>\u00c0 moins qu&#8217;il ne s&#8217;agisse d&#8217;une t\u00e2che vraiment simple, vous devrez ajouter des d\u00e9pendances externes. Les projets Rust s&#8217;appuient sur Cargo, un gestionnaire de paquets. En Rust, les paquets s&#8217;appellent des <strong>crates<\/strong>. Les d\u00e9pendances sont sp\u00e9cifi\u00e9es dans le fichier <code>Cargo.toml<\/code>, par exemple\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[package]\nname = \"hello\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\nchrono = \"0.4.38\"<\/pre>\n<p>Apr\u00e8s avoir ajout\u00e9 la crate <code>chrono<\/code> \u00e0 nos d\u00e9pendances, nous pouvons utiliser les fonctionnalit\u00e9s qu&#8217;elle fournit dans notre code, par exemple\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=\"\">use chrono::{DateTime, Local};\n\nfn main() {\n   println!(\"Hello, world!\");\n   let local: DateTime = Local::now();\n   println!(\"Today is {}\", local.format(\"%A\"));\n}<\/pre>\n<p>Dans ce programme, nous obtenons la date et l&#8217;heure (locales) actuelles, les formatons comme un jour de la semaine, puis affichons le r\u00e9sultat. L&#8217;ex\u00e9cution de ce programme donne par exemple\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Hello, world!\nToday is Thursday<\/pre>\n<p>L&#8217;apprentissage de la syntaxe de base, des types de donn\u00e9es et des structures de contr\u00f4le (conditions if, boucles, etc.) en Rust est un processus parall\u00e8le \u00e0 l&#8217;apprentissage des crates disponibles et de ce qu&#8217;elles fournissent. Une fois que vous pourrez ex\u00e9cuter des programmes Rust, vous serez pr\u00eat \u00e0 travailler avec des d\u00e9pendances externes. Parlons des ressources qui simplifient l&#8217;apprentissage de Rust.<\/p>\n<h2 class=\"wp-block-heading\">Parcours d&#8217;apprentissage et ressources<\/h2>\n<p>Si vous avez d\u00e9j\u00e0 appris une langue \u00e9trang\u00e8re, vous savez que diverses comp\u00e9tences sont requises, comme la compr\u00e9hension \u00e9crite, l&#8217;expression \u00e9crite, la compr\u00e9hension orale et l&#8217;expression orale. Plusieurs types d&#8217;activit\u00e9s permettent de d\u00e9velopper ces comp\u00e9tences. Les enseignants vous encouragent toujours \u00e0 lire des textes, \u00e0 regarder des vid\u00e9os, \u00e0 \u00e9couter des podcasts, \u00e0 parler autant que possible, \u00e0 publier sur les r\u00e9seaux sociaux, etc. C&#8217;est la m\u00eame chose pour apprendre un langage de programmation. Pour apprendre comment coder en Rust (ou avec tout autre langage de programmation), vous devrez :<\/p>\n<ul>\n<li>Lire des livres, de la documentation, des articles de blog, les annonces de nouvelles versions et des discussions sur les r\u00e9seaux sociaux (ce qui est essentiel pour rester inform\u00e9 et conna\u00eetre le contexte actuel).<\/li>\n<li>Regarder des vid\u00e9os de blogueurs sp\u00e9cialis\u00e9s.<\/li>\n<li>Examiner des exemples de code (ce qui n\u00e9cessite de les lire et de les modifier\u00a0!).<\/li>\n<li>\u00c9crire du code pour vous exercer.<\/li>\n<li>Suivre des tutoriels pratiques.<\/li>\n<li>D\u00e9velopper des projets simples \u00e0 partir de z\u00e9ro (c&#8217;est extr\u00eamement important : l&#8217;apprentissage bas\u00e9 sur la r\u00e9alisation de projets est toujours utile pour d\u00e9velopper des comp\u00e9tences en programmation de fa\u00e7on ind\u00e9pendante).<\/li>\n<li>Peut-\u00eatre m\u00eame contribuer \u00e0 des projets open source (il y a toujours quelque chose \u00e0 faire, m\u00eame pour les d\u00e9butants, il suffit de demander !).<\/li>\n<\/ul>\n<p>Il est important de maintenir un \u00e9quilibre entre le temps pass\u00e9 \u00e0 lire des contenus et \u00e9crire du code. Il est impossible de ma\u00eetriser un langage de programmation sans le pratiquer r\u00e9ellement en \u00e9crivant du code. Dans le m\u00eame temps, il est essentiel de consulter des livres ou autres documents pour parvenir \u00e0 une compr\u00e9hension approfondie des d\u00e9tails sp\u00e9cifiques au langage. Tout cas complexe pourrait devenir extr\u00eamement difficile \u00e0 r\u00e9soudre sans aide ext\u00e9rieure (ce qui peut vous ralentir dans votre parcours pour devenir un d\u00e9veloppeur professionnel).<\/p>\n<p>Lorsque vous \u00e9crivez du code, il est important de reproduire des exercices, mais aussi de suivre vos propres id\u00e9es (ou de vous inspirer d&#8217;autres id\u00e9es) pour d\u00e9velopper des applications simples. Assurez-vous que vos exercices ne se limitent pas \u00e0 la compr\u00e9hension d&#8217;algorithmes, mais enseignent \u00e9galement les fonctionnalit\u00e9s du langage et les fonctions de la biblioth\u00e8que. En d\u00e9veloppant des applications simples, vous apprendrez \u00e0 choisir la fonctionnalit\u00e9 du langage ou la biblioth\u00e8que qui r\u00e9pond le mieux \u00e0 votre objectif. C&#8217;est une comp\u00e9tence essentielle en soi.<\/p>\n<p>Ainsi, la cl\u00e9 d&#8217;un apprentissage r\u00e9ussi est de combiner toutes ces approches. Je connais une s\u00e9rie de ressources qui peuvent vous y aider.<\/p>\n<h3 class=\"wp-block-heading\">Livres sur Rust<\/h3>\n<p>Il existe beaucoup de bons livres pour apprendre Rust\u00a0:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-511152\" style=\"aspect-ratio: 0.7571428571428571; width: 254px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/image-19.png\" alt=\"\" width=\"477\" height=\"630\" \/><\/figure>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-511163\" style=\"aspect-ratio: 0.7975; width: 256px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/image-20.png\" alt=\"\" width=\"1276\" height=\"1600\" \/><\/figure>\n<\/div>\n<ul>\n<li><a href=\"https:\/\/doc.rust-lang.org\/book\/\" target=\"_blank\" rel=\"noopener\"><em>The Rust Programming Language<\/em><\/a> est un livre officiel sur le langage r\u00e9guli\u00e8rement actualis\u00e9, destin\u00e9 aux personnes qui apprennent Rust. Il est connu sous le nom de <em>The Book<\/em> au sein de la communaut\u00e9. Je recommande \u00e9galement <a href=\"https:\/\/rust-book.cs.brown.edu\/\" target=\"_blank\" rel=\"noopener\">une autre version<\/a> de ce livre qui apporte plus d&#8217;interactivit\u00e9, avec des quiz, des visualisations et des exercices. Cette version a \u00e9t\u00e9 d\u00e9velopp\u00e9e par Will Crichton, Gavin Gray et Shriram Krishnamurthi, chercheurs \u00e0 l&#8217;Universit\u00e9 Brown. Il existe \u00e9galement une <a href=\"https:\/\/www.youtube.com\/watch?v=u85bozA3bv0\" target=\"_blank\" rel=\"noopener\">une interview<\/a> avec Will Crichton, dans laquelle il explique cette exp\u00e9rimentation pour am\u00e9liorer l&#8217;exp\u00e9rience des personnes apprenant Rust.<\/li>\n<li><a href=\"https:\/\/www.manning.com\/books\/rust-in-action\" target=\"_blank\" rel=\"noopener\"><em>Rust in Action<\/em><\/a> par Tim McNamara (\u00e9galement connu sous le nom de <a href=\"https:\/\/timclicks.dev\/\" target=\"_blank\" rel=\"noopener\">timClicks<\/a>\u00a0; mon conseil est de le suivre partout).<\/li>\n<li><a href=\"https:\/\/pragprog.com\/titles\/hwrust\/hands-on-rust\/\" target=\"_blank\" rel=\"noopener\"><em>Hands-on Rust<\/em><\/a> par Herbert Wolverson : le livre qui pla\u00eet particuli\u00e8rement \u00e0 ceux qui appr\u00e9cient l&#8217;apprentissage par projet (vous pouvez \u00e9galement trouver de nombreuses vid\u00e9os gratuites d&#8217;Herbert sur plusieurs concepts de Rust ; je ne saurais trop vous les recommander).<\/li>\n<li><a href=\"https:\/\/rust-for-rustaceans.com\/\" target=\"_blank\" rel=\"noopener\"><em>Rust for Rustaceans<\/em><\/a> par Jon Gjengset, un livre sur Rust pl\u00e9biscit\u00e9 par de nombreux membres de la communaut\u00e9.\u00a0\u00a0<\/li>\n<li><a href=\"https:\/\/www.manning.com\/books\/code-like-a-pro-in-rust\" target=\"_blank\" rel=\"noopener\"><em>Code Like a Pro in Rust<\/em><\/a> par Brenden Matthews.<\/li>\n<li><a href=\"https:\/\/www.manning.com\/books\/learn-rust-in-a-month-of-lunches\" target=\"_blank\" rel=\"noopener\"><em>Learn Rust in a Month of Lunches<\/em><\/a> par David MacLeod.<\/li>\n<li>Apr\u00e8s quelques mois d&#8217;apprentissage de Rust, vous devriez jeter un \u0153il \u00e0 <em><a href=\"https:\/\/marabos.nl\/atomics\/\" target=\"_blank\" rel=\"noopener\">Rust Atomics and Locks<\/a><\/em>, par Mara Bos. C&#8217;est un chef-d&#8217;\u0153uvre en mati\u00e8re d&#8217;explication des concepts de bas niveau derri\u00e8re la concurrence en Rust.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Tutoriels Rust<\/h3>\n<p>Pour ceux qui pr\u00e9f\u00e8rent une approche plus pratique de l&#8217;apprentissage, il existe \u00e9galement des tutoriels et des cours avec exercices\u00a0:<\/p>\n<ul>\n<li><a href=\"https:\/\/google.github.io\/comprehensive-rust\/\" target=\"_blank\" rel=\"noopener\">Comprehensive Rust<\/a> est un tutoriel Rust d\u00e9velopp\u00e9 en interne chez Google mais accessible \u00e0 tous. C&#8217;est la meilleure ressource pour ceux qui souhaitent apprendre rapidement tous les d\u00e9tails n\u00e9cessaires.<\/li>\n<li><a href=\"https:\/\/github.com\/rust-lang\/rustlings\/\" target=\"_blank\" rel=\"noopener\">Rustlings<\/a> (et sa variation pour une <a href=\"https:\/\/blog.jetbrains.com\/fr\/rust\/2023\/03\/14\/apprenez-rust-avec-les-ide-de-jetbrains\/\">exp\u00e9rience d&#8217;apprentissage dans l&#8217;IDE<\/a>, un <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/16631-learn-rust\/about\" target=\"_blank\" rel=\"noopener\">cours<\/a> sur Rust de <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/academy\/\" target=\"_blank\" rel=\"noopener\">JetBrains Academy<\/a>).<\/li>\n<li><a href=\"https:\/\/rust-exercises.com\/100-exercises\/\" target=\"_blank\" rel=\"noopener\">100 exercises to learn Rust<\/a> : un cours g\u00e9nial avec des exercices d\u00e9velopp\u00e9s par <a href=\"https:\/\/www.lpalmieri.com\/\" target=\"_blank\" rel=\"noopener\">Luca Palmieri<\/a> (encore un autre Rustac\u00e9 \u00e0 suivre).<\/li>\n<li>Eleftheria Batsou a pr\u00e9sent\u00e9 <a href=\"https:\/\/eleftheriabatsou.hashnode.dev\/5-rust-project-ideas-for-absolutely-beginners-devs\" target=\"_blank\" rel=\"noopener\">un bel ensemble d&#8217;id\u00e9es de projets simples<\/a> sur lesquels travailler tout en apprenant Rust.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Rust sur YouTube<\/h3>\n<p>Pour les Rustac\u00e9s qui aiment apprendre sur YouTube, je recommande d&#8217;y suivre plusieurs cha\u00eenes :<\/p>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/@letsgetrusty\" target=\"_blank\" rel=\"noopener\">Let&#8217;s Get Rusty<\/a> : je ne sais pas pourquoi, mais il est difficile d&#8217;arr\u00eater de regarder ces vid\u00e9os.<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/@JeremyChone\" target=\"_blank\" rel=\"noopener\">Jeremy Chone<\/a> est tr\u00e8s dou\u00e9 pour expliquer des concepts complexes.<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/c\/chrisbiscardi\" target=\"_blank\" rel=\"noopener\">Chris Biscardi<\/a> parle du d\u00e9veloppement de jeux en Rust avec le framework Bevy, entre autres. Cr\u00e9er un jeu est un excellent projet pour tout le monde\u00a0!<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/@jonhoo\" target=\"_blank\" rel=\"noopener\">Jon Gjengset<\/a>\u00a0: pendant les deux premi\u00e8res ann\u00e9es de votre parcours avec Rust, il peut \u00eatre difficile de suivre ses streams techniques approfondis, mais je recommande de commencer \u00e0 les regarder assez t\u00f4t\u00a0!\u00a0<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">La Communaut\u00e9 Rust<\/h3>\n<ul>\n<li>La <a href=\"https:\/\/www.reddit.com\/r\/rust\/\" target=\"_blank\" rel=\"noopener\">communaut\u00e9 Rust sur Reddit<\/a> m\u00e9rite d&#8217;\u00eatre suivie.<\/li>\n<li>En tant que d\u00e9butant, vous pouvez poser vos questions sur le <a href=\"https:\/\/discord.com\/invite\/rust-lang\" target=\"_blank\" rel=\"noopener\">serveur Discord de la communaut\u00e9 Rust<\/a>.<\/li>\n<li><a href=\"https:\/\/this-week-in-rust.org\/\" target=\"_blank\" rel=\"noopener\">This Week in Rust<\/a> est la ressource communautaire la plus importante pour lire les actualit\u00e9s concernant Rust. Je le lis chaque semaine sans exception.<\/li>\n<\/ul>\n<p>Bien entendu, de nombreuses autres ressources d&#8217;apprentissage sont disponibles, mais il est impossible de toutes les r\u00e9pertorier. La bonne nouvelle est que vous n&#8217;arr\u00eatez jamais d&#8217;apprendre Rust, car le langage \u00e9volue constamment.<\/p>\n<h2 class=\"wp-block-heading\">D\u00e9fis courants et comment les surmonter<\/h2>\n<p>Apprendre Rust peut \u00eatre complexe. Vous pouvez toutefois surmonter ces difficult\u00e9s et parvenir \u00e0 ma\u00eetriser le langage en adoptant la bonne strat\u00e9gie. Voici quelques conseils pour vous aider tout au long de votre parcours\u00a0:<\/p>\n<ol>\n<li><strong>Comprenez bien le mod\u00e8le de propri\u00e9t\u00e9.<\/strong> Le mod\u00e8le de propri\u00e9t\u00e9 de Rust, qui inclut des concepts tels que la propri\u00e9t\u00e9, l&#8217;emprunt et la dur\u00e9e de vie, est souvent l&#8217;aspect le plus difficile pour les d\u00e9butants. Commencez par de petits exemples et entra\u00eenez-vous fr\u00e9quemment. Cherchez surtout \u00e0 comprendre les raisons pour lesquelles Rust applique ces r\u00e8gles plut\u00f4t que de vous concentrer sur la mani\u00e8re de contourner les erreurs du compilateur.\u00a0<\/li>\n<li><strong>Prenez votre temps avec le v\u00e9rificateur d&#8217;emprunt.<\/strong> Le v\u00e9rificateur d&#8217;emprunt peut \u00eatre frustrant, car il est strict et peut conduire \u00e0 des erreurs de compilation d\u00e9routantes. Lorsque vous rencontrez des probl\u00e8mes avec le v\u00e9rificateur d&#8217;emprunt, prenez du recul et analysez ce que Rust essaie d&#8217;\u00e9viter. Exp\u00e9rimentez avec des approches telles que le r\u00e9f\u00e9rencement ou le clonage de donn\u00e9es (mais essayez de ne pas tout cloner\u00a0!). N&#8217;h\u00e9sitez pas \u00e0 demander de l&#8217;aide sur des forums comme Reddit ou le serveur Rust Community sur Discord. Il est vraiment utile de comprendre ce qu&#8217;est pr\u00e9cis\u00e9ment un v\u00e9rificateur d&#8217;emprunt. Consultez, par exemple, cette <a href=\"https:\/\/www.youtube.com\/watch?v=HG1fppexRMA\" target=\"_blank\" rel=\"noopener\">excellente explication<\/a> de Nell Shamrell-Harrington.<\/li>\n<li><strong>Tirez parti de la documentation de Rust.<\/strong> Rust est un langage relativement nouveau, donc certaines choses peuvent ne sont pas aussi facilement compr\u00e9hensibles qu&#8217;avec d&#8217;autres langages plus anciens. Utilisez la documentation Rust, qui est r\u00e9put\u00e9e pour \u00eatre compl\u00e8te et bien \u00e9crite. La communaut\u00e9 Rust contribue \u00e9galement \u00e0 d&#8217;excellentes ressources telles que le guide <a href=\"https:\/\/doc.rust-lang.org\/rust-by-example\/\" target=\"_blank\" rel=\"noopener\">Rust by Example<\/a>.<\/li>\n<li><strong>Commencez par des projets simples. <\/strong>La complexit\u00e9 de Rust peut donner l&#8217;impression d&#8217;\u00eatre d\u00e9pass\u00e9 au d\u00e9but. Commencez par impl\u00e9menter des programmes basiques et passez progressivement \u00e0 des programmes plus complexes. Voici quelques exemples de projets simples\u00a0: la cr\u00e9ation d&#8217;un outil de ligne de commande avec <a href=\"https:\/\/clap.rs\" target=\"_blank\" rel=\"noopener\">clap<\/a>, l&#8217;\u00e9criture d&#8217;analyseurs de fichiers simples ou la cr\u00e9ation d&#8217;un serveur web de base \u00e0 l&#8217;aide d&#8217;un framework tel que <a href=\"https:\/\/rocket.rs\/\" target=\"_blank\" rel=\"noopener\">Rocket<\/a>.<\/li>\n<li><strong>Familiarisez-vous avec votre \u00e9diteur de code ou votre IDE.<\/strong> \u00c9crire du code Rust manuellement peut entra\u00eener des erreurs. Les outils sont l\u00e0 pour vous aider pour la compl\u00e9tion, le linting et le formatage du code.<\/li>\n<li><strong>Rejoignez la communaut\u00e9 Rust.<\/strong> Cela vous \u00e9vitera de vous sentir isol\u00e9. Impliquez-vous en contribuant \u00e0 des projets open source, ou en participant \u00e0 des discussions et des forums. La communaut\u00e9 Rust est connue pour \u00eatre tr\u00e8s accueillante et aider les d\u00e9butants.<\/li>\n<li><strong>Apprenez de vos erreurs. <\/strong>Le compilateur de Rust est particuli\u00e8rement strict et vous pouvez avoir l&#8217;impression de batailler avec lui en permanence. Consid\u00e9rez chaque erreur du compilateur comme une opportunit\u00e9 d&#8217;apprentissage. Les messages d&#8217;erreur de Rust sont souvent tr\u00e8s descriptifs et vous guident vers la bonne solution. Au fil du temps, vous constaterez que ces erreurs vous aideront \u00e0 \u00e9crire un code de meilleure qualit\u00e9 et plus s\u00fbr.<\/li>\n<li><strong>Soyez patient.<\/strong> On peut facilement se d\u00e9courager avec Rust. Rappelez-vous que Rust est con\u00e7u pour \u00eatre s\u00fbr et efficace, ce qui demande d&#8217;apprendre des concepts complexes. Faites des pauses lorsque vous en ressentez le besoin et n&#8217;h\u00e9sitez pas \u00e0 revenir sur des sujets plusieurs fois jusqu&#8217;\u00e0 ce que vous soyez s\u00fbr de les avoir bien compris.<\/li>\n<li><strong>Rejoignez des groupes d&#8217;apprentissage de Rust. <\/strong>De nombreux d\u00e9veloppeurs apprennent Rust et rejoindre un groupe peut vous apporter soutien et motivation. Recherchez des meetups ou des groupes d&#8217;\u00e9tude en ligne, ou apprenez en m\u00eame temps q&#8217;un ami.<\/li>\n<\/ol>\n<p>Ma\u00eetriser Rust prend du temps, mais le jeu en vaut la chandelle. Les avantages de Rust, telles que les garanties qu&#8217;il offre en mati\u00e8re de s\u00e9curit\u00e9 de la m\u00e9moire et ses performances, en font un langage puissant pour la programmation syst\u00e8me et le d\u00e9veloppement web, entre autres. Pers\u00e9v\u00e9rez et vous constaterez que l&#8217;utilisation de Rust peut \u00eatre plaisante et gratifiante.<\/p>\n<h2 class=\"wp-block-heading\">Cr\u00e9er des applications concr\u00e8tes avec Rust\u00a0<\/h2>\n<p>Examinons maintenant rapidement les avantages de Rust pour la cr\u00e9ation d&#8217;applications concr\u00e8tes. Nous allons \u00e9voquer plusieurs des domaines technologiques pour lesquels Rust est pertinent, avec des cas d&#8217;usages qui mettent en \u00e9vidence ses atouts et son utilit\u00e9.<\/p>\n<h3 class=\"wp-block-heading\">Rust pour le d\u00e9veloppement web<\/h3>\n<p>L&#8217;\u00e9cosyst\u00e8me de Rust est parfaitement adapt\u00e9 au d\u00e9veloppement web backend. De nombreux frameworks et biblioth\u00e8ques effectuent des t\u00e2ches g\u00e9n\u00e9rales de d\u00e9veloppement web (routage de requ\u00eates HTTP, gestion de formulaires et de JSON, cr\u00e9ation de mod\u00e8les, acc\u00e8s aux bases de donn\u00e9es, authentification et autorisation, journalisation et tra\u00e7age, etc.), avec des performances ad\u00e9quates pour la production. Je vous recommande de consulter le site web <a href=\"https:\/\/www.arewewebyet.org\/\" target=\"_blank\" rel=\"noopener\">AreWeWebYet?<\/a> pour plus de d\u00e9tails ainsi que des liens utiles. Spoiler : la r\u00e9ponse \u00e0 la question que pose le site est oui.\u00a0<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-511205\" style=\"aspect-ratio: 0.8; width: 248px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/image-21.png\" alt=\"\" width=\"1280\" height=\"1600\" \/><\/figure>\n<\/div>\n<p>La plupart des frameworks web pour Rust sont assez faciles \u00e0 utiliser d\u00e8s le d\u00e9part et offrent une documentation de qualit\u00e9, en partie du fait de la concurrence qui r\u00e8gne entre eux. La communaut\u00e9 <a href=\"https:\/\/actix.rs\/\" target=\"_blank\" rel=\"noopener\">Actix Web<\/a> propose notamment une <a href=\"https:\/\/github.com\/actix\/examples\" target=\"_blank\" rel=\"noopener\">collection d&#8217;exemples<\/a> int\u00e9ressante et \u00e0 jour. Mon coll\u00e8gue Khalid Abuhakmeh a \u00e9crit <a href=\"https:\/\/blog.jetbrains.com\/rust\/2024\/02\/28\/how-to-write-your-first-rust-web-app-with-rocket-and-rustrover\/\">un tutoriel pour les d\u00e9butants<\/a> sur la cr\u00e9ation d&#8217;une application web HTML simple qui utilise Rocket, un autre framework web pour Rust, comme backend. Luca Palmieri, que j&#8217;ai mentionn\u00e9 plus t\u00f4t, est l&#8217;auteur du livre <a href=\"https:\/\/www.zero2prod.com\/\" target=\"_blank\" rel=\"noopener\"><em>Zero To Production in Rust<\/em><\/a>, qui est un guide pour devenir d\u00e9veloppeur web backend. Il travaille \u00e9galement sur <a href=\"https:\/\/github.com\/LukeMathWalker\/pavex\" target=\"_blank\" rel=\"noopener\">Pavex<\/a>, un framework web \u00e9mergent et prometteur. Fait notable concernant ce dernier projet, Luca documente soigneusement les choix de conception dans <a href=\"https:\/\/github.com\/LukeMathWalker\/pavex?tab=readme-ov-file#project-status\" target=\"_blank\" rel=\"noopener\">une s\u00e9rie de rapports d&#8217;avancement<\/a>. Il est r\u00e9ellement int\u00e9ressant de d\u00e9couvrir et de comprendre les raisons de ces choix. Consultez <a href=\"https:\/\/github.com\/flosse\/rust-web-framework-comparison\" target=\"_blank\" rel=\"noopener\">cette comparaison de frameworks web<\/a> pour comprendre \u00e0 quel point les frameworks web Rust se d\u00e9veloppent.<\/p>\n<p>Rust est \u00e9galement actif dans le frontend web, m\u00eame s&#8217;il n&#8217;est peut-\u00eatre pas encore pr\u00eat \u00e0 100\u00a0% pour la production. N\u00e9anmoins, ses avanc\u00e9es concernant WebAssembly et les frameworks comme <a href=\"https:\/\/www.egui.rs\/\" target=\"_blank\" rel=\"noopener\">egui<\/a> ou <a href=\"https:\/\/dioxuslabs.com\/\" target=\"_blank\" rel=\"noopener\">Dioxus<\/a> sont impressionnantes.<\/p>\n<h3 class=\"wp-block-heading\">Int\u00e9gration de Rust avec d&#8217;autres langages de programmation<\/h3>\n<p>Je me demande si les concepteurs de Rust avaient imagin\u00e9 que Rust deviendrait l&#8217;un des langages de pr\u00e9dilection des personnes d\u00e9veloppant des outils et des biblioth\u00e8ques pour d&#8217;autres langages, en particulier pour Python et JavaScript. Rust peut offrir de meilleures performances, et il est suffisamment attrayant pour que les d\u00e9veloppeurs des \u00e9cosyst\u00e8mes d&#8217;autres langages se mettent \u00e0 l&#8217;apprendre et \u00e0 l&#8217;adopter.\u00a0<\/p>\n<p>Le projet <a href=\"https:\/\/pyo3.rs\/\" target=\"_blank\" rel=\"noopener\">PyO3<\/a> permet aux d\u00e9veloppeurs d&#8217;impl\u00e9menter des modules Python natifs en Rust et d&#8217;acc\u00e9der \u00e0 Python dans les binaires Rust. Gr\u00e2ce \u00e0 PyO3, vous pouvez fournir une impl\u00e9mentation Rust extr\u00eamement efficace d&#8217;une biblioth\u00e8que Python pour les d\u00e9veloppeurs Python. Rust et JavaScript peuvent \u00eatre connect\u00e9s de fa\u00e7on similaire via WebAssembly et <a href=\"https:\/\/github.com\/rustwasm\/wasm-bindgen\" target=\"_blank\" rel=\"noopener\">wasm-bindgen<\/a>.\u00a0<\/p>\n<p><a href=\"http:\/\/astral.sh\" target=\"_blank\" rel=\"noopener\">Astral<\/a> et son cr\u00e9ateur, Charlie Marsh, prouvent qu&#8217;il est possible de d\u00e9velopper des outils Python qui fonctionnent \u00e0 la vitesse de la lumi\u00e8re (enfin, nous savons tous que c&#8217;est une affirmation marketing, bien s\u00fbr, mais le r\u00e9sultat est vraiment fascinant).\u00a0<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-512376\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/image-27.png\" alt=\"\" width=\"1600\" height=\"805\" \/><\/figure>\n<p><a href=\"https:\/\/deno.com\/\" target=\"_blank\" rel=\"noopener\">Deno<\/a>, un runtime JavaScript d\u00e9velopp\u00e9 en Rust, offre de tr\u00e8s bonnes performances. Ce n&#8217;est pas le seul exemple dans l&#8217;\u00e9cosyst\u00e8me JavaScript. Il existe m\u00eame une <a href=\"https:\/\/github.com\/karimould\/awesome-js-tooling-in-rust\" target=\"_blank\" rel=\"noopener\">collection d&#8217;outils JavaScript<\/a> impl\u00e9ment\u00e9s en Rust.\u00a0<\/p>\n<p>Impl\u00e9menter une interop\u00e9rabilit\u00e9 entre Rust et d&#8217;autres langages de programmation est \u00e9galement possible.<\/p>\n<h3 class=\"wp-block-heading\">Syst\u00e8mes et programmation embarqu\u00e9e en Rust<\/h3>\n<p>Rust brille incontestablement dans le domaine de la programmation de syst\u00e8mes. Les intervenants de Google et de Microsoft <a href=\"https:\/\/www.theregister.com\/2024\/03\/31\/rust_google_c\/\" target=\"_blank\" rel=\"noopener\">confirment<\/a> que l&#8217;introduction de Rust dans leurs bases de code r\u00e9duit le nombre de vuln\u00e9rabilit\u00e9s de s\u00e9curit\u00e9, augmente les performances et maintient ou voire am\u00e9liore la productivit\u00e9 des \u00e9quipes de d\u00e9veloppeurs de logiciels. Amazon prend non seulement en charge le <a href=\"https:\/\/aws.amazon.com\/developer\/language\/rust\/\" target=\"_blank\" rel=\"noopener\">d\u00e9veloppement Rust sur AWS<\/a>, mais l&#8217;utilise \u00e9galement directement pour <a href=\"https:\/\/aws.amazon.com\/blogs\/opensource\/sustainability-with-rust\/\" target=\"_blank\" rel=\"noopener\">impl\u00e9menter sa propre infrastructure<\/a>. Cloudflare, une entreprise qui cr\u00e9e des r\u00e9seaux de diffusion de contenu et d&#8217;autres infrastructures r\u00e9seau, <a href=\"https:\/\/www.reddit.com\/r\/rust\/comments\/10c0re0\/how_much_rust_work_is_actually_going_on_at\/\" target=\"_blank\" rel=\"noopener\">utilise Rust<\/a> dans de nombreux projets de bas niveau et contribue \u00e0 l&#8217;\u00e9cosyst\u00e8me Rust avec ses <a href=\"https:\/\/blog.cloudflare.com\/introducing-foundations-our-open-source-rust-service-foundation-library\" target=\"_blank\" rel=\"noopener\">frameworks<\/a>. Ferrous Systems, une soci\u00e9t\u00e9 qui soutient le d\u00e9veloppement de rust-analyzer, d\u00e9veloppe \u00e9galement <a href=\"https:\/\/ferrocene.dev\/\" target=\"_blank\" rel=\"noopener\">Ferrocene<\/a>, une suite d&#8217;outils Rust certifi\u00e9e pour les applications critiques. Cela permet d&#8217;utiliser Rust dans les industries automobile et a\u00e9rospatiale. On trouve notamment des rapports concernant l&#8217;utilisation de Rust par <a href=\"https:\/\/medium.com\/volvo-cars-engineering\/why-volvo-thinks-you-should-have-rust-in-your-car-4320bd639e09\" target=\"_blank\" rel=\"noopener\">Volvo<\/a> et <a href=\"https:\/\/www.youtube.com\/watch?v=Z1xMvm3eS4k\" target=\"_blank\" rel=\"noopener\">Renault<\/a> pour leurs logiciels embarqu\u00e9s.<\/p>\n<h2 class=\"wp-block-heading\">Conclusion et prochaines \u00e9tapes<\/h2>\n<p>Rust est un langage prometteur, qui a l&#8217;avantage de disposer de nombreuses ressources d&#8217;apprentissage et d&#8217;une communaut\u00e9 active et accueillante pour les d\u00e9butants. M\u00eame s&#8217;il pr\u00e9sente certains d\u00e9fis, compte tenu de ses concepts fondamentaux uniques, il existe \u00e9galement des moyens de les relever. Un fois que vous ma\u00eetriserez son utilisation, de nombreuses opportunit\u00e9s d&#8217;emploi dans diff\u00e9rents domaines s&#8217;ouvriront \u00e0 vous.\u00a0<\/p>\n<p>J&#8217;esp\u00e8re que les conseils et les ressources que j&#8217;ai pr\u00e9sent\u00e9s dans cet article vous aideront dans votre parcours. Je vous recommande surtout de vous fixer un objectif avant de vous lancer : trouvez un projet open source auquel vous souhaitez contribuer ou d\u00e9veloppez une id\u00e9e pour votre projet d\u00e8s le d\u00e9but. Vous serez \u00e9tonn\u00e9 de la rapidit\u00e9 avec laquelle vous parviendrez \u00e0 vous rapprocher de l&#8217;atteinte de cet objectif.<\/p>\n<p>Je vous souhaite le meilleur dans votre aventure d&#8217;apprentissage de Rust !<\/p>\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\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:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/2019-08-10-14-42-05_1568979197310-1-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Vitaly Bragilevsky\" 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                                            <h4>Vitaly Bragilevsky<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":813,"featured_media":529720,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[2019,743,530],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rust\/529617"}],"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=529617"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rust\/529617\/revisions"}],"predecessor-version":[{"id":529734,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rust\/529617\/revisions\/529734"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/529720"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=529617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=529617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=529617"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=529617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}