Каковы альтернативы Objective-C для Mac программирования?

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

Вы не должны пугаться путем подсчета ссылок Cocoa keep/release. На практике это намного проще, чем у поклонников GC. Cocoa правила управления памятью просты, они влияют только на крошечный объем вашего кода, и даже этот код может быть сгенерирован автоматически.

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Вы всегда можете использовать REALbasic (www.realsoftware.com). Реальный легко и интересно использовать, но не бесплатно. Вы не можете использовать dylib (или dll), используя его, но вы можете использовать dylib и dll в своем коде. И вы можете также использовать библиотеки cocoa

Ответ 7

Не забывайте, что вы также можете использовать java, и я не имею в виду java- cocoa bridge, я имею в виду фактическую java.

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

Также, чтобы прокомментировать точку Шема, если ваш таргетинг osx 10.5 и выше, вы можете воспользоваться сборкой мусора.

Ответ 8

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

Ответ 9

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

Ответ 10

Посмотрите Python и wxPython (wxWidgets в Python).

У wxWidgets очень элегантный дизайн приложения App-Doc-View, который очень, очень приятный. Он недостаточно используется, ИМО. Я не нашел ни одного примера wxPython этого примера App-Doc-View, поэтому вам нужно использовать примеры C, чтобы выяснить, как он будет работать на Python.

Я бы опубликовал примеры, но у меня пока нет работы.

Ответ 11

.NET через Mono mono-project.com

Ответ 12

Смотрите NObjective (http://code.google.com/p/objcmapper/) мост до Cocoa. Он предоставляет больше возможностей, чем другие, с меньшими накладными расходами.

Ответ 13

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