Question

Une fonctionnalité que je manque de langages fonctionnels est l'idée que les opérateurs ne sont que des fonctions, donc l'ajout d'un opérateur personnalisé est souvent aussi simple que d'ajouter une fonction. De nombreuses langues procédurales permettent des surcharges de l'opérateur, donc dans un certain sens, les opérateurs sont toujours des fonctions (cela est très vrai où l'opérateur est passé sous forme de chaîne dans un paramètre de modèle).

Il semble que lorsque la surcharge de l'opérateur est autorisée, il est souvent trivial d'ajouter des opérateurs supplémentaires et personnalisés. j'ai trouvé Ce billet de blog, qui soutient que les opérateurs personnalisés ne fonctionnent pas bien avec la notation de l'infixe en raison des règles de priorité, mais l'auteur donne plusieurs solutions à ce problème.

J'ai regardé autour de moi et je n'ai trouvé aucune langue procédurale qui prend en charge les opérateurs personnalisés dans la langue. Il y a des hacks (tels que des macros en C ++), mais ce n'est pas la même chose que le support linguistique.

Étant donné que cette fonctionnalité est assez triviale à mettre en œuvre, 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 langues dans le passé d'ajouter des fonctionnalités utiles qui peuvent être facilement abusées (macros, opérateur ternaire, pointeurs dangereux).

Cas d'utilisation réels:

  • Implémenter les opérateurs manquants (par exemple, LUA n'a pas d'opérateurs bitwise)
  • Mimic D's ~ (Concaténation du tableau)
  • DSS
  • Utilisation | comme sucre de syntaxe de style tuyau Unix (utilisant des coroutines / générateurs)

Je suis également intéressé par les langues qui fais Autoriser les opérateurs personnalisés, mais je suis plus intéressé par Pourquoi il a été exclu. J'ai pensé à fournir un langage de script pour ajouter des opérateurs définis par l'utilisateur, mais je me suis arrêté quand j'ai réalisé que je ne l'ai vu nulle part, donc il y a probablement une bonne raison pour laquelle les concepteurs de langues plus intelligents que moi ne l'ont pas autorisé.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top