{"id":19,"date":"2007-08-16T15:43:44","date_gmt":"2007-08-16T13:43:44","guid":{"rendered":"http:\/\/zavie.free.fr\/lousodrome\/?p=19"},"modified":"2007-08-16T15:43:44","modified_gmt":"2007-08-16T13:43:44","slug":"une-critique-du-lua","status":"publish","type":"post","link":"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/","title":{"rendered":"Une critique du Lua"},"content":{"rendered":"<p>Laurent proposait dans l&rsquo;un de ses articles une <a href=\"http:\/\/test.blog2geek.com\/mes-commentaires-et-critiques-sur-20-langages-de-programmation-651.html\" title=\"Mes commentaires et critiques, sur 20 langages de programmation\">critique d&rsquo;une vingtaine de langages<\/a> de programmation. Parmi ceux-ci, le <a href=\"http:\/\/www.lua.org\/\">Lua<\/a> \u00e9tait pr\u00e9sent\u00e9 tr\u00e8s bri\u00e8vement. Je propose ici de d\u00e9velopper un peu sur ce langage.<\/p>\n<p>Il s&rsquo;agit donc d&rsquo;un langage particuli\u00e8rement l\u00e9ger, qui s&rsquo;int\u00e8gre tr\u00e8s facilement dans un projet, et qui b\u00e9n\u00e9ficie d&rsquo;une documentation claire et d&rsquo;une communaut\u00e9 relativement active.<\/p>\n<p>Comme l&rsquo;indique Laurent, le Lua est multi-paradigme. S&rsquo;il se pr\u00e9sente au premier abord comme un langage imp\u00e9ratif, on peut \u00e9galement faire de l&rsquo;objet (au prix de l&rsquo;utilisation d&rsquo;une biblioth\u00e8que) et il dispose de plus de tous les outils pour faire du fonctionnel (il me semble juste que l&rsquo;on ne peut pas faire simplement de curryfication). Du point de vue de la syntaxe, c&rsquo;est un langage tr\u00e8s agr\u00e9able qui permet d&rsquo;exprimer les choses de fa\u00e7on tr\u00e8s succincte. Ainsi on peut it\u00e9rer sur un tableau avec un \u00ab\u00a0foreach\u00a0\u00bb, on dispose de fonctions locales, il n&rsquo;y a pas de point-virgule de fin de ligne, pas de parenth\u00e8ses superflues&#8230;<\/p>\n<p>Par contre c&rsquo;est un langage qui souffre d&rsquo;un tr\u00e8s gros laxisme du point de vue du typage. Il est en effet typ\u00e9 (dynamiquement) dans le sens o\u00f9 l&rsquo;on peut demander le type d&rsquo;une variable, mais dans de nombreux cas si l&rsquo;on utilise une variable d&rsquo;un type au lieu d&rsquo;un autre, elle est transtyp\u00e9e sans que cela pose de probl\u00e8me au langage. De plus on ne peut pas imposer le type attendu par une fonction, mais juste le v\u00e9rifier \u00e0 l&rsquo;ex\u00e9cution. Enfin si l&rsquo;on tente d&rsquo;acc\u00e9der \u00e0 une variable qui n&rsquo;existe pas, par exemple suite \u00e0 une faute de frappe, cela ne g\u00e8ne pas le moins du monde le langage, qui renverra \u00ab\u00a0nil\u00a0\u00bb (valeur valide pour une variable). Naturellement c&rsquo;est source de beaucoup d&rsquo;erreurs, d\u00e9cel\u00e9es seulement \u00e0 l&rsquo;ex\u00e9cution de la branche erron\u00e9e.<\/p>\n<p>Autres choix qui ne me plaisent pas&nbsp;: le fait que les variables soient globales sauf contre-indication explicite, et que les op\u00e9rateurs logiques \u00ab\u00a0or\u00a0\u00bb et \u00ab\u00a0and\u00a0\u00bb qui, contrairement \u00e0 ce que l&rsquo;on pourrait attendre d&rsquo;un langage moderne, ne renvoient pas un bool\u00e9en mais l&rsquo;op\u00e9rande d\u00e9terminante.<\/p>\n<p>Du c\u00f4t\u00e9 des outils fournis, le langage se veut dot\u00e9 d&rsquo;un syst\u00e8me de table tr\u00e8s puissant, et s&rsquo;il est vrai qu&rsquo;il est pratique dans les cas simples, on en trouve tr\u00e8s vite les limites. Par exemple on ne dispose pas de reverse-iterator, et en \u00e9crire un s&rsquo;av\u00e8re laborieux. De m\u00eame, la fonction permettant de compter les \u00e9l\u00e9ments d&rsquo;une table est en fait une sorte de hack qui ne fonctionne que pour les tables index\u00e9es, en renvoyant le plus grand indice cons\u00e9cutif. Si l&rsquo;on veut une fonction s\u00e9rieuse pour conna\u00eetre cette information, on doit donc l&rsquo;\u00e9crire. Le langage se veut \u00e9galement dot\u00e9 d&rsquo;une gestion de cha\u00eenes puissantes. Pourtant la documentation explique que les expressions rationnelles ne sont pas POSIX pour des raisons de quantit\u00e9 de code n\u00e9cessaire. Au final filtrer des motifs devient vite p\u00e9nible d\u00e8s que l&rsquo;on sort des cas d&rsquo;\u00e9cole, et l&rsquo;ajout d&rsquo;une nouvelle syntaxe maison vient perturber le principe de moindre surprise.<\/p>\n<p>Enfin du point de vue des performances, le langage se place apparemment plut\u00f4t bien pour un langage interpr\u00e9t\u00e9. Il est notamment possible de faire de la compilation just-in-time et d&rsquo;atteindre ainsi des performances tr\u00e8s correctes. Cela dit elles restent plomb\u00e9es apparemment par le typage dynamique. Un simple appel de fonction se r\u00e9v\u00e8le \u00eatre d\u00e9j\u00e0 co\u00fbteux. Du point de vue de la gestion de la m\u00e9moire, il est assez difficile de savoir ce que l&rsquo;interpr\u00e9teur fait, mais il semblerait qu&rsquo;il ne sache pas tirer parti du fait qu&rsquo;une fonction est souvent appel\u00e9e pour optimiser l&rsquo;allocation de ses variables locales. \u00c0 v\u00e9rifier cela dit.<\/p>\n<p>En conclusion c&rsquo;est un langage tr\u00e8s pratique, vivant, facilement int\u00e9grable, avec une syntaxe relativement agr\u00e9able, mais qui souffre d&rsquo;un trop grand manque de rigueur.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laurent proposait dans l&rsquo;un de ses articles une critique d&rsquo;une vingtaine de langages de programmation. Parmi ceux-ci, le Lua \u00e9tait pr\u00e9sent\u00e9 tr\u00e8s bri\u00e8vement. Je propose ici de d\u00e9velopper un peu sur ce langage. Il s&rsquo;agit donc d&rsquo;un langage particuli\u00e8rement l\u00e9ger, &hellip; <a href=\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,15,18,19,21],"tags":[138],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Une critique du Lua - Lousodrome<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Une critique du Lua - Lousodrome\" \/>\n<meta property=\"og:description\" content=\"Laurent proposait dans l&rsquo;un de ses articles une critique d&rsquo;une vingtaine de langages de programmation. Parmi ceux-ci, le Lua \u00e9tait pr\u00e9sent\u00e9 tr\u00e8s bri\u00e8vement. Je propose ici de d\u00e9velopper un peu sur ce langage. Il s&rsquo;agit donc d&rsquo;un langage particuli\u00e8rement l\u00e9ger, &hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/\" \/>\n<meta property=\"og:site_name\" content=\"Lousodrome\" \/>\n<meta property=\"article:published_time\" content=\"2007-08-16T13:43:44+00:00\" \/>\n<meta name=\"author\" content=\"Julien Guertault\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Guertault\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/\",\"url\":\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/\",\"name\":\"Une critique du Lua - Lousodrome\",\"isPartOf\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/#website\"},\"datePublished\":\"2007-08-16T13:43:44+00:00\",\"dateModified\":\"2007-08-16T13:43:44+00:00\",\"author\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\"},\"breadcrumb\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/lousodrome.net\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Une critique du Lua\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/lousodrome.net\/blog\/#website\",\"url\":\"http:\/\/lousodrome.net\/blog\/\",\"name\":\"Lousodrome\",\"description\":\"La lose 2.0\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/lousodrome.net\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/lousodrome.net\/blog\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\",\"name\":\"Julien Guertault\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/lousodrome.net\/blog\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g\",\"contentUrl\":\"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g\",\"caption\":\"Julien Guertault\"},\"url\":\"http:\/\/lousodrome.net\/blog\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Une critique du Lua - Lousodrome","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/","og_locale":"fr_FR","og_type":"article","og_title":"Une critique du Lua - Lousodrome","og_description":"Laurent proposait dans l&rsquo;un de ses articles une critique d&rsquo;une vingtaine de langages de programmation. Parmi ceux-ci, le Lua \u00e9tait pr\u00e9sent\u00e9 tr\u00e8s bri\u00e8vement. Je propose ici de d\u00e9velopper un peu sur ce langage. Il s&rsquo;agit donc d&rsquo;un langage particuli\u00e8rement l\u00e9ger, &hellip; Continuer la lecture &rarr;","og_url":"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/","og_site_name":"Lousodrome","article_published_time":"2007-08-16T13:43:44+00:00","author":"Julien Guertault","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Julien Guertault","Dur\u00e9e de lecture estim\u00e9e":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/","url":"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/","name":"Une critique du Lua - Lousodrome","isPartOf":{"@id":"http:\/\/lousodrome.net\/blog\/#website"},"datePublished":"2007-08-16T13:43:44+00:00","dateModified":"2007-08-16T13:43:44+00:00","author":{"@id":"http:\/\/lousodrome.net\/blog\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f"},"breadcrumb":{"@id":"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/lousodrome.net\/blog\/blog\/2007\/08\/16\/une-critique-du-lua\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/lousodrome.net\/blog\/"},{"@type":"ListItem","position":2,"name":"Une critique du Lua"}]},{"@type":"WebSite","@id":"http:\/\/lousodrome.net\/blog\/#website","url":"http:\/\/lousodrome.net\/blog\/","name":"Lousodrome","description":"La lose 2.0","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/lousodrome.net\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/lousodrome.net\/blog\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f","name":"Julien Guertault","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/lousodrome.net\/blog\/#\/schema\/person\/image\/","url":"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g","contentUrl":"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g","caption":"Julien Guertault"},"url":"http:\/\/lousodrome.net\/blog\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/posts\/19"}],"collection":[{"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/comments?post=19"}],"version-history":[{"count":0,"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/posts\/19\/revisions"}],"wp:attachment":[{"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/media?parent=19"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/categories?post=19"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/wp-json\/wp\/v2\/tags?post=19"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}