Eon*_*nil 5 language-features smalltalk objective-c
我不太了解Smalltalk,但我知道一些Objective-C.而且我对Smalltalk很感兴趣.
它们的语法有很多不同,但基本的运行时结构(即功能)非常相似.运行时支持运行时功能.
我认为两种语言在这个意义上非常相似,但Smalltalk上有许多功能在Objective-C运行时没有.例如,thisContext它操纵调用堆栈.或者non-local return解除块执行.该block秒.它只在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中,创建独立应用程序要少得多,而不仅仅是使用一组状态和功能来配置虚拟机,这些状态和功能可以呈现您需要的功能(其中该配置可以像应用程序一样有效地进行快照和分发).
所有这一切都意味着您始终 - 在锁定模式之外 - 拥有一个非常高级别的shell来与虚拟机进行交互.那个shell通常也是你的IDE.您不必使用edit-compile-fix-compile-run,而是在代码在语法合理的情况下立即生成的环境中编写代码.调试器,编辑器,运行时和程序之间的界限很模糊.