2010-12-09 2 views
9

Недавно ознакомившись с Objective-C, он поражает меня как довольно аккуратный язык с множеством интересных функций.Разработка Windows с использованием Objective-C

Я не намерен заниматься разработкой iPhone, однако я понимаю, что GCC способен скомпилировать Objective-C код, и поэтому я хотел знать - Является ли Objective-C жизнеспособным альтернативным языком для C99 для разработки Windows?

В частности:

  • ли кто-нибудь в настоящее время делает разработку Windows, используя Objective-C?
  • Есть ли какие-либо компоненты времени выполнения, которые необходимо будет распространять вместе с моими приложениями?
  • Я понимаю, что Objective-C является надмножеством C, означает ли это, что можно использовать любую C-совместимую библиотеку? (например, API Windows)
  • Могу ли я получить сбор мусора в своих приложениях?
  • Я нашел Cocotron и GNUstep, которые часто упоминаются при использовании Objective-C на других платформах, однако поскольку GCC уже может использоваться для компиляции Objective-C, я не совсем понимаю, зачем мне это нужно.
  • Есть ли другие подводные камни или ловушки, которые я могу запустить при попытке разработки Windows с помощью Objective-C?
+0

Я нашел вопрос [Objective C для Windows] (http://stackoverflow.com/questions/56708/objective-c-for-windows) что интересно, однако на самом деле не отвечает на мои вопросы о жизнеспособности, компонентах времени выполнения или действительно о любых пунктах в вопросе. – Justin

+0

Чтобы получить максимальную выгоду от Objective C, как вы видите в средах Mac, вам нужно использовать библиотеки Cocoa. Else просто выглядит как язык, который поддерживает объектную ориентацию сверху C. Вы просто получаете встроенные функции языка. – boring

ответ

8

В отношении первого вопроса, то я не знаю, если кто-то серьезно делает развитие на окна с Objective-C, но может быть, хотя эти цифры, вероятно, будет меньше, чем тех, кто делает серьезную работу с таким языком, как whitespace.

Во-вторых, вам потребуется, как минимум, время выполнения объекта-c. Существует два времени выполнения, время выполнения NeXT (теперь Apple) и среда выполнения GNU Objective-C. Они несовместимы. Если вы находитесь на платформе non-NeXT и не Apple, например, в Windows, у вас нет выбора, только для GNU.

Objective-C - это надмножество C, и да, вы можете использовать Win32 API, если вы так хотите прямо в своем объектно-c-коде. Кроме того, вы получите только сбор мусора, если используете консервативный коллекционер, и он связывается с библиотеками, которые вы используете. Вкратце: №

У GCC есть поддержка языка объектива-c и времени выполнения, нет стандартной библиотеки. То, что среда исполнения GNU objc предоставляет вам с точки зрения стандартной библиотеки, - это два объекта: Object и NXConstantString, которые необходимы для поддержки синтаксиса @"". Object - всего лишь базовый класс. Не очень полезно, а? Вот почему существуют такие рамки, как Cocotron и GNUstep, чтобы предоставить вам доступ к реализации OPENSTEP/Cocoa.

Что касается ловушек или ловушек, да: ваше приложение даже с использованием Cocotron или GNUstep никогда не может быть переносимым на Mac, например, или вы можете получить бит такими вещами, как типизированные селектора в среде выполнения GNU objc, или множество других проблемы. Позвольте мне закончить ответ на этот вопрос, задав еще один вопрос: какие подводные камни или ловушки вы можете использовать для таргетинга .NET? Я уверен, что некоторые, если не большинство из них, применимы и в этом случае. Применяются стандартные ловушки и ловушки.

Надеюсь, это поможет.

+0

Я собирался опубликовать это, но вы избили меня. +1 для захвата основной идеи: Objective-C бесполезен без библиотек времени выполнения, что и предоставляет Cocotron и GNUStep. Тем не менее, они не могут реально использоваться в каких-либо серьезных программах и полностью отстают от библиотек времени исполнения Apple. Короче говоря, нет реального использования для Objective-C за пределами Mac и iPhone с библиотеками времени исполнения Apple. –

+2

@ Kragen Без библиотек времени выполнения Objective-C ничего не может сделать. Большая часть Objective-C зависит от того, что делать во время выполнения (помимо необходимых фреймворков: Foundation, CoreFoundation, AppKit) и без необходимых библиотек, это неэффективно. Чтобы использовать ваш пример, это похоже на C без каких-либо библиотек. Если вы хотите что-либо сделать, вам придется реализовать его самостоятельно (что-то, что вы действительно не можете сделать с Objective-C). –

+0

Рабочая среда GNU больше не является единственной альтернативой - теперь есть libobjc2, который поддерживает практически все, что делает среда выполнения Apple. Библиотеки GNUStep все еще отстают, особенно для материалов пользовательского интерфейса, но ядро ​​языка обновлено. – user57368

0

Пока нет зрелого решения. Если вы разработаете решение самостоятельно, вы все равно сможете это сделать. Но если нет, не время.

Для инструментов компиляции существует LLVM/Clang, которые являются open-source под лицензией BSD. Компилятор спонсируется Apple, поэтому он полностью компилирует Objective-C и становится основным компилятором для Apple. Поэтому компилятор уже не проблема.

Проблема - это среда среды выполнения. Язык Objective-C зависит от исполнения исполняемого файла. Время выполнения определяет все поведение объектной системы и некоторые другие. Библиотека среды выполнения Runtime является базовой системой и отличается от библиотеки фреймов, таких как Cocoa или Quartz. в .NET это CRE, а не библиотека классов .NET Framework. Без выполнения программа не может быть выполнена, как .NET-программа, выполняемая в Windows без выполнения .NET.

Для получения более подробной информации, проверить этот разговор: http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-January/007593.html

Смежные вопросы