Objective-C具有良好的面向对象,简单,优雅和(作为C的超集)低级功能的特点。似乎是很多人在Go中寻找并尝试找到的C ++的简单,现代的替代品。但是它仅用于可可和NextSTEP后环境,即使在这种情况下,由于历史原因,它也被视为负担,而不是最佳选择。
为什么它没有被更广泛地使用?有什么问题?
Objective-C具有良好的面向对象,简单,优雅和(作为C的超集)低级功能的特点。似乎是很多人在Go中寻找并尝试找到的C ++的简单,现代的替代品。但是它仅用于可可和NextSTEP后环境,即使在这种情况下,由于历史原因,它也被视为负担,而不是最佳选择。
为什么它没有被更广泛地使用?有什么问题?
Answers:
IMO,Objective-C的问题并不仅是巨大的缺点,还包括次要的缺点(尤其是早期的缺点)和缺乏明显的优势。
Objective-C是C的纯超集,因此C 代码可以轻松过渡到Objective-C。心态要使用的Objective-C,然而,从C心态不同一个不少。从C到Objective-C的过渡对于代码来说很容易,但是对许多程序员而言却根本不容易。AC程序员不能轻松地在Objective-C中选择一些新的便利功能并几乎立即获得更高的生产率-他需要学习很多新的“东西”,才能完全掌握。
C ++使某些代码的转换更加困难,但是对于大多数程序员而言,转换却容易得多。习惯于处理代码的每个细节的C程序员仍然可以在C ++中达到他们想要的程度。C ++还使使用某些新功能(例如,添加ctor来自动初始化结构的成员)变得容易,而无需真正改变思维方式。许多面向对象的纯粹主义者推动了思维方式的根本改变,但是许多C程序员却在没有做任何事情的情况下转而使用C ++(至少从现在开始,而且常常是从事物的外观上)。
对于大多数C程序员来说,C ++ 看起来也更为熟悉。它增加了一些新的关键字,但是(尤其是在早期)代码仍然看起来相当熟悉。尽管它具有“纯粹的超集”状态,但是大多数Objective-C代码对于大多数C程序员而言似乎都是陌生的。就C语言中的工作方式而言,很多C ++也很容易解释和理解。切换到Objective-C的地方很多,您所能说的就是“只是相信我,而忘记您认为的一切。 ”
Objective-C中的许多设计决策也使其(比)C ++慢一些,特别是在处理器速度慢,内存有限等相对较旧的机器上。无论对与错,它在很大程度上也被视为单一公司的产品, C ++可供所有人和所有人免费使用。
所有这些导致C ++在早期就被足够快地采用,以至于它相当快地达到了“临界质量”,因此(除其他事项外)它已经成为许多项目的显而易见的选择,因为它已经是广泛使用的,众所周知的数量。
Objective-C从未达到这一点。实际上,当苹果公司通过将它几乎逼迫任何想要为其系统开发的人来复兴它时,它正逐渐淡出人们的视线。苹果的市场份额还不足以使其真正达到临界数量,只是更大的利基市场。仅在苹果这样做的地方/因为它是“默认”选择。
我还要补充一点,至少在我看来,Objective-C的类似于Smalltalk的对象模型意味着,实际上,它比C ++更直接成为Java的竞争对手。是的,它仍然具有C的基础,是的,您仍然可以在不使用单独的语言的情况下编写低级代码-但是纯C和真正的Objective-C的差异足够大,以至于它像单一语言而不是两种完全不同的语言,碰巧两者都是由单个编译器处理的(尽管这很方便,两者无需JNI之类的东西就可以相互通信)。
好吧,基本上,从现在开始,Apple便成为了Objective-C的推动力:
就目前而言,Apple可以完全控制Objective-C并根据其需求来驱动该语言,而在这个星球上,没有任何组织对在非Apple设备上运行Objective-C感兴趣,这足以提供一个最初的标准库和工具包,甚至可以与.NET / Mono,C ++或Java所呈现的生态系统相媲美。