gpt4 book ai didi

objective-c - Objective-C 缺少 Smalltalk 运行时特性?

转载 作者:太空狗 更新时间:2023-10-30 03:50:13 25 4
gpt4 key购买 nike

我不太了解 Smalltalk,但我了解一些 Objective-C。我对 Smalltalk 很感兴趣。

它们的语法有很大不同,但基本的运行时结构(即功能)非常相似。运行时功能由运行时支持。

我认为两种语言在这个意义上非常相似,但 Smalltalk 有许多 Objective-C 运行时所没有的特性。例如,操作调用堆栈的 thisContext。或者展开 block 执行的非本地返回 block 。它只是在 Smalltalk 上,无论如何现在它也在 Objective-C 上实现了。

因为我不是 Smalltalk 专家,所以我不知道那种功能。特别是对于高级用户。哪些特性只在 Smalltalk 中可用?本质上,我想了解 Smalltalk 中的高级功能。所以像 block 这样已经在 Objective-C 上实现的特性是可以的。

最佳答案

虽然我在 Objective-C 方面相当有经验,但我不像许多人那样精通 Smalltalk,但我已经做了一些。

由于几个原因,很难真正列举出哪种语言具有哪些特性的列表。

首先,什么是“语言特性”?在 Objective-C 中,甚至 block 实际上是与 Foundation API 结合构建的,而诸如 for(... in ...) 语法之类的东西需要符合相对较高级别的协议(protocol)。如果不考虑最重要的 API 的特性,你真的能再谈论一门语言吗? Smalltalk 也是如此。

其次,两者在消息传递的工作方式和继承的实现方式方面非常相似,但在代码从您头脑中的想法到在您的机器上运行的方式上也有很大不同。概念上的不同使得两者之间的逐个特征比较变得困难。

两者之间的主要区别实际上归结为它们构建的基础。 Objective-C 建立在 C 之上,因此继承了 C 的所有优点(速度、可移植性、灵 active 等)和缺点(有效的宏汇编程序、愚蠢的调用 ABI、缺乏任何类型的安全网)和编译到金属的语言。虽然 Objective-C 在编译时和运行时等一系列相对高级的 OO 功能上分层,但由于 C 的性质,存在限制。

另一方面,Smalltalk 采用的是自上而下的纯 OO 模型;一切,直到位的表示,都是一个对象。甚至调用堆栈、异常、接口(interface)……一切……都是一个对象。 Smalltalk 在虚拟机上运行,​​虚拟机本身通常是一个相对较小的 native 字节码解释器,它使用实现更高级别功能的 smalltalk 字节码流。在 smalltalk 中,创建一个独立的应用程序要少得多,而更多的是使用一组状态和功能来配置虚拟机,以呈现您需要的功能(其中该配置可以像应用程序一样有效地快照和分发)。

所有这一切意味着您始终——在锁定模式之外——有一个非常高级的 shell 来与虚拟机交互。该 shell 通常也是您的 IDE。与编辑-编译-修复-编译-运行不同,您通常是在代码在语法合理后立即生效的环境中编写代码。调试器、编辑器、运行时和程序之间的界限是模糊的。

关于objective-c - Objective-C 缺少 Smalltalk 运行时特性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7509449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com