Cocotron, свежие новости с фронта Objective-C

    Cocotron — это реализация runtime для Objective-C, похожего на рантайм Apple — Cocoa. Он достаточно сильно отличается от другого популярного открытого рантайма — GNUstep, как в целях, так и в реализации.

    Cocotron отлично подходит для портирования кода с платформы OSX на Win32. Конечно реализация API далека до идеала, но, как показывает практика, разработчики всегда быстро решают проблемы.

    Изначально Cocotron использовался только при кросс-сборке на базе XCode и mingw-toolchain. При кросс-сборке доступно развертывание на Windows, Linux и Solaris.

    Конечно такой подход оставлял в цепочке разработки самый сложный и дорогой этап — OSX (оптимально — на оригинальном железе). Возможность Cocotron, как платформы, не могла быть полностью раскрыта из-за этой зависимости.


    Cocotron не может работать с оригинальным GCC, где используется другой runtime Objective-C. По этой причине GCC необходимо собрать с патчами Apple, которые, помимо всего прочего, немного расширяют язык от того, что есть в vanilla GCC.

    Процесс установки GCC вполне традиционен, для начала необходимо скачать дерево исходных кодов:
    svn checkout http://cocotron-tools-gpl3.googlecode.com/svn/trunk/gcc cocotron-gcc

    и потом скомпилировать его:
    mkdir gcc-build
    cd gcc-build
    ../cocotron-gcc/configure --prefix=/opt/objc --with-gnu-as --with-gnu-ld --without-newlib --disable-multilib \
        --disable-libssp --disable-nls --disable-libobjc --enable-libffi --enable-objc-gc \
        --enable-languages=c,objc,c++,obj-c++  --enable-checking=release
    make -j2
    sudo make install

    здесь я испльзую префикс /opt/objc для GCC и Cocotron.

    Как вариант — можно использовать собранный deb пакет, который любезно предоставил новоприбывший хабровчанин pfactum.

    Теперь можно перейти к конкретно сборке Cocotron. На данный момент нативная сборка поддерживается для Linux, OpenBSD (и, вероятно, FreeBSD) и Darwin (т.е. OSX). Для сборки необходимо забрать форк официального дерева с github:
    git clone git://github.com/farcaller/cocotron.git
    cd cocotron
    git checkout origin/native-build -b native-build

    (кстати ветка master автоматически синхронизируется с официальным svn, так что если кто-то хочет «поковырять» исходники и предпочитает git — милости прошу).

    Система сборки основана на CMake, причем не моложе 2.6:
    mkdir build
    cd build
    cmake -DCMAKE_C_COMPILER=/opt/objc/bin/gcc \
        -DCMAKE_CXX_COMPILER=/opt/objc/bin/g++ \
        -DCMAKE_INSTALL_PREFIX=/opt/objc ..
    make
    sudo make install

    пока что она собирает только Foundation, работа над скриптами сборки AppKit в процессе.

    Собранную библиотеку можно протестировать:
    cat > test.m <<EOF
    #import <Foundation/Foundation.h>
    
    int main(int argc, char *argv[])
    {
            NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
            NSLog(@"Hello, Objective-C World!");
    
            [pool drain];
            return 0;
    }
    EOF

    /opt/objc/bin/gcc test.m -o test -I/opt/objc/include -L/opt/objc/lib \
      -lFoundation -lpthread -ldl


    Я надеюсь, что развитие Cocotron привлечет к нему новых разработчиков и повысит популярность Objective-C, очень интересного языка программирования.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 29
    • 0
      Поясните пожалуйста что такое в данном контексте «рантайм».
      • +1
        окружение для запуска и выполнения кода
        • 0
          Все равно не понятно. Что за окружение кроме системных вызовов ОС нужно для запуска и выполнения кода?
          • 0
            К примеру методы для работы с классами непосредственно во-время выполнения программы — добавление\удаление методов, получения информации о аргументах сообщений и т.д.
            • –3
              Этот функционал не присутствует в самом языке?
              А почему нужен новый «рантайм»? Разве работа с «классами» и «добавление\удаление» методов это платформо-зависимые вещи?
              • +2
                Видимо я не совсем понял, про какой «рантайм» вы говорите.
                Может стоит внимательно почитать википедию? Возможно большинство вопросов отпадет.
                • 0
                  Так я тоже не понял. В статье говорят о реализации какого-то «рантайма» для языка. А я не знаю что такое этот «рантайм». Вот пытаюсь узнать.

                  А статьи на какую тему вы мне предлагаете прочитать в википедии? Objective-C?
                  • +1
                    в данном контексте, runtime Objective-C — это его «стандартная библиотека», набор базовых классов.
                    • 0
                      Теперь понятно. Аналог libc для языка C.
                      • 0
                        Забыл добавить «спасибо».

                        Скажите, а почему уже существующие «рантаймы» не удовлетворяют?

                        Cocoa я так понимаю сильно привязана к MacOS?
                        • 0
                          Cocoa есть только под OSX (закрытый код, жестко привязанный к darwin).

                          Cocotron можно использовать на более широком наборе платформ, или портировать на новую.
                          • 0
                            Вы знаете какие-нибудь примеры кроссплатформенных приложений, написанных на Objective-С или хотя бы приложений не для MacOS?
                            • 0
                              desktop-клиент для одного из приложений в ифоновом AppStore (FileMagnet, если мне не изменяет память).

                              Мой недобитый веб-фреймворк, так и не завершен, но objc на сервере вполне применим.

                              А так, спросите лучше в рассылке
                        • 0
                          Да, что-то в этом духе. Естественно libc в objc коде тоже можно использовать, а для полной фееричности — можно и C++ добавить, будет код с двумя разными ООП реализациями :)
              • 0
                Прежде всего — реализация API
                • 0
                  API для чего?
                  • 0
                    Точнее «к чему» правильнее, т.к. API = интерфейс.
          • 0
            Можете рассказать, чем интересен ObjC лично вам, в сравнении с другими языками?
            • 0
              Могу я рассказать чем он интересен лично мне?
              Для меня ObjC это скорость приближающаяся к С и ООП реализованный на мой взгляд лучше чем в С++
              • 0
                тк сам недавно сел за ObjC, очень интересуют отличия 1.0 и 2.0 версий. Можете пояснить вкратце или ссылкой ткнуть?
                • 0
                  Я и сам не очень большой специалист, но из того что могу сказать навскидку это —
                  2.0 работает только в OS X > 10.5,
                  возможность автоматической сборки мусора,
                  возможность использовать «точечный» синтаксис, место скобок (box.width вместо [box width]), с
                  войства (гетеры\сетеры),
                  новый for (for… in ..)
                  может еще что-то…
                  • 0
                    спасибо, честно больше всего напрягают квадратные скобки в синтаксисе
                    • +1
                      Ну это не более чем вопрос привычки — пару тысяч строк кода со скобками и неприязнь пропадает ,)
                  • +1
                    Objective-C guide for C++ programmers. — книжка в .PDF (708 Кб).

                    N.B. ступил, думал нужны отличия ObjC от Cpp =) ну да ладно, пусть тут полежит ^_^
                • 0
                  Он позволяет опускатся на уровень С без малейших проблем, и, в тоже время, так же динамичен как питон.
                  • 0
                    Эх, ему бы ipython… Без REPL'a так что-то стало напряжно начать пользоваться новыми языками. ;)
                    • 0
                      биндинги на Cocoa, PyObjC — вполне работоспособны.
                      • 0
                        Та ну… Меня методы вида doIt_withThat_() угнетают слишком, совсем неинтересно. Вот другое дело с самим objc покопаться. Это можно и без REPL'a, но хочется же. :)
                • 0
                  Хотелось бы увидеть примеры каких-то более менее больших приложений. ;)

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