使用Objective-C进行Windows开发

最近读了一篇关于Objective-C的文章,我觉得它是一个相当整洁的语言,有很多很酷的function。

我不打算做任何iPhone开发,但是我明白GCC能够编译Objective-C代码,所以我想知道 – Objective-C是C99 for Windows开发的一个可行的替代语言吗?

尤其是:

  • 目前有人使用Objective-C进行Windows开发吗?
  • 是否有任何运行时组件需要与我的应用程序分发?
  • 我知道Objective-C是C的超集,这是否意味着可以使用任何C兼容的库? (例如Windows API)
  • 我会在我的应用程序中获取垃圾回收吗?
  • 我发现Cocotron和GNUstep是在其他平台上使用Objective-C的时候经常提到的,但是因为GCC已经可以用来编译Objective-C,我不太明白为什么我需要这些。
  • 在尝试使用Objective-C进行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