1

一种answerIs Javascript a Functional Programming Language?表示:为什么Smalltalk支持一流功能,但不支持其他功能?

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

我已经了解到,当语言支持第一类功能并且没有控制流程时,它的设计目标必须定义为功能语言。那么为什么Smalltalk是一种功能语言,不支持其他功能特性,如不可变性,代数数据类型,模式匹配,部分应用等?

+3

我认为你的问题存在问题。就我所知,Smalltalk从来不是一种功能性语言。 Smalltalk是面向对象的,实际上是第一个面向对象的语言。现在,Smalltalk的设计师决定,词法关闭是一条路。 – Uko

回答

6

Smalltalk的设计上由虚拟机提供

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

增加了现代实现

  • 块瓶盖:哪个替换块
  • 快速编译: JIT编译器,它取代了解释
  • 堆栈展开:#ensure:消息
  • 请注意,Smalltalk编译器,调试器或Exception机制等其他“特性”不在列表中,因为它们可以从其他派生(即它们在用户代码中实现)。

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

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