为什么Objective-C在苹果社区以外不受欢迎?

我知道苹果社区(包括Mac和iPhone开发人员)主要使用Objective-C开发语言。 但似乎没有多less人在Apple社区之外使用Objective-C,比如Windows或Linux世界。

Objective-C在苹果社区之外不受欢迎的原因有哪些?

这是一个复杂的问题。 但总之, 我认为答案很可能在于操作系统的时代和根源。

  • UNIX C,就是这样。
  • Linux被设想为Unix的一个直接克隆,(好吧,这个稍微不准确,但是就这个讨论而言足够接近),因此,它或多或less都是用C语言写的。
  • Windows是一个老的操作系统; 还有一个是通过黑客入侵Windows 3.1的方式构build的。 C ++非常受欢迎,在.NET中C#。

    这个新的stream入当然是基于微软在这个平台上的任何议程。

  • Mac OS X; 另一方面,它是一个(相对)年轻的操作系统,它的新部件(虽然还很老,从NeXTinheritance而来,都是基于Objective-C的),因为“嘿!为什么不呢”。

    由于向后兼容性不在Mac OS X 10.0的优先级列表中; 基于C / C ++的工具箱和Carbon得到了棒子的短小,整个操作系统或多或less都是作为NeXTStep的reskinned版本。

Obj-C的问题在于,语言的力量主要来源于庞大的框架,整合到系统中的高度集成等等。 如果没有一个干净的向后兼容的rest,就不可能有这样一个好的机会,因此,在任何一个不敢做这个的平台上,它永远都不会有真正的机会。 苹果以一个小的(当时)和忠诚的用户基础,敢于做到这一点,并击中了黄金。

微软现在正在尝试,但在我的愚见,失败。 (“失败?!.NET!?怎么回事!”:在8年左右的时间里做了4次重大的修改,它们的成长要比成熟更为成熟;如果能够扭转的话,这可能是一件好事。

编辑:有一些项目试图将OpenStep移植到Linux上,但它们有点笨重,很难使用; 还有一些小问题领域的NS / OS-like项目比较小,但是工作起来很麻烦。

我最近站在一个阅读编程大师的书店里,编程语言的创造者们谈论他们的创作。 有一章关于Objective-C,其中Tom Love(Objective-C的创build者之一,以及Brad Cox)被问及为什么C ++已经走到了尽头,而Objective-C却没有:

你为什么认为C ++比Objective-C更频繁?

汤姆:它背后有AT&T的名字。

只是?

汤姆:我想是的。

你觉得Objective-C今天怎么样?

汤姆:它依然存在。 那个怎么样?

思考这个问题的另一种方法可能是:为什么C ++而不是Objective-C成为“面向对象的C”?

我在1991年学习了C ++,记得C ++看起来像是热门的东西,而Objective-C是这种奇怪的小语言,除了NeXT以外,没有人愿意使用它。 我一直试图记住为什么,我认为它归结为4件事(5,如果你包含AT + T的C + +):

  1. 特性:即使如此,C ++也拥有比Objective-C更丰富的function集。
  2. 语法:与C ++相比,Objective-C的语法是一个比C更大的变化。
  3. 性能:Stroustrup专注于使C ++特性易于映射到C,因此(在理论上)使用C ++没有性能损失。 通过明智地使用“inline”关键字,您甚至可以使用C ++获得比使用C更好的性能。即使现在,我也没有办法在性能至关重要的项目中使用Objective-C。
  4. 风格:相对较强,静态打字是时尚(出于很好的理由)。

与Objective-C相比,C ++在90年代早期为您提供了更多的function,而且性能更低,语法比Objective-C更时髦更熟悉。

Objective-C只不过是在标准C之上的消息传递的一层薄薄的一层(有点厚于2.0 )的语法糖。 即使是最基本的面向对象也是由运行时库提供的,这个库是专有的很长一段时间。 惯性是语言使用中的一个重要因素。

它特别在graphics用户界面上发光,但支持它的唯一工具包是苹果公司的和最不为人知的和追赶式的GNUStep

虽然Objective-CGUI之外还有一些价值,我认为人们会使用扩展名被导入到C ,即使在系统代码中,也没有什么理由select它来替代,当你的系统很less是为了与它一起工作。

在我的头顶,我相信C ++比Objective-C更早,不仅仅因为这个原因,它有更大的用户群。 OC可能到来的地方,C ++已经在那里:)

另外,C ++还有更多的function。 许多人对许多function印象深刻。 它有更多的研究和发展涌入…等等。 本质上,势头。