在非Mac OS X平台上是否支持Objective-C 2.0异常处理?

时间:2009-02-16 01:45:30

标签: objective-c multithreading exception gcc garbage-collection

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

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

我有兴趣使用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 个答案:

答案 0 :(得分:2)

引自Cocotron gets some Objective-C 2.0 support via gcc 4.3.0

  

约翰内斯最近的Cocotron补丁   也完全启用了@ try / @ catch   它存在于编译器中   但需要运行时支持。

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

  

Cocotron是一个开源项目   它实现了Objective-C API   类似于Apple所描述的   Inc.的Cocoa文档。这个   包括AppKit,Foundation,   Objective-C运行时和支持API   比如CoreGraphics和   的CoreFoundation

因此,如果您对跨平台obj-c开发感兴趣,那么 Cocotron 可能会让您感兴趣...

答案 1 :(得分:1)

Apple使用标准GCC的变体/分支,其中内置了Objective-C 2.0支持。据我所知,标准GCC中没有Objective-C 2.0特性。

我不完全确定异常处理,但遗憾的是,您列出的其他功能在其他平台上不可用。

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

答案 2 :(得分:1)

有问题的功能需要编译器和运行时支持,因此,虽然可以构建支持语法的编译器(LLVM / Clang可以想到),但许多这些功能都会调用Objective-C运行时和据我所知(并快速仔细检查谷歌)GNU运行时没有必要的支持。

答案 3 :(得分:0)

作为Étoilé项目的一部分,有一个跨平台运行时,它支持Objective-C异常(以及@synchronized作为结果)和AFAIK属性:

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

顺便说一句,Objective-C语言异常不是Objective-C 2.0特性。自Panther以来,他们一直在NeXT运行时。

答案 4 :(得分:0)

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