Une des caractéristiques des langages fonctionnels qui me manque est l'idée que les opérateurs ne sont que des fonctions. L'ajout d'un opérateur personnalisé est souvent aussi simple que l'ajout d'une fonction. De nombreux langages procéduraux autorisent les surcharges d'opérateurs. Ainsi, dans un certain sens, les opérateurs sont toujours des fonctions (c'est très vrai dans D où l'opérateur est passé en tant que chaîne dans un paramètre de modèle).
Il semble que, lorsque la surcharge d'opérateurs est autorisée, il est souvent trivial d'ajouter des opérateurs personnalisés supplémentaires. J'ai trouvé cet article de blog qui explique que les opérateurs personnalisés ne fonctionnent pas bien avec la notation infix en raison des règles de priorité, mais l'auteur propose plusieurs solutions à ce problème.
J'ai regardé autour de moi et je n'ai trouvé aucun langage de procédure prenant en charge des opérateurs personnalisés dans ce langage. Il y a des hacks (comme les macros en C ++), mais ce n'est pas la même chose que le support du langage.
Puisque cette fonctionnalité est assez simple à implémenter, pourquoi n'est-elle pas plus courante?
Je comprends que cela peut conduire à un code laid, mais cela n’a pas empêché les concepteurs de langages d’ajouter des fonctionnalités utiles qui peuvent être facilement utilisées (macros, opérateur ternaire, pointeurs non sécurisés).
Cas d'utilisation réels:
- Implémente les opérateurs manquants (par exemple, Lua n'a pas d'opérateurs au niveau des bits)
- Mimic D's
~
(concaténation de tableaux) - DSL
- Utiliser
|
comme sucre de syntaxe de style de tuyau Unix (à l'aide de coroutines / générateurs)
Je suis aussi intéressé par les langues qui font permettre aux opérateurs personnalisés, mais je suis plus intéressé pourquoi il a été exclu. J'ai envisagé de forger un langage de script pour ajouter des opérateurs définis par l'utilisateur, mais je me suis arrêté quand je me suis rendu compte que je ne l'avais vu nulle part. Il y a donc probablement une bonne raison pour laquelle les concepteurs de langage plus intelligents que moi ne l'ont pas permis.