<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Lisp on Benjamin Geer</title>
    <link>https://benjamingeer.eu/fr/topics/lisp/</link>
    <description>Recent content in Lisp on Benjamin Geer</description>
    <generator>Hugo</generator>
    <language>fr-FR</language>
    <lastBuildDate>Tue, 10 Mar 2026 13:49:30 +0100</lastBuildDate>
    <atom:link href="https://benjamingeer.eu/fr/topics/lisp/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Comparer les performances de requêtes SQL</title>
      <link>https://benjamingeer.eu/fr/post/sqlstopwatch/</link>
      <pubDate>Thu, 29 Jan 2026 18:25:18 +0100</pubDate>
      <guid>https://benjamingeer.eu/fr/post/sqlstopwatch/</guid>
      <description>&lt;p&gt;J&amp;rsquo;ai réalisé un petit programme en Rust,&#xA;&lt;a href=&#34;https://codeberg.org/benjamingeer/sqlstopwatch&#34; target=&#34;_blank&#34;&gt;sqlstopwatch&lt;/a&gt;, pour comparer&#xA;les performances de différentes requêtes&#xA;&lt;a href=&#34;https://fr.wikipedia.org/wiki/Structured_Query_Language&#34; target=&#34;_blank&#34;&gt;SQL&lt;/a&gt;. J&amp;rsquo;ai été&#xA;inspiré par l&amp;rsquo;article &lt;a href=&#34;https://www.jooq.org/benchmark&#34; target=&#34;_blank&#34;&gt;Benchmarking&#xA;SQL&lt;/a&gt; publié par le projet jOOQ, dans lequel le&#xA;code du test est implémenté en SQL. Je voulais quelque chose de semblable,&#xA;mais j&amp;rsquo;avais quelques exigences supplémentaires :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Un programme en ligne de commande avec une interface utilisateur simple en&#xA;mode texte (TUI) qui affiche une barre de progression.&lt;/li&gt;&#xA;&lt;li&gt;Le programme devrait prendre en charge&#xA;&lt;a href=&#34;https://www.postgresql.org&#34; target=&#34;_blank&#34;&gt;PostgreSQL&lt;/a&gt;, &lt;a href=&#34;https://www.mysql.com&#34; target=&#34;_blank&#34;&gt;MySQL&lt;/a&gt; et&#xA;&lt;a href=&#34;https://sqlite.org&#34; target=&#34;_blank&#34;&gt;SQLite&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Il devrait lire les requêtes SQL et les paramètres du test dans un fichier de&#xA;configuration indiqué sur la ligne de commande.&lt;/li&gt;&#xA;&lt;li&gt;Il devrait afficher les résultats sous forme de table dans le terminal ou les&#xA;enregistrer dans un fichier au format CSV que je puisse utiliser pour générer un&#xA;diagramme.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;L&amp;rsquo;interface utilisateur a été facile à réaliser avec&#xA;&lt;a href=&#34;https://ratatui.rs&#34; target=&#34;_blank&#34;&gt;Ratatui&lt;/a&gt;. Pour interagir avec la base de données, j&amp;rsquo;ai&#xA;utilisé la bibliothèque asynchrone &lt;a href=&#34;https://crates.io/crates/sqlx&#34; target=&#34;_blank&#34;&gt;sqlx&lt;/a&gt;, qui&#xA;fournit une bibliothèque SQLite embarquée.&lt;/p&gt;&#xA;&lt;p&gt;J&amp;rsquo;ai pensé à utiliser le format &lt;a href=&#34;https://toml.io&#34; target=&#34;_blank&#34;&gt;TOML&lt;/a&gt; pour le fichier de&#xA;configuration, mais le fichier doit fournir les identifiants de connexion. Dans&#xA;les environnements de test, il se peut que les identifiants doivent être chargés&#xA;à partir de variables d&amp;rsquo;environnement ou de fichiers sur un système de fichiers&#xA;monté, mais TOML ne permet pas d&amp;rsquo;effectuer de telles opérations. En plus, on&#xA;pourrait vouloir générer plusieurs requêtes similaires pour les comparer, comme&#xA;je l&amp;rsquo;ai fait dans &lt;a href=&#34;https://benjamingeer.eu/fr/post/bref&#34;&gt;ce projet d&amp;rsquo;optimisation de base de&#xA;données&lt;/a&gt;. Par conséquent, il vaut mieux que le fichier de&#xA;configuration soit un programme dans un langage de script. Mon &lt;a href=&#34;https://benjamingeer.eu/fr/post/organiclox&#34;&gt;exercice&#xA;d&amp;rsquo;implémentation d&amp;rsquo;un interpréteur de langage de script&lt;/a&gt;&#xA;m&amp;rsquo;avait permis d&amp;rsquo;apprécier à sa juste valeur la machine virtuelle&#xA;&lt;a href=&#34;https://www.lua.org&#34; target=&#34;_blank&#34;&gt;Lua&lt;/a&gt;. Le fichier de configuration est donc un script en&#xA;Lua, que je trouve plus commode de rédiger en&#xA;&lt;a href=&#34;https://fennel-lang.org&#34; target=&#34;_blank&#34;&gt;Fennel&lt;/a&gt;, un dialect de Lisp qui se compile en Lua.&#xA;Grâce à la bibliothèque &lt;a href=&#34;https://crates.io/crates/mlua&#34; target=&#34;_blank&#34;&gt;mlua&lt;/a&gt;, il a été très&#xA;facile d&amp;rsquo;embarquer un interpréteur Lua dans le programme et d&amp;rsquo;utiliser&#xA;&lt;a href=&#34;https://serde.rs&#34; target=&#34;_blank&#34;&gt;Serde&lt;/a&gt; pour convertir des tables Lua en &lt;code&gt;struct&lt;/code&gt;s Rust.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
