最近读了一篇关于Objective-C的文章,我觉得它是一个相当整洁的语言,有很多很酷的function。
我不打算做任何iPhone开发,但是我明白GCC能够编译Objective-C代码,所以我想知道 – Objective-C是C99 for Windows开发的一个可行的替代语言吗?
尤其是:
关于你的第一个问题,我不知道有没有人正在用Objective-C 认真的开发windows,但可能会有这样的数字,可能会比那些用空白语言做认真工作的人少。
其次,至少需要使用objective-c运行时。 有两个运行时,NeXT的(现在是苹果的)运行时,和GNU Objective-C运行时。 它们不兼容。 如果您使用的是非NeXT和非Apple平台(例如Windows),那么您别无选择,只能使用GNU运行时。
Objective-C是C的超集,是的,如果你直接在你的objective-c代码中,你可以使用Win32 API。 同样,如果你使用一个保守的收集器,你只会得到垃圾收集,并且与你正在使用的库联系在一起。 总之:不。
GCC拥有的是对Objective-C语言和运行时的支持,没有标准库。 GNU objc运行时为标准库提供了两个对象:Object和NXConstantString类,这是支持@""
语法所必需的。 Object
只是一个基类。 不是很有用,呃? 这就是为什么像Cocotron和GNUstep这样的框架存在 – 让你访问OPENSTEP / Cocoa的实现。
关于陷阱或陷阱,是的:你的应用程序,甚至使用Cocotron或GNUstep可能永远不能移植到Mac,或者你可能会在GNU objc运行时类似于选择器的东西,或其他许多问题。 让我通过提出另一个问题来回答这个问题:你可能会遇到哪些陷阱或陷阱? 我敢肯定,如果不是这些案例中的大部分也适用于这种情况。 标准的陷阱和陷阱适用。
我希望这有帮助。
目前还没有成熟的解决方案。 如果你自己开发解决方案,你可以做任何事情。 但是,如果你不是,现在不是时候。
对于编译工具,在BSD许可证下有LLVM / Clang开放源代码。 编译器是由Apple赞助的,所以它完全编译了Objective-C,并且正在成为Apple的主编译器。 所以编译器不再是问题了。
问题是运行时环境库。 Objective-C语言取决于它的运行时间来执行。 运行时定义了对象系统的所有行为等等。 运行时环境库是核心系统,与Cocoa,Quartz等框架库不同。 在.NET中,它是CRE,而不是.NET框架类库。 如果没有运行时,程序不能像在Windows上运行的.NET程序那样执行,而不运行.NET运行时。
有关详细信息,请查看以下对话: http : //lists.cs.uiuc.edu/pipermail/cfe-dev/2010-January/007593.html