为什么Objective-C在Apple社区之外不受欢迎?

时间:2010-04-06 09:24:17

标签: objective-c programming-languages

我知道Apple社区 - 包括Mac和iPhone开发人员 - 主要使用Objective-C作为他们的开发语言。但似乎没有多少人在Apple社区之外使用Objective-C,例如在Windows或Linux世界中。

Objective-C在Apple社区之外不是特别受欢迎的原因是什么?

5 个答案:

答案 0 :(得分:22)

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

我在1991年学过C ++,并且记得C ++看起来很热门,而Objective-C就是这种奇怪的小语言,没有人(NeXT除外)想要使用它。我一直在努力记住原因,我认为它归结为4件事(5,如果你包含C&C背后的C ++):

  1. 特点:即使这样,C ++也有比Objective-C更丰富的功能。
  2. 语法:Objective-C的语法是一个比C语言更大的变化。
  3. 性能:Stroustrup专注于使C ++特性易于映射到C,因此(理论上!)使用C ++没有性能损失。通过明智地使用“inline”关键字,您甚至可以使用C ++获得比使用C更好的性能。即使是现在,我也无法在性能至关重要的项目中使用Objective-C。
  4. 风格:相对强大,静态打字是时尚(有充分理由)。
  5. 与Objective-C相比,C ++在90年代早期为您提供了更多的功能,而且性能损失更少,其语法既时尚又比Objective-C更熟悉。

答案 1 :(得分:20)

这是一个复杂的问题;但总之;我认为最有可能的答案在于操作系统的时代及其根源。

  • UNIX C,所以就是这样。
  • Linux被设想为Unix的直接克隆,(很好,这稍微不准确,但足够接近这个讨论)因此,它或多或少用C语言编写。
  • Windows是旧的操作系统;并且通过堆叠黑客攻击构建的一个黑客一直回到Windows 3.1。 C ++非常受欢迎,在.NET中,C#。

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

  • Mac OS X;另一方面,它是一个(相对)年轻的操作系统,它的新部分(虽然还很老,继承自NeXT和诸如此类)都是基于Objective-C的,因为,“嘿!为什么不呢?”。 / p>

    由于向后兼容性不属于Mac OS X 10.0的优先级列表;基于C / C ++的Toolbox和Carbon得到了简单的结果,整个操作系统或多或少地作为NeXTStep的重新版本制作。

Obj-C的问题在于语言的强大功能主要来自相当大的框架,通常高度集成到系统中,等等。几乎不可能得到一个好的jive,就像没有从后向兼容性的干净中断那样,因此,在任何不敢做到这一点的平台上,它永远不会真正有机会。苹果公司虽然拥有一小部分(当时)和忠诚的用户群,却敢于做到这一点,并且打成了金牌。

微软现在正在努力,但在我的拙见中,却失败了。 (“失败?!.NET !?你怎么敢!?”:在大约8年内进行了4次重大修改,他们的成长比成熟更多;如果他们可以扭转局面,这可能是一件好事。)

编辑:有些项目试图将OpenStep移植到Linux,但它们有点笨拙且难以使用;还有一些较小的问题领域的NS / OS喜欢的项目,但这是一项艰巨的工作。

答案 2 :(得分:17)

我最近站在一家书店阅读Masterminds of Programming,其中编程语言的创造者谈论他们的创作。有一篇关于Objective-C的章节,其中Tom Love(Objective-C的创建者之一,以及Brad Cox)被问到为什么C ++到目前为止,而Objective-C却没有:

为什么您认为C ++的使用频率高于Objective-C?

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

就是这样?

汤姆:我是这么认为的。

您对今天的Objective-C有什么看法?

汤姆:它仍然存在。怎么样?

答案 3 :(得分:12)

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

它特别关注 GUI ,但是支持它的唯一工具包是 Apple ,而且大多数是未知和追赶 GNUStep

虽然 GUI 之外的 Objective-C 有一些价值,但我认为人们会使用这些扩展名导入 C 即使在系统代码中,也没有什么理由选择它而不是替代方案,因为你的系统几乎没有用它。

答案 4 :(得分:4)

在我的脑海中,我相信C ++比Objective-C更早,并且不仅因为这个原因而拥有更大的用户群。 OC可能已到处,C ++已经存在:)

此外,C ++还有更多功能。很多人都对很多功能印象深刻。它有更多的研究和开发注入其中......等等。基本上,动力。