- Le cœur de la productivité en programmation réside moins dans le langage lui-même que dans un riche écosystème de bibliothèques
- Des frameworks qui exploitent les fonctionnalités avancées du langage, comme Ruby on Rails, offrent une forte productivité même aux non-spécialistes
- Cependant, en raison des limites structurelles du langage, il est difficile d’implémenter un framework du niveau de Rails en Java ou en C
- La conception d’un langage détermine directement la forme et la complexité des bibliothèques qu’il est possible d’écrire, et c’est là l’objectif fondamental de l’évolution des langages
- Le langage Stanza illustre, sous cet angle, l’importance d’une conception de langage qui permette de créer des bibliothèques puissantes et faciles à utiliser
Relation entre langages de programmation et bibliothèques
- La plupart des langages de programmation partagent des éléments de base similaires, comme les variables, les tableaux, les boucles et les fonctions
- Certains langages proposent des fonctionnalités avancées comme les fonctions de première classe ou les coroutines, mais les non-spécialistes les utilisent rarement
- Pour de nombreux développeurs, ce qui améliore la productivité, ce sont les bibliothèques plus que le langage
- Par exemple, Ruby on Rails permet de construire facilement des applications web adossées à une base de données
- Grâce à Rails, la préférence va davantage au framework qu’au langage Ruby lui-même
Interaction entre Ruby on Rails et les fonctionnalités du langage
- Rails exploite diverses fonctionnalités de Ruby, notamment la métaprogrammation, l’évaluation à l’exécution, les fonctions de première classe et le ramasse-miettes
- Exemple : ActiveRecords utilise la métaprogrammation, tandis que le système de templates utilise l’évaluation à l’exécution
- La gestion des événements est implémentée en transmettant des fonctions de première classe comme callbacks
- En Java ou en C, ces fonctionnalités font défaut, ce qui rend impossible l’implémentation d’un framework du niveau de Rails
- La métaprogrammation de Java n’est pas assez puissante pour implémenter ActiveRecords
- Rails est donc possible grâce à la structure du langage Ruby, et la conception du langage détermine les possibilités offertes aux bibliothèques
La conception du langage détermine la forme des bibliothèques
- Le langage C ne prend en charge la réutilisation qu’au moyen de la déclaration et de l’appel de fonctions ; la plupart des bibliothèques C prennent donc la forme d’ensembles de fonctions
- Ruby prend en charge les fonctions de première classe, ce qui permet d’exprimer de façon concise « l’action à exécuter lors d’un clic sur un bouton »
- En Java, à l’inverse, il faut définir une classe de gestionnaire, ce qui complexifie le code
- Le pouvoir d’expression d’un langage définit directement la structure et l’utilisabilité des bibliothèques
Logiciels interactifs et émergence de frameworks extensibles
- Dans l’informatique par lots des années 1970, des bibliothèques centrées sur les fonctions suffisaient
- Les logiciels interactifs modernes nécessitent des bibliothèques extensibles
- Dans les GUI ou les systèmes orientés événements, il faut une structure du type « exécuter mon code quand l’utilisateur clique »
- Java et C++ prennent en charge l’extension via l’héritage et la redéfinition de méthodes, et cette structure a évolué en framework
Contexte de conception de Stanza et limites des langages
- La motivation de la conception de Stanza est née de la difficulté à écrire en Java une bibliothèque de programmation de jeux facile à utiliser
- En Java, il fallait exprimer la concurrence sous forme de machine à états (state machine)
- Scheme prend en charge les continuations, ce qui permet une implémentation plus intuitive
- Cependant, Scheme ne prend pas en charge la vérification statique des types, ce qui réduit l’efficacité du débogage
- À l’heure actuelle, la plupart des langages ne permettent pas d’étendre leur système de types sous forme de bibliothèque
- Stanza propose un système de types optionnel, un ramasse-miettes et un système objet fondé sur les multiméthodes
- Mais il n’est pas possible d’écrire de zéro un nouveau système objet défini par l’utilisateur
Finalité des langages et pistes de recherche
- L’objectif d’un langage de programmation généraliste est de permettre la création de bibliothèques puissantes et faciles à utiliser
- Plus un langage est puissant, plus l’usage des bibliothèques devient concis
- Lorsqu’un code utilise une bibliothèque bien conçue, il possède un naturel qui donne l’impression de lire une phrase adressée à un collègue
- Racket, Shen et les recherches sur les protocoles méta-objets explorent des systèmes de types et d’objets extensibles
- En fin de compte, les langages se distinguent par « quelles bibliothèques ils permettent d’utiliser, et lesquelles ils ne permettent pas »
- Derrière les bibliothèques élégantes se trouvent des décennies de recherche et d’efforts de conception sur les langages
Aucun commentaire pour le moment.