我不太了解 Smalltalk,但我了解一些 Objective-C。我对 Smalltalk 很感兴趣。
它们的语法有很大不同,但基本的运行时结构(即功能)非常相似。并且运行时功能由运行时支持。
我认为两种语言在这个意义上非常相似,但是 Smalltalk 上有许多 Objective-C 运行时所没有的功能。举个例子,thisContext
操纵调用堆栈。或者non-local return
解除块执行。这block
s。它只在 Smalltalk 上实现,无论如何现在它也在 Objective-C 上实现了。
因为我不是 Smalltalk 方面的专家,所以我不知道这类功能。特别是对于高级用户。哪些功能仅在 Smalltalk 中可用?本质上,我想了解 Smalltalk 的高级功能。所以已经在 Objective-C 上实现的功能就可以了,比如block
.
虽然我在 Objective-C 方面有相当丰富的经验,但我并不像许多人那样精通 Smalltalk,但我已经做了一些。
由于多种原因,很难真正列举出哪种语言具有哪些功能的列表。
首先,什么是“语言特征”?在 Objective-C 中,甚至块实际上也是与 Foundation API 以及诸如for(... in ...)
语法要求符合相对高层的协议。您真的可以在不考虑最重要的 API 特性的情况下再谈论一种语言吗? Smalltalk 也是如此。
其次,两者在消息传递的工作方式和继承的实现方式方面非常相似,但在代码从头脑中的想法到在计算机上运行的方式方面也非常不同。概念上的不同之处在于,它使得两者之间的逐个功能比较变得困难。
两者之间的主要区别实际上取决于它们构建的基础。 Objective-C 构建在 C 之上,因此继承了 C 的所有优点(速度、可移植性、灵活性等)和缺点(有效的宏汇编器、愚蠢的调用 ABI、缺乏任何类型的安全网) &编译为金属的语言。虽然 Objective-C 分层在一堆相对高级的 OO 功能(编译时和运行时)上,但由于 C 的本质,存在限制。
另一方面,Smalltalk 采用更加自上而下的纯 OO 模型;一切事物,小到一点的表示,都是一个对象。甚至调用堆栈、异常、接口……一切……都是一个对象。 Smalltalk 运行在虚拟机上,该虚拟机本身通常是一个相对较小的本机字节代码解释器,它消耗实现更高级别功能的smalltalk 字节代码流。在smalltalk中,更多的是关于使用一组状态和功能配置虚拟机来呈现您需要的功能(其中该配置可以像应用程序一样有效地进行快照和分发),而不是创建独立的应用程序。
所有这一切意味着您始终(在锁定模式之外)拥有一个非常高级的 shell 来与虚拟机交互。该 shell 通常也是您的 IDE。通常,您不是在“编辑-编译-修复-编译-运行”的环境中编写代码,只要代码在语法上正确,代码就会立即生效。调试器、编辑器、运行时和程序之间的界限是模糊的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)