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

Tat*_*tat 43 programming-languages objective-c

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

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

小智 22

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

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

  1. 特点:即使这样,C++也有比Objective-C更丰富的功能.
  2. 语法:Objective-C的语法是C语言比C++更大的变化.
  3. 性能:Stroustrup专注于使C++特性易于映射到C,因此(理论上!)使用C++没有性能损失.通过明智地使用"inline"关键字,您甚至可以使用C++获得比使用C更好的性能.即使是现在,我也无法在性能至关重要的项目中使用Objective-C.
  4. 风格:相对强大,静态打字是时尚(有充分理由).

因此,与Objective-C相比,C++在90年代早期为您提供了更多的功能而且性能损失更少,其语法既时尚又比Objective-C更熟悉.

  • C++的问题在于,即使在使用该语言4年之后,仍然会在功能之后添加功能,我仍然会遇到新的代码.那有点烦人.语言不一致.此外,对于应该将面向对象添加到C的语言,它肯定不是那样设计的.Objective-C为了抽象而充分利用了类.C++是一堆散布在一堆头文件中的函数和方法.C++ String类仍然没有trim,toUpper,toLower等方法.这个问题可以绕过,但很烦人! (8认同)
  • 我使用C++超过6年,最近不得不使用Objective C开发一个iOS应用程序.即使在第一次"震惊"(现在我习惯了Objective C)之后,我仍然认为这是我最丑陋和讨厌的语言曾经遇到过.语法太脏了,多余了.我无法想象有人会更喜欢这种其他流行语言.也许明智地使用像ReactiveCocoa这样的高级框架可以有所作为,但仍然...... (7认同)
  • 另外,目标C中没有名称空间,这对于大型项目来说相当丑陋. (4认同)

Wil*_*and 20

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

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

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

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

    由于向后兼容性不属于Mac OS X 10.0的优先级列表; 基于C/C++的Toolbox和Carbon得到了简称,整个操作系统或多或少都是NeXTStep的重新设计版本.

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

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

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

  • 对不起,您是否建议微软应该像Java那样让.NET发展得非常慢?主要修订版为语言和平台增加了许多功能.我不明白为什么这应该被视为失败. (40认同)
  • @Williham:嗯,我觉得你错了.哪里有"替换"(例如WinForms的WPF,用于Web服务/远程处理的WCF,用于手动线程的并行扩展,用于Web表单的ASP.NET MVC),它们是一个非常广泛的变化,具有更宏大的愿景,而不是"调整现有的行为"..NET一直在以非常快的速度发展,但是我很难指出那些不受欢迎的演变领域. (17认同)
  • @Williham:我同意"添加东西"并没有形成一个好的框架 - 但它也不会形成一个*坏*,正如你所暗示的那样.这不是以一种巨大的临时方式完成的(尽管如果你想寻找实验性的东西,核心框架中有很多项目*不*). (4认同)
  • @Jon; @Al:变化需要缓慢而慎重.只是"添加东西"并没有形成一个好的框架.**编辑:**这不是关于.NET的讨论,我不打算把它变成一个.我会相应地编辑帖子. (3认同)

nev*_*ing 17

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

为什么你认为C++的使用频率比Objective-C更频繁?

汤姆:背后有AT&T的绰号.

只是?

汤姆:我想是的.

您如何看待Objective-C?

汤姆:它仍然存在.那个怎么样?

  • 为什么Objective C还在?苹果支持它 (16认同)

小智 12

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

它特别注重图形用户界面,但支持它的唯一工具包是苹果公司和大多数未知和追赶的GNUStep.

虽然GUI之外的Objective-C有一些价值,我认为人们会使用这些扩展,如果他们导入到C,即使在系统代码中,也没有理由选择它而不是替代品,当你的系统很少用于与它合作.


Car*_*icz 4

在我的脑海中,我相信 C++ 比 Objective-C 更古老,而且不仅因为这个原因它拥有更大的用户群。OC 出现的每一个地方,C++ 都已经出现了:)

此外,C++还有更多的特性。许多人对许多功能印象深刻。并且它投入了更多的研究和开发......等等。本质上是动力。

  • 对于那些对更详细的日期感兴趣的人,我查了一下:C++ 的开发始于 1979 年,出现于 1983 年;Objective C 的工作始于 1982 年,并于 1986 年发布。 (15认同)