Uploaded avatar of iHiD

Divertissements de décembre

@iHiD
il y a Presque 3 ans
Vidéo

Introduction

Salut tout le monde. Bienvenue en décembre. J’espère que tout le monde va bien.

On a eu un mois d’octobre très chargé. On vient de déployer une grosse amélioration des solutions de la communauté. On supprime désormais les doublons, de sorte que les solutions similaires n’apparaissent qu’une seule fois, on a ajouté de nouvelles options de tri, la possibilité de chercher par code et, si tu jettes un œil à C#, tu verras qu’on a aussi ajouté la possibilité de filtrer par différents concepts de programmation. Tu peux donc chercher des solutions qui utilisent le décalage de bits, la récursion ou tout ce qui te passe par la tête. On déploiera tout ça sur les autres parcours pendant la semaine de la communauté.

Mais pour l’instant, concentrons-nous sur #12in23. Novembre a été un mois intéressant, consacré à l’exploration des langages d’assemblage, mais ce mois-ci, on s’attaque à un ensemble très varié de langages : ColdFusion, Groovy, Lua, VimScript et Wren. Comme d’habitude, Erik va nous expliquer ce qui rend ces langages intéressants et uniques.

Les badges

Comme toujours, tu peux gagner le badge Divertissements de décembre en terminant n’importe quels 5 exercices dans ces langages. Il y a aussi le badge de l’année entière, que beaucoup de gens ici cherchent à décrocher. Pour l’obtenir, on a 5 exercices mis en avant à terminer. Les voici :

  • All Your Base : convertir un nombre, représenté comme une suite de chiffres, dans une autre base.
  • Aplatis un tableau : prendre une collection imbriquée et renvoyer une seule collection, sans imbrication.
  • Attaque de la reine : déterminer si deux reines sur un échiquier peuvent s’attaquer l’une l’autre.
  • Personnage D&D : générer aléatoirement des personnages de Donjons et Dragons.
  • Codage par plages : implémenter le codage et le décodage par plages.

Aperçus

ColdFusion

  • Créé en 1995 par Allaire Corporation, rachetée par Macromedia en 2001, elle-même rachetée par Adobe en 2005.
  • Conçu comme une plateforme de développement web rapide
  • Fonctionne sur la machine virtuelle Java (JVM)
  • Il existe deux syntaxes distinctes, qui ont une apparence différente mais sont sémantiquement identiques :
  • L’ancienne syntaxe à balises, qui étend le HTML pour afficher du contenu dynamique.
  • La syntaxe plus récente, proche d’ECMAScript, peut être utilisée là où la syntaxe à balises est utilisée, mais aussi dans des fichiers de script séparés. L’objectif était de déplacer la logique métier du balisage vers un fichier de script distinct
  • CFScript est un langage généraliste qui s’exécute sur la JVM, et c’est ainsi qu’Exercism l’utilise. En pratique, il ne s’est jamais vraiment éloigné de ses racines de serveur web.
  • ColdFusion est un produit payant, mais la Lucee Foundation (une association à but non lucratif basée en Suisse) continue de développer activement son serveur ColdFusion open source, dont nous utilisons le Lucee Server pour le parcours Exercism.
  • Toujours activement développé
  • Utilisé principalement dans les logiciels d’entreprise ; parmi ses clients figurent Apple, Adobe, General Motors et bien d’autres

Groovy

  • Développé par James Strachan à partir de 2003. Le projet a été adopté par Apache en 2015.
  • L’objectif était de développer un langage à typage dynamique sur la JVM (contrairement à Java, à typage statique) qui permette aussi de réduire le code qui se répète
  • Bien que la majeure partie du code Java soit aussi du code Groovy valide, il existe de nombreuses différences (par exemple, Groovy autorise le typage dynamique et la métaprogrammation avancée). Le langage a aussi été fortement influencé par Python et Ruby.
  • Utilisé pour le scripting, les outils de build (Gradle), l’intégration continue (Jenkins), les applications web (Grails), les tests (Spock). Un module complémentaire tiers populaire pour les outils Atlassian permet d’écrire des scripts Groovy.

