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

非Mac OS X平台是否支持Objective-C 2.0异常处理?,objective-c,multithreading,exception,gcc,garbage-collection,Objective C,Multithreading,Exception,Gcc,Garbage Collection,Objective-C 2.0有一些新的增强功能: 垃圾收集 快速枚举:for..in 性质 线程同步:@synchronized(self) @尝试/@catch/@finally/@throw异常 处理 我对使用Objective-C2.0作为跨多个操作系统平台编写可移植代码的语言感兴趣,同时避免使用OpenStep或GNUStep等框架 但是,尽管Windows上的gcc 3.4.5在使用-fobjc异常编译时将解析使用@try/@catch/@finally/@throw异常处理的语

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

  • 垃圾收集
  • 快速枚举:
    for..in
  • 性质
  • 线程同步:@synchronized(self)
  • @尝试/@catch/@finally/@throw异常 处理
我对使用Objective-C2.0作为跨多个操作系统平台编写可移植代码的语言感兴趣,同时避免使用OpenStep或GNUStep等框架

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

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

Mac OS X v10.3及更高版本以外的操作系统是否支持Objective-C 2.0功能?

苹果使用标准GCC的变体/分支,其中内置了Objective-C 2.0支持。据我所知,标准GCC中不存在Objective-C2.0特性

我不太清楚异常处理,但很遗憾,您列出的其他功能在其他平台上不可用


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

所讨论的功能需要编译器和运行时支持,因此,尽管构建一个支持语法的编译器(想到LLVM/Clang)当然是可能的,但这些功能中的许多都会调用Objective-C运行时,据我所知(并在Google上快速重复检查),GNU运行时没有必要的支持。

引用自:

Johannes最近的Cocotron贴片 还完全启用@try/@catch 已经存在于编译器中 但是需要运行时支持

关于Cocotron是什么:

Cocotron是一个开源项目 它实现了Objective-CAPI 与苹果所描述的相似 公司的可可文件。这 包括AppKIT,基金会, Objective-C运行时和支持API 例如CoreGraphics和 核心基金会


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

作为埃托莱项目的一部分,有一个跨平台运行时,它支持Objective-c异常(因此,
@synchronized
),而且,还有以下属性:

顺便说一下,Objective-C语言异常不是Objective-C 2.0的特性。自Panther以来,它们一直处于下一个运行时。

实际上早于Objective-C2.0。它是在MacOSX 10.3中引入的,而Objective-C2.0是在10.5(Leopard)中引入的