Поддерживается ли обработка исключений в Objective-C 2.0 не на платформах Mac OS X? - PullRequest
3 голосов
/ 16 февраля 2009

Objective-C 2.0 имеет несколько новых улучшений:

  • сборка мусора
  • быстрое перечисление: for..in
  • свойства
  • синхронизация потоков: @synchronized (self)
  • @ try / @ catch / @ finally / @ выбросить исключение обработка

Мне интересно использовать Objective-C 2.0 в качестве языка для программирования переносимого кода на нескольких платформах операционной системы, избегая при этом таких платформ, как OpenStep или GNUStep.

Однако, хотя gcc 3.4.5 в Windows будет анализировать синтаксис использования обработки исключений @ try / @ catch / @ finally / @ throw при компиляции с -fobjc-exception, он все равно генерирует эту ошибку:

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

Есть ли какая-либо поддержка функций Objective-C 2.0 в операционных системах, кроме Mac OS X v10.3 и новее?

Ответы [ 5 ]

2 голосов
/ 10 апреля 2009

Цитата из Cocotron получает поддержку Objective-C 2.0 через gcc 4.3.0 :

Последние патчи Cocotron от Johannes также полностью включить @ try / @ catch который присутствовал в компиляторе но нужна поддержка во время выполнения.

www.cocotron.org о том, что такое Cocotron:

Cocotron - проект с открытым исходным кодом который реализует Objective-C API аналогично описанному Apple Inc. Какао документация. это включает в себя AppKit, Foundation, Objective-C времени выполнения и API поддержки такие как CoreGraphics и CoreFoundation

Так что, если вы заинтересованы в кроссплатформенной разработке obj-c Cocotron может быть интересным для вас ...

1 голос
/ 16 февраля 2009

Для рассматриваемых функций требуется поддержка как компилятора, так и среды выполнения, и поэтому, хотя, безусловно, возможно создать компилятор, поддерживающий синтаксис (LLVM / Clang), многие из этих функций обращаются к среде выполнения Objective C и Насколько мне известно (и быстрая двойная проверка в Google), среда выполнения GNU не имеет необходимой поддержки.

1 голос
/ 16 февраля 2009

Apple использует вариант / форк стандарта GCC, в котором встроена поддержка Objective-C 2.0. Насколько я знаю, ни одна из функций Objective C 2.0 не существует в стандартном GCC.

Я не совсем уверен в обработке исключений, но другие перечисленные вами функции, к сожалению, недоступны на других платформах.

P.S. GNUstep (и Cocoa) - это реализация OpenStep, которая является спецификацией.

0 голосов
/ 10 апреля 2009

@try/@catch/@finally/@throw на самом деле предшествует Objective-C 2.0. Он был представлен в MacOSX 10.3, а Objective-C 2.0 - в 10.5 (Leopard).

0 голосов
/ 10 апреля 2009

Существует кроссплатформенная среда выполнения в рамках проекта Étoilé, которая поддерживает исключения Objective-C (и в результате @synchronized) и AFAIK, свойства:

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

Кстати, исключения языка Objective C не являются функцией Objective C 2.0. Они были в среде исполнения NeXT со времен Panther.

...