Lua

  • Lua a été créé en 1993 par Roberto Lerusalimschy, Luiz Henrique de Figueiredo et Waldemar Celes, à l’université pontificale catholique de Rio de Janeiro, au Brésil.
  • Son nom se prononce LOO-ah, ce qui signifie « lune » en portugais, en référence au langage Sol qui l’a en partie inspiré, et qui signifie « soleil » en portugais
  • Conçu avant tout pour être intégré dans d’autres applications, avec un accent sur la rapidité, la portabilité, l’extensibilité et la facilité d’utilisation pendant le développement.
  • Influencé par Modula, CLU, C++, SNOBOL et AWK. De la même manière que LISP et Scheme disposaient d’un mécanisme unique et omniprésent de structure de données (la liste), Lua dispose du sien avec sa table.
  • Interprété via du bytecode, généralement pendant l’exécution, mais cela peut aussi être fait au préalable.
  • Utilisé principalement pour le scripting, par exemple dans des jeux comme World of Warcraft, Dota 2 et Crysis, ou des applications comme Adobe Lightroom et certains logiciels système FreeBSD. Il est aussi beaucoup utilisé pour ajouter de l’extensibilité, par exemple dans Redis, Neovim et Nginx.

VimScript

  • VimScript (aussi appelé Vim Script (avec un espace) ou VimL, pour Vim Language) est le langage de script utilisé dans l’éditeur de texte Vim.
  • Dérivé de ex, l’éditeur visuel orienté ligne qui a précédé Vi
  • Ce n’est pas un langage généraliste, mais un langage spécialisé qui offre un environnement de script efficace et optimisé pour étendre et personnaliser les fonctionnalités de Vim via des plugins, des configurations, des macros et des fonctions.
  • Si Vim est avant tout écrit en C, Vimscript permet aux utilisateurs de personnaliser et d’étendre Vim grâce à un langage de script de haut niveau.
  • Utilisé dans Vim, évidemment, mais aussi dans NeoVim, un fork de Vim

Wren

  • Créé en 2016 par Bob Nystrom, l’auteur du livre Crafting Interpreters
  • Objectifs : petit, simple, rapide.
  • Conçu pour être intégré dans d’autres applications. Son auteur trouvait les options existantes (comme Lua et TCL) insuffisantes et voulait un langage simple et intégrable qui paraisse naturel aux personnes ayant un bagage orienté objet
  • Utilisé dans :
    • TIC-80 : un ordinateur fictif pour créer, jouer et partager de minuscules jeux (similaire à PICO8)
    • DOME : un framework multiplateforme pour créer des jeux.
    • luxe : un moteur de jeu multiplateforme, axé sur le développement rapide, pour créer des jeux.
    • Wren Console : un REPL et une CLI Wren écrits en grande partie en Wren par Josh Goebel, contributeur de longue date sur Exercism, que nous utilisons pour le parcours Wren.

Et d’un point de vue programmation, en quoi ces langages diffèrent-ils ?

ColdFusion

  • Typage dynamique
  • Multi-paradigme, principalement orienté objet mais de plus en plus fonctionnel.

Groovy

  • Le plus souvent à typage dynamique, mais il peut aussi être à typage statique (et à typage progressif)
  • Peut être à la fois interprété et compilé (depuis la version 2). C’est souvent pour cette raison qu’on l’utilise dans des scripts
  • Multi-paradigme : principalement orienté objet, mais aussi impératif, fonctionnel et déclaratif

Lua

  • À typage dynamique et généralement interprété, mais il peut être précompilé
  • Multi-paradigme : procédural, orienté objet (un peu différemment, il est vrai), fonctionnel et piloté par les données

