Как стать автором
Обновить

Objective-J, технологии MacOS в вебе

Время на прочтение 3 мин
Количество просмотров 1.3K
В статье я попробовал рассмотреть текущее положение вещей в проекте Cappuccino, и сопутствующем языке Objective-J. Текст ориентирован на людей, знакомых с технологиями программирования в OSX, я старался не вдаватся в конкретные детали реализации. Тем, кто знаком с Cocoa они понятны и так, а остальным сначала придется разобратся в основах Objective-C и Cocoa (либо полистать туториалы на сайты Cappuccino).

Objective-J по сути своей представляет частичную реализацию рантайма Objective-C на базе Javascript. Технически реализация состоит из Javascript-препроцессора, который на базе регулярных выражений превращает Objective-J в обычный Javascript. Так же в рантайм входят несколько функций (схожих с рантаймом Objective-C) для доступа к низкоуровневым понятия языка. Так там есть функции для динамического создания классов, списка ivar, добавления новых селекторов. По сути парсер реализации класса превращает описание в вызовы именно этих функций.

Помимо препроцессора и реализации RTTI, в базовые функции языка входит приведение типов Javascript в типы Cappuccino (что-то вроде «бесплатной связки» Carbon-Cocoa). Так можно вызывать селекторы для строк или массивов:
objj> ["test" length]
4
objj> [[1, 2, 3] objectAtIndex:1]
2


Следующая составляющая Cappuccino — Foundation. По сути своей — копия Foundation из Cocoa, не считая смены префикса NS на префикс CP. Мак-программисты чуствуют себя как дома. Ну или почти как дома — потому как количество классов и реализованных в них селекторов существенно меньше. Наибольшая проблема в Foundation сейчас наблюдается с документацией, так как попробовать Cappuccino приходят люди без знаний Cocoa, и находят скудно описанные методы, по которым их код иногда говорит намного больше чем документационный комментарий. Ситуация усложняется тем, что для генерации API документаци в Cappuccino применяется Objective-C парсер от Doxygen, который на некоторых местах отличного от Objective-C синтаксиса просто останавливается.

В багтрекере наблюдается несколько патчей, расширяющих функциональность Foundation, но их не спешат добавлять в апстрим. Возможно потому что авторам патчей для начала необходимо подписать Contributor's License Agreement, по сути — договор на передачу всех прав на код в 280 North. Это не является какой-либо проблемой (если вы пишете патч в фреймворк — в большинстве случаев вы не против, что бы там с ним делали все что угодно), но отпугивает тех программистов, которые не хотят связываться с «бумажной мишурой», а так же создает очереди из патчей в апстрим.

Ситуация с AppKit в целом идентична Foundation. Классы пользовательского интерфейса адаптируются к реалиям Веб, что несколько видоизменяет их в процессе. Очень не хватает CPTableView, аналог которого в Cocoa выполняет все задачи по реализации интерфейса таблиц и списков. Key-Value Observing отсутствует, вместе с ним и аналог Cocoa Bindings, таким образом данные можно передавать только через делегатов. Программистам не знакомым с Cocoa сложно понять модель позиционирования видов (по этой теме есть даже отдельный туториал). Вообще, компоновка интерфейса занимает достаточно много времени. На экспериментальной стадии находится nib2cib — конвертер nib и xib файлов (описания интерфейса от Interface Builder) в родной для Cappuccino формат. Конечно через IB проектировать интерфейс проще и привычнее, но во-первых результат всегда приходится существенно дорабатывать напильником, а во-вторых Interface Builder есть только у пользователей OSX.

В последнее время ситуация с Cappuccino улучшается. Наводится порядок в багтрекере, улучшается документация по базовым понятиям языка (для рядовых html/css/js веб-разработчиков). Потенциально — за Cappuccino лежат широкие возможности. Даже сейчас делать богатые интернет-приложения на Cappuccino во многих случаях проще, чем на ориентированных для этого js-тулкитах (например Bindows).
Теги:
Хабы:
+4
Комментарии 5
Комментарии Комментарии 5

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн