我不知道Objective-C,但对我来说它似乎是一种很好的语言。但我所知道的唯一背景是Apple的一切。但Objective-C甚至在GNU Compiler Collection中。
开放的东西是否缺少某些东西?或者Objective-C已经有了更广泛的基础吗?如果有公司选择Objective-C来开发他们的产品,我很感兴趣。
答案 0 :(得分:38)
我认为ObjC通过历史的怪癖和专有系统的本质已被孤立到Apple世界。
首先,您需要将ObjC与Cocoa分开。 ObjC是一种非常原始的语言。我认为这是一种非常优雅的语言,但它非常基础。您可以在C预处理器中实现ObjCv1。 C ++和ObjC大约在同一时间开发。 C ++提供了大量的基础设施,可以将基于C语言的语法带入基本上完全不同的语言。 ObjC为C带来了类似Smalltalk的语法,几乎没有别的。即使像+alloc
和-release
这样的东西也不是ObjC的语言元素。它们是围绕malloc()
和free()
的相当简单的包装。 * 独立而言,ObjC并不是那么有趣(我觉得它很优雅)。这与Smalltalk的性质非常相似。没有它的对象库,你可以用它做很多事情。凭借其对象库,它非常强大。
NeXT在ObjC上提供了整个框架,名为NeXTSTEP。由于NeXT计算机并未取得广泛的商业成功,并且NeXTSTEP是专有的,因此没有多少人学习该框架或基础语言。当Apple购买它并将其转换为Cocoa时,它仍然是一个专有系统。
GNUStep就在那里,但他们从来没有开发过任何有趣的东西来引入很多开发人员(一个主要的网络浏览器或文字处理器等)。在过去的几年里,Cocoa已经远远领先于GNUStep。随着iPhone对Cocoa的兴趣的增加,GNUStep可能会重振并带来一个很好的跨平台开发框架,但我有点怀疑它。拥有C ++背景的人会看C#并看到明显的改进。当他们看到ObjC时,他们会看到很多方括号,他们并不期望它们。对于那些提出“调用方法”范式的人来说,Smalltalk“传递信息”的范例是陌生的,甚至有点可怕。许多开发人员认为他们需要强类型语言来避免错误,并且对主要依赖于程序员纪律和谨慎一致性的系统感到不舒服。在C#中破解“正常工作”的东西比在ObjC中破解要容易得多。 ObjC真的希望更多的开发人员了解正在发生的事情,而不是依靠编译器来保护你免受攻击。
基本上,人们从Unix知道C语言,而C ++在C方面是有意义的,而Java在C ++方面是有意义的,而C#只是清理了Java。 ObjC不是这些中的任何一个。它是Smalltalk,没有人再学习Smalltalk了。
* 我最近与写过+alloc
关于其历史的人聊过,他可能反对我称之为包含区域的简单包装。因此,对于了解差异的人,请将此处+alloc
替换为+new
。
答案 1 :(得分:16)
嗯,还有一些人仍在开发的GNUStep框架。但是,我不知道这个社区有多活跃。
但是在大多数情况下,Objective-C现在是一种Apple语言,正如该语言的“2.0”版本是作为OSX 10.5的一部分发布的事实所证明的,并且似乎是纯粹的内部开发工作。在Apple。
编辑:Apple,你可能知道,有一个叫Cocoa框架的东西,它基本上是指Objective-C的整个库堆栈,包括NSObject公共基类。 Cocoa是NextStep库的延续,GNUStep是它的开源版本。因此,你会发现许多NS前缀类都存在,但是Apple并没有在添加新类或在Cocoa中更改它们,因此GUI级别的互操作性实际上只是理论上的可能性。
答案 2 :(得分:11)
Greg C. GNUstep首席开发人员
答案 3 :(得分:6)
GNUstep实际上比大多数人认为的要活跃得多,非常值得关注。创建适用于GNUstep和Cocoa的应用程序并不难(意味着可能在OSX,Win,Linux,BSD ......)
对于对该主题感兴趣的人,这些链接绝对值得一试:
http://www.gnu.org/software/gnustep/information/aboutGNUstep.html
然后是Cocotron,一个“开源项目,旨在实现类似于Apple Inc.的Cocoa文档描述的跨平台Objective-C API”:
编辑:有关使用GNUstep构建的商业跨平台产品的示例,请查看Eggplant。
答案 4 :(得分:4)
答案 5 :(得分:1)
我认为Apple的实施得到了更好的支持,并且仍在积极开发中。还有其他一些地方,例如GNUStep,但他们仍然非常关注NextStep / OpenStep级别。不幸的是,从那以后发生了很多事情!
答案 6 :(得分:0)
Mono团队正在开发iPhone开发,允许iPhone应用程序在.NET中编写并与Mono .NET编译器交叉编译。请查看http://www.mono-project.com/Mono:Iphone
最新的.NET Rocks podcast已Rory Blythe谈论他在客观C和iPhone开发方面所做的事情。