VimScript

  • À typage dynamique et interprété
  • Multi-paradigme : impératif, fonctionnel et une forme simple de programmation orientée objet

Wren

  • À typage dynamique, mais défini statiquement ; cela permet au compilateur d’être très rapide.
  • Un langage avant tout orienté objet, mais aussi impératif, avec un peu de programmation fonctionnelle

Qu’est-ce qui rend ces langages formidables ?

ColdFusion

  • Une excellente séparation entre l’administration du serveur et la création d’applications. La console d’administration configure les connexions aux bases de données et la surveillance du serveur (et tout le reste) ; les créateurs d’applications ont juste besoin du nom d’une source de données (un objet CF doté des méthodes nécessaires, pré-connecté aux parties appropriées du SGBD), ainsi que d’un accès en écriture à un répertoire pour les fichiers de l’application.
  • Tirer parti de la puissance de la JVM et de l’écosystème Java, ce qui inclut la possibilité d’importer n’importe quelle bibliothèque Java et de l’utiliser dans du code CF

Groovy

  • Généraliste : peut servir à presque toutes les charges de travail, y compris les applications et les sites web.
  • Comme il tourne sur la JVM, tous ses avantages s’appliquent : une machine virtuelle mature et très performante, et un nombre immense de bibliothèques disponibles. Son interopérabilité avec Java est excellente
  • Il atténue beaucoup des problèmes que l’on peut rencontrer avec Java, comme les exceptions vérifiées,
  • la null safety, la verbosité et l’absence de métaprogrammation avancée
  • Un langage moderne : inférence de type avancée, closures, syntaxe intégrée pour les expressions régulières, génération automatique des getters et setters
  • Un excellent support de la programmation fonctionnelle : les closures (comme les blocs de Ruby), le currying (application partielle), l’évaluation paresseuse, l’immuabilité, et bien plus encore

Lua

  • Généraliste : utilisé dans les systèmes embarqués, pour le prototypage, le scripting, le développement de jeux, le développement web et le développement backend.
  • Simple : relativement peu de syntaxe, ce qui rend le langage facile à apprendre. Seulement quelques types de données atomiques et un seul type composite intégré : la table. La mémoire est gérée par un ramasse-miettes
  • Portable : l’interprète est écrit en C ANSI, pour lequel il existe un compilateur sur presque toutes les plateformes.

VimScript

  • Simple : une syntaxe légère, facile à apprendre et à utiliser.
  • Interopérabilité : accès facile aux fichiers, aux shells et à d’autres programmes. Toute la puissance de l’outillage externe sans quitter Vim.
  • Expressif : faire beaucoup avec peu. Écrire des scripts compacts et très lisibles.
  • Un moteur d’expressions régulières puissant : l’implémentation des expressions régulières de Vimscript s’inspire de celle d’Emacs Lisp, ce qui en fait un outil puissant pour manipuler du texte.

Wren

  • Petit : la VM est implémentée en moins de 4000 lignes de code
  • Exemplaire : l’implémentation de la VM est commentée avec soin, écrite en C, et pas si difficile à lire. C’est un excellent moyen d’apprendre à construire un langage. La majeure partie de la bibliothèque standard est implémentée en Wren, ce qui permet de voir comment elle est construite, elle aussi.
  • Familier : sa syntaxe permet de se mettre à niveau rapidement. Si tu connais Java ou C++, tu te sentiras tout de suite à l’aise. Il autorise la surcharge de méthodes par arité
  • Une très bonne documentation : les docs du langage et de la bibliothèque standard sont faciles à lire, complètes et pleines d’exemples.
  • Une bibliothèque standard petite mais étonnamment complète.

Fonctionnalités phares

