为什么Smalltalk支持一流的功能,而不支持其他功能?

MiP*_*MiP 2 oop programming-languages functional-programming smalltalk language-design

回答是JavaScript中的函数式编程语言?说:

函数式编程意味着程序被概念化为函数的评估,而不是控制流.代码是函数的描述,并没有控制流的固有概念.

我已经了解到,当一种语言支持一级函数,并且没有控制流时,从它的设计目标来看,它必须被定义为一种函数式语言.

那么为什么函数式语言Smalltalk不支持其他功能特性,例如不变性,代数数据类型,模式匹配,部分应用?

Lea*_*lia 7

Smalltalk是在虚拟机提供的以下功能之上设计的

  1. 对象分配:#basicNew#basicNew:原语
  2. 自动释放: GC
  3. 邮件发送:send字节码的家庭
  4. 块:[:arg | ...]语法(见下文)
  5. 非本地的回报:[:arg | ... ^result]语法
  6. 后期绑定:方法查找机制
  7. 本机代码编译:解释器(见下文)

现代实施增加了

  1. 块闭包:哪个替换了块
  2. 快速编译: JIT编译器,它取代了解释器
  3. 堆栈展开:#ensure:消息

请注意,其他"功能"(如Smalltalk编译器,调试器或异常机制)不在列表中,因为它们可以从其他人派生(即,它们在用户代码中实现).

这些功能被确定为通用面向对象环境的基本构建块,意味着在裸机上运行(即没有操作系统支持.)

设计师的想法不是功能编程.相反,他们想到的是,每件事物都是一个物体,每一个计算都是一个消息发送统一的比喻.为此,块和非局部返回起到了将"函数"建模为对象的作用,以确保每个已知概念都包含在OO范例中.这并不意味着他们将函数式编程作为目标.它们不包括其他功能(功能与否),因为它们试图识别一组最小的原始元素,这些原始元素将支持没有障碍的通用系统.