{"id":329,"date":"2023-10-30T23:00:00","date_gmt":"2023-10-30T22:00:00","guid":{"rendered":"https:\/\/coding4phone.com\/?p=329"},"modified":"2026-03-19T18:37:15","modified_gmt":"2026-03-19T17:37:15","slug":"mogwai","status":"publish","type":"post","link":"https:\/\/coding4phone.com\/?p=329","title":{"rendered":"MOGWAI \u2014 The Origin Story (article mis \u00e0 jour)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Je d\u00e9veloppe depuis tr\u00e8s longtemps et j&rsquo;ai eu l&rsquo;occasion d&rsquo;utiliser beaucoup de technologies diff\u00e9rentes et des langages tr\u00e8s vari\u00e9s, mais je crois que le langage qui m&rsquo;a le plus \u00ab parl\u00e9 \u00bb c&rsquo;est le <a href=\"https:\/\/fr.wikipedia.org\/wiki\/RPL\">RPL<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>RPL<\/strong> c&rsquo;est l&rsquo;acronyme de <strong>Reverse Polish Lisp<\/strong>, et c&rsquo;est le nom d&rsquo;un langage cr\u00e9\u00e9 par HP pour ses calculatrices scientifiques et commerciales.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Calculatrice HP 48SX programmable en RPL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">RPL ressemble beaucoup \u00e0 <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Forth_(langage)\">FORTH<\/a>. Comme lui il utilise une pile pour prendre les param\u00e8tres et y d\u00e9poser les r\u00e9sultats, et comme lui il utilise la Notation Polonaise Inverse (RPN). Ainsi en RPN on n&rsquo;\u00e9crit pas <code>2+2<\/code> pour effectuer une addition, mais <code>2 2 +<\/code> : plus besoin de parenth\u00e8ses ni de variables locales, en th\u00e9orie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au premier abord, le RPL n&rsquo;a pas une syntaxe tr\u00e8s simple, mais en creusant le sujet on se rend vite compte de la puissance qu&rsquo;il peut d\u00e9gager.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Une opportunit\u00e9 \u00e0 saisir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;id\u00e9e de lancer le d\u00e9veloppement de MOGWAI est venue le jour o\u00f9 nous avons eu besoin, au boulot, de simuler un p\u00e9riph\u00e9rique Bluetooth Low Energy. l&rsquo;appareil en question n&rsquo;existe pas encore \u2014 il doit d&rsquo;abord \u00eatre con\u00e7u physiquement, son firmware \u00e9crit, test\u00e9 et valid\u00e9. Toute cette proc\u00e9dure prend du temps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Plut\u00f4t que d&rsquo;attendre, nous avons d\u00e9velopp\u00e9 un outil capable de simuler le comportement d&rsquo;un p\u00e9riph\u00e9rique BLE avant m\u00eame qu&rsquo;il existe physiquement. La souplesse obtenue \u00e9tait \u00e9norme : le code logique de la simulation \u00e9tait enti\u00e8rement script\u00e9, modifiable en temps r\u00e9el, sans recompilation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce simulateur BLE \u00e9tait le projet id\u00e9al pour lancer le d\u00e9veloppement de MOGWAI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Une lente maturation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La premi\u00e8re version de MOGWAI a \u00e9t\u00e9 d\u00e9velopp\u00e9e en .NET Standard avec C#, et incluse dans un simulateur UWP tournant sur Raspberry PI 3 sous Windows 10 IoT \u2014 les Raspberry \u00e9tant l&rsquo;une des rares plateformes \u00e0 l&rsquo;\u00e9poque dont la puce BLE supporte le r\u00f4le de p\u00e9riph\u00e9rique. Cet outil nous a fait gagner beaucoup de temps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au fur et \u00e0 mesure des besoins, le moteur a \u00e9t\u00e9 \u00e9tendu : gestion des liaisons s\u00e9rie, requ\u00eates HTTP, bases de donn\u00e9es SQLite, GPIO, et aujourd&rsquo;hui plus de 240 primitives.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L\u00e0 o\u00f9 nous en sommes \u2014 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ce qui avait commenc\u00e9 comme un outil interne est devenu, au fil de 10 ans de d\u00e9veloppement, un moteur de scripting mature et autonome.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En f\u00e9vrier 2026, <strong>MOGWAI est pass\u00e9 open source<\/strong> (licence Apache 2.0) sous la version 8. Depuis, le projet a franchi plusieurs \u00e9tapes importantes :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NuGet package<\/strong> publi\u00e9 et maintenu activement (v8.3 \u00e0 ce jour).<\/li>\n\n\n\n<li><strong>MOGWAI Playground<\/strong> \u2014 un environnement interactif en Blazor WebAssembly pour tester le langage directement dans le navigateur, sans installation.<\/li>\n\n\n\n<li><strong>MOGWAI STUDIO<\/strong> \u2014 un IDE d\u00e9di\u00e9 avec colorisation syntaxique, d\u00e9bogage pas \u00e0 pas et mode interactif int\u00e9gr\u00e9.<\/li>\n\n\n\n<li><strong>Cross-platform complet<\/strong> \u2014 Windows, Linux, macOS, Android et iOS via .NET MAUI.<\/li>\n\n\n\n<li><strong>Production<\/strong> \u2014 MOGWAI pilote en conditions r\u00e9elles l&rsquo;int\u00e9gralit\u00e9 des tests d&rsquo;un banc de test de cartes \u00e9lectroniques fabriqu\u00e9es industriellement.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le langage lui-m\u00eame a beaucoup \u00e9volu\u00e9 : sucre syntaxique, appels parenth\u00e9s\u00e9s <code>f(expr)<\/code>, param\u00e8tres nomm\u00e9s <code>f[x: 5]<\/code>, sigil <code>&amp;<\/code> pour la mutation en place, optimisations majeures du runtime (suppression des allocations inutiles, remplacement des lookups O(n) par des dictionnaires O(1)). Des benchmarks r\u00e9cents sur le test Brainfuck\/Mandelbrot montrent des gains de performance tr\u00e8s significatifs par rapport aux versions pr\u00e9c\u00e9dentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La documentation compl\u00e8te est disponible en anglais sur GitHub.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Ce projet me tient \u00e0 c\u0153ur depuis le premier jour. Il est n\u00e9 d&rsquo;un besoin concret, il a grandi avec les projets qui l&rsquo;utilisent, et il continue d&rsquo;\u00e9voluer. Si vous \u00eates d\u00e9veloppeur .NET et que vous avez toujours voulu embarquer un moteur de scripting dans votre application sans \u00e9crire un parser from scratch \u2014 MOGWAI est fait pour vous.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Steph.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Liens utiles<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/Sydney680928\/MOGWAI\">GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.nuget.org\/packages\/MOGWAI\">NuGet<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.mogwai.eu.com\/\">MOGWAI Playground<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/studio.mogwai.eu.com\/\">MOGWAI STUDIO<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Je d\u00e9veloppe depuis tr\u00e8s longtemps et j\u2019ai eu l\u2019occasion d\u2019utiliser beaucoup de technologies diff\u00e9rentes et des langages tr\u00e8s vari\u00e9s, mais je crois que le langage qui m\u2019a le plus \u00ab parl\u00e9 \u00bb c\u2019est le RPL.<br \/>\n<a href=\"https:\/\/www.coding4phone.com\/?p=329\"><br \/>\nLire la suite<br \/>\n<\/a><\/p>\n","protected":false},"author":1,"featured_media":337,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[8,6],"tags":[13,21],"class_list":["post-329","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-mogwai","tag-dotnet","tag-mogwai"],"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/sfoe4s-mogwai","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2023\/10\/mogwai_img6.png?fit=251%2C200&ssl=1","_links":{"self":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=329"}],"version-history":[{"count":13,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/329\/revisions"}],"predecessor-version":[{"id":1956,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/329\/revisions\/1956"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/media\/337"}],"wp:attachment":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}