ColdFusion

  • Tout est inclus : énormément de choses sont intégrées : travailler avec des PDF, des ZIP, Excel, XML, JSON, la création d’API, les e-mails, l’intégration S3, plein de bases de données différentes… sans installer de paquets supplémentaires. Idéal pour réduire les incompatibilités de versions
  • Évolutif et sécurisé, parfait pour les logiciels d’entreprise
  • Une programmation simple et intuitive, qui permet aux débutants de faire tourner très vite des pages web complexes pilotées par les données. L’intégration avec DreamWeaver est excellente.

Groovy

  • Syntaxe souple : on peut omettre les points et les parenthèses, ce qui permet de créer de très beaux langages dédiés
  • Métaprogrammation : prend en charge la métaprogrammation à l’exécution comme à la compilation. Par exemple, une annotation @ToString génère une implémentation de ToString à la compilation, et changer la métaclasse d’un objet à l’exécution permet de faire du monkey-patching.
  • Builders : manipuler et construire rapidement du JSON, du XML, du HTML avec un code élégant. Construire des interfaces avec Swing pour un développement d’interface graphique rapide.
  • Traits : les traits de Groovy permettent de composer des comportements et des propriétés en morceaux réutilisables. Semblables aux mixins de Ruby.

Lua

  • Intégrable : conçu pour être facile à intégrer. Il dispose d’une API C relativement simple qui facilite l’intégration. La taille n’est pas un problème : l’interprète de référence complet ne pèse que 247 ko !
  • Extensible : le langage de base est volontairement gardé relativement petit, mais il permet d’étendre facilement le langage. Cela le rend plus simple à apprendre, plus léger à intégrer et très souple
  • Rapide : Lua est souvent l’un des langages dynamiques les plus rapides, surtout lorsqu’on utilise l’interprète LuaJit

VimScript

  • Extensibilité : Vimscript te permet d’étendre ton éditeur avec de nouvelles fonctionnalités
  • Personnalisable : personnalise ton éditeur exactement comme tu l’aimes (les plugins Vimscript sont eux-mêmes principalement écrits en Vimscript)
  • Piloté par les événements : exécution automatique de code en fonction de certains événements ou conditions, comme l’ouverture d’un fichier ou l’enregistrement d’un tampon.
  • Profiter de la puissance de Vim : accès intégré aux fonctionnalités et aux API de Vim, ce qui permet aux scripts de manipuler du texte, des tampons, des fenêtres, et bien plus.

Wren

  • Rapide : d’excellentes performances pour un langage dynamique
  • Intégrable : facile à intégrer dans d’autres logiciels. Le créateur du langage, ancien développeur de jeux, voulait pouvoir ajouter des capacités de script aux jeux. L’API C est assez propre et simple.
  • Concurrent : concurrence et coroutines faciles avec les fibers, une construction très légère (comme les goroutines ou les processus Erlang), qui peuvent communiquer facilement entre elles

Lequel choisir

  1. Si tu veux créer des applications web, ColdFusion et Groovy sont de bons choix
  2. Si tu cherches un langage qui peut être intégré, Lua et Wren sont les options principales, mais Groovy mérite peut-être aussi un coup d’œil
  3. Ces trois mêmes langages, Lua, Wren et Groovy, ont aussi du sens si tu veux écrire des scripts généralistes
  4. Si tu travailles avec la JVM, ColdFusion et Groovy sont des choix naturels
  5. Si la performance compte pour toi, Lua et Wren sont probablement tes meilleures options
  6. Si ton éditeur principal est Vim ou NeoVim, VimScript est évidemment un excellent choix
  7. Si tu t’intéresses à la construction d’un compilateur et d’une machine virtuelle, Wren est parfait pour toi
  8. Si tu as un bagage orienté objet, Wren est probablement le langage le plus facile à apprendre
  9. Si tu as aimé la conception de LISP avec sa structure de données unique et omniprésente, essaie Lua
  10. Si tu veux essayer la programmation pilotée par les événements, jette un œil à VimScript
1er Dec 2023 · Tu l'as trouvé utile ?