Q: Pourquoi elisp n'a-t-il pas d'espaces de noms et comment pourrions-nous les obtenir?
Elisp ne possède pas d'espaces de noms autres que les espaces globaux, ce qui a conduit à la convention de codage consistant à préfixer toutes les fonctions, variables et constantes globales avec un préfixe unique.
Mis à part le facteur gêne, cela me semble également être un problème récurrent vu 1) le nombre sans cesse croissant de bibliothèques et de paquets intéressants, et 2) l’existence continue de fonctions et de variables héritées qui ne respectent pas la convention de préfixe ou sont suffisamment idiosyncratiques pour qu’il n’y ait pas vraiment de bonne option de préfixe à utiliser. Cela signifie également que les tentatives périodiques de rationalisation du code ancien (comme pour le passage de cl
à cl-lib
) représentent une charge de travail non négligeable. (Bien que je sois heureux pour le nettoyage, je verse quand même une larme à chaque fois que je tape quelque chose comme cl-find
).
Je suis allé fouiller pour voir si je pouvais découvrir pourquoi elisp n'avait toujours pas d'espace de noms après quelques décennies d'utilisation, mais j'étais un peu surpris de la modeste récolte. La page wiki sur les espaces de noms est assez courte. Nic Ferrier a un traitement un peu plus long de la question et un fil assez récent sur emacs-devel également. Il existe un ancien fil de débordement de pile datant de 2010 qui traite de la possibilité d'utiliser des macros pour implémenter des espaces de noms. Un autre exemple de l'approche macro peut être trouvé ici . Il y a au moins quelques implémentations ( ici et ici , avec une description de cette dernière ici), mais ils n’ont pas vu beaucoup d’activité depuis quelques années et je n’ai rencontré aucune bibliothèque qui les utilise.
Je suppose que si l'ajout d'espaces de noms était facile, cela serait déjà fait. Alors:
- Quels sont les obstacles techniques à l'ajout d'espaces de nommage à elisp?
- L'ajout d'espaces de noms effacerait-il beaucoup de code existant?
- Est-ce que cette fonctionnalité est quelque chose qui doit être organique pour améliorer (des modifications à l’interprète lui-même), ou pourrait-elle vraiment être construite sur le dessus via des macros?