Una característica que extraño de los lenguajes funcionales es la idea de que los operadores son solo funciones, por lo que agregar un operador personalizado suele ser tan simple como agregar una función. Muchos lenguajes de procedimiento permiten sobrecargas de operadores, por lo que, en cierto sentido, los operadores siguen siendo funciones (esto es muy cierto en D, donde el operador se pasa como una cadena en un parámetro de plantilla).
Parece que donde se permite la sobrecarga del operador, a menudo es trivial agregar operadores personalizados adicionales. Encontré esta publicación de blog , que argumenta que los operadores personalizados no funcionan bien con la notación infija debido a las reglas de precedencia, pero el autor da varias soluciones a este problema.
Miré a mi alrededor y no pude encontrar ningún lenguaje de procedimiento que admitiera operadores personalizados en el idioma. Hay hacks (como macros en C ++), pero eso no es lo mismo que el soporte de idiomas.
Dado que esta característica es bastante trivial de implementar, ¿por qué no es más común?
Entiendo que puede conducir a un código feo, pero eso no ha impedido que los diseñadores de idiomas agreguen características útiles que pueden ser fácilmente abusadas (macros, operador ternario, punteros inseguros).
Casos de uso reales:
- Implementar operadores faltantes (por ejemplo, Lua no tiene operadores bit a bit)
- Mimic D's
~
(concatenación de matriz) - DSL
- Úselo
|
como azúcar de sintaxis estilo tubería Unix (usando corutinas / generadores)
También estoy interesado en lenguajes que hacen que los operadores personalizados, pero estoy más interesado en por qué se ha excluido. Pensé en bifurcar un lenguaje de secuencias de comandos para agregar operadores definidos por el usuario, pero me detuve cuando me di cuenta de que no lo había visto en ningún lado, por lo que probablemente haya una buena razón por la que los diseñadores de idiomas más inteligentes que yo no lo han permitido.