非 Mac OS X 平台支持 Objective-C 2.0 异常处理吗?

3

Objective-C 2.0有一些新的增强功能:

  • 垃圾回收
  • 快速枚举: for..in
  • 属性
  • 线程同步:@synchronized(self)
  • @try/@catch/@finally/@throw 异常处理

我有兴趣使用Objective-C 2.0作为语言来编写可在多个操作系统平台上运行的便携式代码 - 同时避免使用OpenStep或GNUStep等框架。

然而,尽管在Windows上的gcc 3.4.5在使用-fobjc-exceptions编译时可以解析使用@try/@catch/@finally/@throw异常处理的语法,但仍会生成此错误:

error: storage size of '_stackExceptionData' isn't known

除了Mac OS X v10.3及更高版本外,其他操作系统是否支持Objective-C 2.0功能?

5个回答

2

引用自Cocotron通过gcc 4.3.0获得了一些Objective-C 2.0支持:

Johannes最近提交的Cocotron补丁 也完全启用了@try/@catch, 它们已经存在于编译器中, 但需要运行时支持。

www.cocotron.org关于Cocotron是什么:

Cocotron是一个开源项目, 它实现了类似于苹果公司Cocoa文档描述的Objective-C API。 这包括AppKit、Foundation、Objective-C runtime和支持API, 如CoreGraphics和CoreFoundation。

因此,如果你对跨平台obj-c开发感兴趣,Cocotron可能会对你有所帮助...


1

苹果使用标准GCC的变体/分支,其中内置了Objective-C 2.0支持。据我所知,标准GCC中不存在任何Objective-C 2.0功能。

关于异常处理,我不太确定,但您列出的其他功能,恐怕在其他平台上不可用。

P.S. GNUstep(和Cocoa)是OpenStep的实现,这是一个规范。


1
涉及的功能需要编译器和运行时支持,因此,虽然可以构建支持语法的编译器(例如LLVM/Clang),但其中许多功能会调用Objective-C运行时,并且据我所知(并在Google上进行了快速双重检查),GNU运行时不具备必要的支持。

0
Étoilé 项目中有一个跨平台运行时,支持 Objective-C 异常(以及 @synchronized 因此)和属性。据我所知:

http://www.nabble.com/ANN:-New-Objective-C-Runtime-td13648692.html

顺便提一下,Objective-C语言的异常并不是Objective-C 2.0的特性。它们自Panther以来就存在于NeXT运行时中。

0

@try/@catch/@finally/@throw实际上早于Objective-C 2.0。它是在MacOSX 10.3中引入的,而Objective-C 2.0是在10.5(Leopard)中引入的。


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