为什么 Smalltalk 支持 first class 函数,而不支持其他函数特性?
Why does Smalltalk support first class functions, but not other functional features?
一个answer to Is Javascript a Functional Programming Language?说:
Functional programming means that the program is conceptualized as a evaluation of a function, rather than a control flow. The code is a description of functions, and has no inherent concept of a control flow.
我了解到,当一种语言支持第一个 class 函数并且没有控制流时,从它的设计 objective 来看,它必须被定义为函数式语言。
那么为什么函数式语言 Smalltalk 不支持其他函数式特性,例如不变性、代数数据类型、模式匹配、部分应用?
Smalltalk 是在虚拟机提供的以下功能之上设计的
- 对象分配:
#basicNew
和 #basicNew:
原语
- 自动释放: GC
- 消息发送:
send
字节码家族
- 块:
[:arg | ...]
语法(见下文)
- 非本地 returns:
[:arg | ... ^result]
语法
- 后期绑定:方法查找机制
- 本机代码编译:解释器(见下文)
添加了现代实现
- 块闭包:替换了块
- 快速编译: JIT 编译器,它取代了解释器
- 堆栈展开:
#ensure:
消息
请注意,其他 "features" 如 Smalltalk 编译器、调试器或异常机制不在列表中,因为它们可以从其他派生(即,它们在用户代码中实现)。
这些功能被确定为通用面向对象环境的基本构建块,意味着 运行 在裸机上(即没有操作系统支持。)
设计者的想法不是函数式编程。相反,他们想到了 一切都是对象,每个计算都是一个消息发送 统一的隐喻。为此,块和非本地 returns 也扮演了将 "functions" 建模为对象的角色,以确保每个已知概念都包含在 OO 范例中。这并不意味着他们将函数式编程作为目标。他们没有包括其他 功能 (功能性或非功能性),因为他们试图确定一组最小的原始元素,这些元素将无障碍地支持通用系统。
一个answer to Is Javascript a Functional Programming Language?说:
Functional programming means that the program is conceptualized as a evaluation of a function, rather than a control flow. The code is a description of functions, and has no inherent concept of a control flow.
我了解到,当一种语言支持第一个 class 函数并且没有控制流时,从它的设计 objective 来看,它必须被定义为函数式语言。
那么为什么函数式语言 Smalltalk 不支持其他函数式特性,例如不变性、代数数据类型、模式匹配、部分应用?
Smalltalk 是在虚拟机提供的以下功能之上设计的
- 对象分配:
#basicNew
和#basicNew:
原语 - 自动释放: GC
- 消息发送:
send
字节码家族 - 块:
[:arg | ...]
语法(见下文) - 非本地 returns:
[:arg | ... ^result]
语法 - 后期绑定:方法查找机制
- 本机代码编译:解释器(见下文)
添加了现代实现
- 块闭包:替换了块
- 快速编译: JIT 编译器,它取代了解释器
- 堆栈展开:
#ensure:
消息
请注意,其他 "features" 如 Smalltalk 编译器、调试器或异常机制不在列表中,因为它们可以从其他派生(即,它们在用户代码中实现)。
这些功能被确定为通用面向对象环境的基本构建块,意味着 运行 在裸机上(即没有操作系统支持。)
设计者的想法不是函数式编程。相反,他们想到了 一切都是对象,每个计算都是一个消息发送 统一的隐喻。为此,块和非本地 returns 也扮演了将 "functions" 建模为对象的角色,以确保每个已知概念都包含在 OO 范例中。这并不意味着他们将函数式编程作为目标。他们没有包括其他 功能 (功能性或非功能性),因为他们试图确定一组最小的原始元素,这些元素将无障碍地支持通用系统。