Релиз GNUstep Objective-C Runtime 1.6
Представлен выпуск свободной библиотеки GNUstep Objective-C Runtime 1.6 (libobjc2), в которой реализовано подмножество функциональности runtime-компонентов, используемых в Mac OS X 10.7 и iOS 5. Библиотека позволяет разработчикам ПО использовать данные компоненты в своих проектах на языках Objective-C и Objective-C++ на любых свободных платформах.Из аппаратных архитектур поддерживаются ARM, x86 и x86-64, поддержку других архитектур планируется реализовать в будущих выпусках. Библиотека полностью обратно совместима с GCC 4.2.1 Objective-C ABI, а также поддерживает расширенный ABI, используемый в таких проектах, как Clang и Etoile LanguageKit. Кроме Apple Objective-C Runtime API, библиотека также поддерживает часть GCC API с целью обеспечения совместимости со старыми приложениями.
Некоторые особенности GNUstep Objective-C Runtime 1.6:
- Совместимость с новым runtime API, представленным в Mac OS X 10.7 и iOS 5;
- Поддержка маленьких объектов (Small Objects). На 32-разрядных системах runtime допускает один small object класс, на 64-разрядных - 4;
- Поддержка ориентации объектов в prototype-стиле (объектная модель JavaScript). Можно добавлять методы и связанные ссылки к отдельным объектам и клонировать их;
- Поддержка совместимых с продуктами Apple функций objc_msgSend() для платформ x86, x86-64 и ARM. Использование данных функций примерно в два раза сокращает затраты ресурсов на отправку сообщений, что в результате приводит к уменьшению размера бинарных данных на 10%;
- Обеспечение использования соответствующих POSIX файлов сборки Makefile;
- Улучшение производительности, благодаря задействования дополнительных оптимизаций LLVM. Тестирование на системе с CPU Xeon 2.8GHz цикла из 200 млн классов на отправку сообщений было потрачено 0.8 секунды при включении всех оптимизаций, при использовании только опции "-Os" на выполнение теста ушло 2 сек., при включении явного кэширования IMP в коде - 1.2 сек. Для сравнения тот же тест при использовании GCC Objective-C runtime выполняется за 11 секунд при сборке с Clang/LLVM или GCC.
© OpenNet