Objective-C仅用于Mac OS/iPhone开发吗?

26

我不懂Objective-C,但它看起来是一种很好的编程语言。但我所知道的唯一背景是与苹果相关的一切。然而,Objective-C甚至在GNU编译器集合中也有出现。

开源库中是否缺少了什么呢?或者Objective-C已经有了更广泛的基础?如果有公司选择使用Objective-C来开发他们的产品,我很感兴趣。

7个回答

41

我认为ObjC在历史的巧合以及所有权系统的性质下,被隔离在了苹果世界中。

首先,你需要将ObjC与Cocoa分开来看。ObjC是一种非常原始的语言。我认为它是一种非常优美的语言,但实际上它非常基础。你可以在C预处理器中实现ObjCv1。C++和ObjC大约同时开发出来。C++建立了大量基础设施,用C样式的语法来构建一个完全不同的语言。而ObjC则使用类似Smalltalk的语法来扩展C,除此之外几乎没有其他特性。即使像+alloc-release这样的东西也不是ObjC的语言要素。它们只是对malloc()free()的简单包装。*就其本身而言,ObjC并不是非常有趣(尽管我认为它很优美)。这与Smalltalk的性质非常相似。如果没有它的对象库,你几乎无法做什么。但是有了对象库,它就变得非常强大。

NeXT提供了一个完整的基于ObjC的框架,称为NeXTSTEP。由于NeXT计算机并不是一个广泛的商业成功,而且NeXTSTEP是专有的,因此没有多少人学习这个框架或其底层语言。当苹果公司购买了它,并将其改编为Cocoa时,它仍然是一个专有系统。

GNUStep已经存在,但他们从未开发出足够有趣的东西来吸引大量开发者(如主要的Web浏览器、文字处理软件等)。而且在过去几年中,Cocoa已经遥遥领先于GNUStep。随着由于iPhone对Cocoa兴趣的崛起,GNUStep可能会复兴并提供一个不错的跨平台开发框架,但我还是有些怀疑。有C++背景的人看到C#就能明显地看出它的改进。当他们看到ObjC时,他们会看到许多方括号,这些方括号令他们感到意外。对于那些习惯“调用方法”的范式的人来说,“传递消息”这种Smalltalk范式是陌生的,甚至有点可怕。许多开发者认为他们需要一种强类型语言来避免错误,并且对依赖于程序员纪律和仔细的一致性的系统感到不适。在C#中,编写“只是工作”的东西比在ObjC中容易得多。ObjC真的期望开发者更多地了解正在发生的事情,不要依赖编译器来保护你免受黑客攻击。

基本上,人们从Unix中了解C语言,从C++的角度来看Java是合理的,C#只是清理过的Java。ObjC没有这些东西。它是Smalltalk,而现在没有人再学Smalltalk了。

*我最近与编写+alloc的人聊过,了解了它的历史,他可能会反对我的称它为简单的包装器,因为它包含了区域。因此,对于那些知道差异的人,请将此处的+alloc替换为+new


1
谢谢你的见解。我想学习它,因为它是我喜爱的Smalltalk。 - Norbert Hartl
3
啊,那你已经成功地跨足可可自然的一半了。如果我们的行业还记得在 Smalltalk 中学到的一半经验教训,今天我们就会领先两倍。我手下有一支来自优秀学校的新鲜计算机科学毕业生组成的团队,但我仍需要不断地教授和复习 Model-View-Controller 的基础知识。 - Rob Napier

15

嗯,还有一些人在开发GNUStep框架。然而,我不知道这个社区的活跃程度如何。

但是就大部分而言,Objective-C现在是苹果公司的语言。这可以从语言的“2.0”版本作为OSX 10.5的一部分推出,并且似乎是苹果公司纯内部开发的努力所证明的。

编辑:正如你可能知道的那样,苹果公司有一个称为Cocoa框架的东西,它基本上是Objective-C的整个库栈,包括NSObject公共基类。 Cocoa是NextStep库的延续,而GNUStep是其开源版本。因此,你会在两个地方找到许多以NS为前缀的类,但是苹果公司没有在Cocoa中添加新类或更改它们,因此在GUI层面的互操作性实际上只是一种理论上的可能性。


用GNUstep打败我,只有6秒钟的时间! - Zifre
我不知道是否仍在进行GNUStep开发,但有一段时间我在网上找到了活跃的etoile OS。我的问题意思并非如此,我会调整问题。 - Norbert Hartl
1
最初由Brad Cox和Tom Love开发,尽管维基百科将其列为苹果公司的开发者(http://en.wikipedia.org/wiki/Objective-C),因为它最初是由NeXT许可并被苹果收购的。 - Alex Rozanski
不是挑剔,但它是GNUstep,而不是GNUStep。 - Zifre
WindowMaker不是基于GNUstep的吗?它仍然是我最喜欢的“低规格”窗口管理器。 - Marco van de Voort
这是一个常见的误解,但 WindowMaker 从未基于 GNUstep。唯一共同之处在于它们共享 NeXT 的外观和感觉。而且现在 GNUstep 正在获得出色的主题能力。 - MKroehnert

11

@Stephen: 我经常对人们在说这种话之前从未阅读过我们的网站或者查看项目进展感到惊讶。 :) GNUstep现在紧密追随Cocoa,我们已经远远超越了OpenStep。如果你或其他人想真正发表意见,请从SVN获取GNUstep,安装并尝试使用。对于你完全不了解的事情进行牢骚是毫无意义的(就像你在这里所表现的那样)。

Greg C. GNUstep首席开发人员


6
GNUstep其实比大多数人想象的要活跃得多,非常值得关注。创建可以跨越GNUstep和Cocoa(潜在地在OSX、Win、Linux、BSD上运行)的应用程序并不难。
以下链接对于任何对该主题感兴趣的人来说都是值得一看的:

http://www.gnu.org/software/gnustep/information/aboutGNUstep.html

http://etoileos.com/news/

http://www.nongnu.org/gap/

接下来是Cocotron,一个“旨在实现类似于苹果公司Cocoa文档所述的跨平台Objective-C API”的开源项目:

http://www.cocotron.org/

编辑:如果你想看一个使用GNUstep构建的商业跨平台产品的例子,请查看Eggplant


5

GNUstep。还有Étoilé,它是一个使用GNUstep构建的操作系统。

我认为许多人更喜欢C或C++,如果他们想要一种更现代的语言,他们会使用C#或Java。


3
我认为相反的观点更合适。你可以使用Objective-C进行系统级开发,并将现代部分整合进去。在我看来,这非常强大。 - Norbert Hartl
1
你为什么认为Etoile是一个操作系统?我只知道它是一个桌面环境。 - Norbert Hartl
@Norbert Hartl:它更像是一个桌面环境(如GNOME或KDE),但该网址本身甚至称其为操作系统。 - Zifre

1

1

我认为苹果的实现得到了更好的支持,并且仍在积极开发中。还有一些其他地方,比如GNUStep,但它们看起来仍然非常接近NextStep/OpenStep级别。不幸的是,自那时以来发生了很多事情!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接