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

时间:2017-04-01 13:49:59

标签: oop functional-programming programming-languages smalltalk language-design

answerIs Javascript a Functional Programming Language?说:

  

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

我已经了解到,当一种语言支持第一类功能,并且没有控制流程时,从其设计目标来看,它必须被定义为一种功能语言。

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

1 个答案:

答案 0 :(得分:6)

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

  1. 对象分配#basicNew#basicNew:原语
  2. 自动释放: GC
  3. 消息发送: send字节码系列
  4. 阻止 [:arg | ...]语法(见下文)
  5. 非本地退货: [:arg | ... ^result]语法
  6. 后期绑定:方法查找机制
  7. 本机代码编译:解释器(见下文)
  8. 添加了现代实施

    1. 阻止关闭:替换了阻止
    2. 快速编译: JIT编译器,它取代了解释器
    3. 堆栈展开: #ensure:消息
    4. 请注意其他"功能"例如Smalltalk编译器,调试器或异常机制不在列表中,因为它们可以从其他人派生(即,它们在用户代码中实现。)

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

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