为什么命令式语言没有模式匹配?

mol*_*hoj 4 functional-programming scala imperative-programming

因此,函数式语言中的模式匹配非常棒.我想知道为什么大多数命令式语言都没有实现这个功能?根据我的理解,Scala是唯一具有模式匹配的"主流"命令式语言.外壳/开关结构的功能不那么强大.

特别是,我感兴趣的是缺乏模式匹配是因为技术原因还是历史原因?

And*_*erg 5

这主要是历史性的.模式匹配 - 更重要的是,代数数据类型 - 是在1980年左右为功能语言Hope发明的.从那里它迅速成为ML,后来被其他功能语言如Miranda和Haskell采用.主流命令式世界通常需要花费几十年才能获得新的编程语言思想.

特别阻碍采用的一个原因是主流长期以来一直由面向对象的意识形态主导.在那个世界中,任何不被对象和子类型表达的东西都被认为是道德上的"错误".有人可能会说,代数数据类型与此类似.

也许还有一些技术原因使其在函数式语言中更自然:

  • 常规范围规则和变量的细粒度绑定结构是函数式语言的常态,但在主流命令式语言中不常见.

  • 特别是因为模式绑定不可变变量.

  • 类型检查模式匹配依赖于功能类型系统的更加良好的结构和刚性,以及它们与计算逻辑的紧密联系.主流型系统通常远离它.

  • 代数数据类型需要堆分配(除非你想浪费大量空间并禁止递归),并且在没有垃圾收集的情况下会非常不方便.但是,主流语言中存在的GC通常针对重量级对象而非轻量级功能数据进行优化.