Какие есть альтернативы Objective-C для программирования на Mac? - PullRequest
10 голосов
/ 06 ноября 2008

Мне стало очень комфортно в мире языков программирования без мусора. Теперь я должен написать небольшой компонент Mac. Я изучал Objective-C, но, сталкиваясь с возможностью висящих указателей и необходимостью управлять счетами удержания, я чувствую уныние.

Я знаю, что в Objective-C теперь есть сборщик мусора, но это работает только с Leopard. Мой компонент тоже должен работать с Tiger.

Мне нужен доступ к некоторым библиотекам Какао, недоступным для Java, так что это исключает мое обычное оружие выбора.

Какие у меня альтернативы? Особенно без явных указателей и автоматической сборки мусора.

Ответы [ 13 ]

19 голосов
/ 06 ноября 2008

Что вы подразумеваете под "компонентом"? Вы имеете в виду кусок кода или библиотеку, которую вы собираетесь передать другим людям, чтобы связать их приложения? Если это так, то в настоящее время нереально использовать какой-либо из соединенных языков. Хотя многие мосты очень хороши, они почти всегда имеют сложности и проблемы, с которыми большинство разработчиков приложений не захотят иметь дело с использованием одного компонента, особенно если это требует значительного времени выполнения.

Мосты наиболее полезны для соединения других языковых библиотек с приложением Objective C. Хотя вы можете писать довольно полные приложения, используя их, для этого часто требуется лучшее понимание Objective C, чем простое написание приложения Objective C, поскольку вам нужно понимать и справляться с несоответствиями языка, объектной модели, потоков и распределения памяти, которые происходят.

Именно поэтому многие люди утверждают, что даже если вы достаточно хорошо знакомы с языком, попытка выучить какао с использованием этого языка через мост, как правило, сложнее, чем изучение его с помощью Objective C.

Наконец, большая часть недавней поддержки мостовых языков была связана с «BridgeSupport», функция была добавлена ​​в Leopard. Даже мосты, которые предшествовали миграции, иногда так, что использование языка моста на Тигре и Леопарде может иметь существенные различия. Кроме того, в настоящее время отсутствует поддержка моста для iPhone, и большинство языков с мостовым соединением не будут работать на нем, если это является проблемой.

В конечном счете, если вы пишете библиотеку, которая будет связана с другими приложениями, вам нужно работать на Tiger и Leopard, и вам нужно получить доступ к API-интерфейсам только с Cocoa, я думаю, вы найдете это с помощью любого не Objective C решения довольно сложно.

11 голосов
/ 06 ноября 2008

Вы можете попробовать PyObjC для написания приложений Какао на python или MacRuby , если вы заинтересованы в Ruby.

9 голосов
/ 07 ноября 2008

Вы не должны быть напуганы подсчетом сохранения / выпуска Какао. Это намного, намного легче на практике, чем поклонники GC заставили бы вас верить. Правила управления памятью какао очень просты, они влияют только на небольшое количество вашего кода, и даже этот код может генерироваться автоматически.

Вот трюк. Вы инкапсулируете свой MM-код в методы доступа, а всегда использует средства доступа. Xcode имеет встроенные скрипты для генерации соответствующих аксессоров, или, если вам нужна большая гибкость, есть приложения из 3-х частей, такие как Accessorizer .

Это не навязчивый подход - вам нужно беспокоиться о сохранении объекта только в том случае, если вам нужно сохранить его для последующего использования, а если вы собираетесь это сделать, вам понадобится переменная экземпляра. в любом случае, чтобы сохранить его. И, если вы используете KVO и привязки, вам нужно будет использовать средства доступа, чтобы убедиться, что соответствующие уведомления наблюдателя запущены. По сути, если вы используете хорошие методы ООП и Какао, практически нет дополнительных мыслей или усилий, связанных с управлением памятью.

Большинство людей, которые испытывают трудности с «ручным» управлением памятью Какао, делают это из-за неправильного его использования. Самая распространенная ошибка - разбросать соответствующий код повсюду. Это означает, что будет трудно найти пропущенное сохранение, дополнительный выпуск и т. Д.

3 голосов
/ 06 ноября 2008

Попробуйте любой из мостов Какао, перечисленных здесь http://www.cocoadev.com/index.pl?CocoaBridges

Вы также можете попробовать F-Script - диалект Smalltalk, который написан специально для MacOSX / Cocoa.

2 голосов
/ 06 ноября 2008

RubyCocoa становится все более впечатляющим, и я видел множество успешных реализаций, использующих его. Это, конечно, если Руби твоя чашка чая ...

1 голос
/ 10 января 2009

Кроме того, FreePascal может создавать собственные приложения Carbon (в процессе работы для Coccoa)

1 голос
/ 30 декабря 2008

Если вам нужен синтаксис lisp, то Nu - это lisp, реализованный поверх Objective-C http://www.programming.nu/

1 голос
/ 09 ноября 2008

Не забывайте, что вы также можете использовать Java, и я не имею в виду мост Java-Cocoa, я имею в виду настоящую Java.

Существует также пакет от Apple, который также предоставляет вам доступ к нескольким функциям osx.

Также, чтобы прокомментировать точку зрения Шема, если вы нацелены на OSX 10,5 и выше, вы можете воспользоваться сборкой мусора.

1 голос
/ 09 ноября 2008

Вы всегда можете использовать REALbasic (www.realsoftware.com). Очень легко и весело использовать, но не бесплатно. Вы не можете использовать dylibs (или dll's), используя его, но вы можете использовать dylibs и dll's в своем коде. И вы также можете использовать библиотеки какао

0 голосов
/ 30 декабря 2008

Я тоже смотрю в Моно. Objective-C немного странен для меня на данный момент. Я полагаю, слишком много лет занимался C / C ++, Java, C #, Perl и т. Д. Все это кажется довольно легко плавать между. Не так для Objective-C. Мне нравится мой Mac, но я боюсь, что для овладения языком потребуется слишком много драгоценного времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...