我不懂Objective-C,但它看起来是一种很好的编程语言。但我所知道的唯一背景是与苹果相关的一切。然而,Objective-C甚至在GNU编译器集合中也有出现。
开源库中是否缺少了什么呢?或者Objective-C已经有了更广泛的基础?如果有公司选择使用Objective-C来开发他们的产品,我很感兴趣。
我不懂Objective-C,但它看起来是一种很好的编程语言。但我所知道的唯一背景是与苹果相关的一切。然而,Objective-C甚至在GNU编译器集合中也有出现。
开源库中是否缺少了什么呢?或者Objective-C已经有了更广泛的基础?如果有公司选择使用Objective-C来开发他们的产品,我很感兴趣。
我认为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
。
嗯,还有一些人在开发GNUStep框架。然而,我不知道这个社区的活跃程度如何。
但是就大部分而言,Objective-C现在是苹果公司的语言。这可以从语言的“2.0”版本作为OSX 10.5的一部分推出,并且似乎是苹果公司纯内部开发的努力所证明的。
编辑:正如你可能知道的那样,苹果公司有一个称为Cocoa框架的东西,它基本上是Objective-C的整个库栈,包括NSObject公共基类。 Cocoa是NextStep库的延续,而GNUStep是其开源版本。因此,你会在两个地方找到许多以NS为前缀的类,但是苹果公司没有在Cocoa中添加新类或更改它们,因此在GUI层面的互操作性实际上只是一种理论上的可能性。
@Stephen: 我经常对人们在说这种话之前从未阅读过我们的网站或者查看项目进展感到惊讶。 :) GNUstep现在紧密追随Cocoa,我们已经远远超越了OpenStep。如果你或其他人想真正发表意见,请从SVN获取GNUstep,安装并尝试使用。对于你完全不了解的事情进行牢骚是毫无意义的(就像你在这里所表现的那样)。
Greg C. GNUstep首席开发人员
http://www.gnu.org/software/gnustep/information/aboutGNUstep.html
接下来是Cocotron,一个“旨在实现类似于苹果公司Cocoa文档所述的跨平台Objective-C API”的开源项目:
编辑:如果你想看一个使用GNUstep构建的商业跨平台产品的例子,请查看Eggplant。
Mono团队正在进行与iPhone开发相关的工作,允许使用.NET编写iPhone应用程序,并使用Mono .NET编译器进行交叉编译。请访问http://www.mono-project.com/Mono:Iphone了解更多信息。
最新的.NET Rocks podcast节目邀请到Rory Blythe谈论他在Objective C和iPhone开发方面的经验。
我认为苹果的实现得到了更好的支持,并且仍在积极开发中。还有一些其他地方,比如GNUStep,但它们看起来仍然非常接近NextStep/OpenStep级别。不幸的是,自那时以来发生了很多事情!