为什么使用Smalltalk

是什么让Smalltalk成为一种特殊而独特的编程语言?

首先,它非常小巧简单。完整的语法适用于明信片!

aaa

其次,它纯粹是面向对象的,反映了艾伦凯关于面向对象的卓越概念,我认为它是规范的。艾伦凯说,当他构思OOP时,他没有考虑C ++。

艾伦凯说:

Smalltalk是一个软件互联网
与ARPA互联网理念并行:通过虚拟网络普遍连接的虚拟计算机
只有对象(对象由对象构成,网络由对象构成等)
(没有应用程序,没有文件系统,只是虚拟计算机的协同作用)
语言是对象之间消息的语言
有些对象充当了组合对象的地方
物体可以在一个地方被观看并且彼此整合

这个想法也直接激发了Erlang语言的设计,根据艾伦凯的观点,这种语言可以被正确地称为“面向对象”。

一个对象非常像一台拥有自己的私有内部状态和通信协议的计算机。通过发送消息与对象通信。你要求一个对象通过发送一条消息来为你做一些事情,它就像网络中的真实计算机服务器那样响应。就像在一台真正的电脑服务器上一样,你并不知道它的内部状态。

一个对象不是一个抽象数据类型

…其中Abstract Data Type是一种数据结构类型的高价值术语。

像Java和C ++这样的OOP语言是Alan Kay的OOP概念的混蛋。它们使OOP比它更难,而且对许多人来说,它是一个无尽的混乱之源。正如Robert C. Martin在“OOP vs FP”中所说的那样,对象是功能包,而不是数据包。对象不是数据结构。

继承在Smalltalk中不是强制性的。您可以根据自己的编程解决方案使用合成或聚合。对遗传“缺陷”的任何歇斯底里就是:歇斯底里……和无知。作为一种工具,继承在许多情况下当然是适用和适当的,例如GUI编程。特别是如果你使用继承作为专门化的手段而不是代码重用。

第三,它具有支持实时编码的内置IDE,这有助于使Smalltalk成为世界上最高效的编程语言。借助实时编码,您可以在运行时轻松更改程序代码!

第四,它是完全反思的,具有很好的元编程功能。阅读“Lisp,Smalltalk和对称的力量”。

Smalltalk程序能够在运行时检查自己的结构和计算。这赋予了巨大的权力,允许程序用新的类和方法扩展自己,或者询问“谁把这个消息发给我?”

计算反射用于实现处理错误的有效方法。当一个对象被发送了一个它并没有实现的消息时,它会收到一个doesNotUnderstand:消息,以及原始消息的一个具体化。程序可以用doNotUnderstand:消息做很多事情,包括用新功能扩展自己!

第五,它是基于图像的,它赋予许多独特的优点,例如可移植性和持久执行上下文。 Smalltalk图像允许您随时保存程序的执行状态,并在稍后从停止的地方继续执行!这与VMware和VirtualBox等操作系统虚拟化软件中的系统镜像非常相似。这也与Web浏览器的DOM或Excel电子表格的工作方式类似。

第六,它完全支持lambdas,这也使得Smalltalk在功能编程方面非常出色!

单独来说,这些东西并不是独一无二的,但它是协同的整体,使得Smalltalk成为历史上最卓越的编程语言之一。

谁使用Smalltalk?

你会感到惊讶。

Cincom,Instantiations和GemTalk是Smalltalk的主要供应商。他们之间有许多知名企业用户:

仅举几个。在我的国家,Smalltalk被加拿大国家密码学机构通信安全机构(CSE)使用。

Pharo是二十一世纪现代化的Smalltalk,也有着名的用户,例如:

Smalltalk的多功能性?

Smalltalk是无尽的多才多艺:

而我只是几乎没有抓到表面!

结论

那么,什么阻止你回来?给Smalltalk一个尝试。它可能永远改变你的编程观点。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s