16
为什么用户定义的运算符不更常见?
我从功能语言中错过的一个特性是,运算符只是函数,因此添加自定义运算符通常与添加函数一样简单。许多过程语言都允许运算符重载,因此从某种意义上说,运算符仍然是函数(在D中,该运算符在模板参数中作为字符串传递,这是非常正确的)。 似乎在允许运算符重载的地方,添加额外的自定义运算符通常很简单。我找到了这篇博客文章,该文章认为由于优先级规则,自定义运算符不能很好地使用后缀表示法,但是作者为该问题提供了几种解决方案。 我环顾四周,找不到支持该语言中的自定义运算符的任何过程语言。有一些技巧(例如C ++中的宏),但这与语言支持几乎不一样。 由于此功能实施起来很简单,为什么它不更常见? 我知道这可能会导致某些丑陋的代码,但是这并没有阻止语言设计人员过去添加易于使用的有用功能(宏,三元运算符,不安全的指针)。 实际用例: 实现缺少的运算符(例如,Lua没有按位运算符) 模拟D ~(数组串联) DSL 使用|如UNIX管道风格的语法糖(使用协程/发电机) 我对确实允许自定义运算符的语言也很感兴趣,但是我对为什么它被排除在外更感兴趣。我曾考虑过分叉一种脚本语言来添加用户定义的运算符,但是当我意识到自己没在任何地方看到它时就停下来了,所以可能有充分的理由为什么比我更聪明的语言设计师不允许这样做。