一种answer到Is Javascript a Functional Programming Language?表示:为什么Smalltalk支持一流功能,但不支持其他功能?
函数编程意味着程序被概念化为一功能的评价,而不是控制流程。代码是功能的描述,并没有控制流的固有概念。
我已经了解到,当语言支持第一类功能并且没有控制流程时,它的设计目标必须定义为功能语言。那么为什么Smalltalk是一种功能语言,不支持其他功能特性,如不可变性,代数数据类型,模式匹配,部分应用等?
一种answer到Is Javascript a Functional Programming Language?表示:为什么Smalltalk支持一流功能,但不支持其他功能?
函数编程意味着程序被概念化为一功能的评价,而不是控制流程。代码是功能的描述,并没有控制流的固有概念。
我已经了解到,当语言支持第一类功能并且没有控制流程时,它的设计目标必须定义为功能语言。那么为什么Smalltalk是一种功能语言,不支持其他功能特性,如不可变性,代数数据类型,模式匹配,部分应用等?
Smalltalk的设计上由虚拟机提供
#basicNew
和#basicNew:
元send
字节代码系列[:arg | ...]
语法(见下文)[:arg | ... ^result]
语法增加了现代实现
#ensure:
消息请注意,Smalltalk编译器,调试器或Exception机制等其他“特性”不在列表中,因为它们可以从其他派生(即它们在用户代码中实现)。
这些功能被确定为一个通用的面向对象环境的基本构建模块,用于在裸机上运行。没有操作系统的支持。)
设计师想到的不是函数式编程。相反,他们想到的每一件事都是一个对象,每一次计算都是一个发送消息的统一隐喻。为此,块和非本地回报起到了将“功能”建模为对象的作用,以确保每个已知概念都包含在面向对象范例中。这并不意味着他们将功能性编程作为目标。他们没有包括其他功能(功能与否),因为他们试图确定一组最基本的原始元素,这些原始元素可以支持通用系统而没有障碍。
我认为你的问题存在问题。就我所知,Smalltalk从来不是一种功能性语言。 Smalltalk是面向对象的,实际上是第一个面向对象的语言。现在,Smalltalk的设计师决定,词法关闭是一条路。 – Uko