В 2013 г. продолжилось развитие средств кросс-платформенной разработки с акцентом на поддержку мобильных ОС. Причём практически все такие системы хорошо расширяемы: при появлении новой ОС и наличии интереса разработчиков соответствующая поддержка может быть встроена в оболочку в считанные месяцы. Однако ориентируются подобные решения в основном на небольшие группы разработчиков и развлекательные проекты. Какие же кросс-платформенные среды разработки сегодня можно выбрать под корпоративную задачу, дабы через полгода после старта не пришлось все наработки переносить на другую технологию?

Как не улететь в облака

Классическая клиент-серверная архитектура отлично здравствует и поныне, как минимум идеологически: всегда имеется серверный бэкграунд и множество клиентов. Облачная архитектура с технической точки зрения — это её частный случай, когда применяется не один сервер, а кластер, возможно, из географически распределённых машин. Различия же между конкретными проектами сводятся к десяткам специфичных количественных характеристик, которые в сумме сильно влияют на выбор той или иной конечной архитектуры. Клиент может быть настольным или мобильным; может быть “родным” приложением, а может работать только в браузере (зачастую требуя при этом дополнительные подключаемые модули); может быть “толстым”, даже на телефоне реализуя сложную логику обработки и визуализации получаемых от сервера полусырых данных (недаром в последние версии кросс-платформенных сред входят уже и локальные СУБД для смартфонов), а может быть и совсем “тонким” (лишь отображая сгенерированный сервером экран; это направление сейчас активно осваивает Amazon); может работать с клавиатурой или управляться исключительно сенсорно и т. п.

С серверной частью нюансов ещё больше. Нужен ли сервер бизнес-логики? Как организовать его взаимодействие с СУБД? Какой сервер баз данных выбрать, реляционный или NoSQL? Как масштабировать такую связку, какое ПО промежуточного слоя подойдёт лучше всего? Даже вопрос выбора серверной ОС из единичных вариантов не тривиален. Отдать судьбу проекта в руки одного-двух уникальных специалистов, которые завтра надумают перейти на “облачную” зарплату в банк, или набрать легко заменяемых разработчиков среднего качества? Система может с успехом выдерживать по нескольку тысяч подключений в тестовых испытаниях, но из-за известных внутренних особенностей намертво зависнет на 10—15 тысячах онлайновых пользователей — и таких нюансов множество.

Что предлагает рынок корпоративному разработчику?

Организовать поддержку коллективной работы программистов сегодня несложно: достаточно установить хорошую систему контроля версий наподобие свободной Git, которая уже превращается в универсальную среду взаимодействия разработчиков, отслеживания ходы задач и пр. Недаром она выбрана в качестве стандарта для Microsoft Team Foundation. А вот каким конечным инструментарием пользоваться, на чем будут программировать разработчики? Типовые инженерные решения для серверной части обычно сводятся к трём вариантам:

- Microsoft Visual Studio для Windows/.NET/WinRT. Недостаток — привязка только к Windows, преимущество — возможность использования удобных языков и платформ программирования, которым массово обучают и соответственно проще найти программистов;

- Eclipse для Java. Плюс — в кросс-платформенности языка, минус — в привязке к сложной Java: одно лишь число классов в библиотеках Java приближается к пяти тысячам, да и проблемам с безопасностью не видно конца, развивается же Java медленно, а зарплата Java-разработчиков весьма высока, и найти их сложно. Потенциально сильное решение — обосноваться на каком-либо языке, использующем виртуальную машину JVM, но такие программисты являются ещё большей экзотикой;

- Linux — компиляторы GCC, среды разработки KDevelop, Eclipse. Плюсы в высоком потенциале и мощности самой платформы, минусы — в практически полном отсутствии незанятых специалистов на рынке при их сопутствующей дороговизне.

Ещё один набирающий популярность тренд — перенос традиционных клиентских веб-технологий (прежде всего JavaScript) на серверы. В частности, в ноябре 2013-го было зафиксировано крупнейшее внедрение свободной серверной системы Node.js на движке V8 в сервисе коллективных скидок Groupon, который перешел на JavaScript с Ruby. Тут же можно упомянуть сценарные языки наподобие PHP, но область их применения почти всегда ограничена веб/сайтостроением. Они уже слабо подходят для масштабных проектов, особенно связанных с реальным временем, где необходимо минимизировать время отклика системы.

Интересно, что самих по себе кросс-платформенных технологий программирования существует немало. Разработаны десятки языков программирования, код на которых компилируется под самые разные ОС. Субъективно отмечу большой потенциал языков функционального программирования, однако порог вхождения в эти технологии применительно к масштабным проектам всегда будет очень высоким. Главные же их минусы — слабая расширяемость, невнятная техподдержка, общая нехватка “корпоративности”, а прежде всего проверенной и отработанной годами технологии взаимодействия с СУБД и ПО промежуточного слоя, “тяжёлых” средств проектирования типа UML, удобных оболочки и отладчика.

Идеальная среда создания корпоративных систем

Применительно к сегодняшним реалиям идеальная среда корпоративной разработки должна сочетать комфортность и простоту Visual Studio (с учётом знакомства с ней почти любого кодировщика), поддержку нескольких языков программирования, кросс-платформенную разработку и отладку в рабочей ОС клиентской (с учётом мобильных веяний) и серверной частей, визуальные механизмы организации UI и взаимодействия с СУБД, а также универсальные средства интеграции и стыковки с ПО промежуточного слоя, включая облачные сервисы.

Пока что в этом направлении движутся две системы — Embarcadero RAD Studio (известная прежде всего как продукт Delphi) и Eclipse. Для последней характерен довольно высокий порог входа, а кроме того, мягко говоря, в ней трудно создавать полноценные “родные” приложения для iOS. Да и создание приложений под Android на Java остаётся весьма сложным процессом.

Интересно, что 85% разработчиков под Windows отмечают, что в самом ближайшем будущем им придётся создавать приложения для мобильных устройств. Все они хотят разрабатывать именно “родные” программы, а не, например, HTML5/JavaScript-скрипты, обёртываемые интерпретирующим модулем. Но лишь 17% верят, что такое возможно при создании ПО для двух и более платформ. Более того, люди, привыкшие к комфорту C#, с большим трудом переходят на кодирование с помощью JavaScript.

XE5 нацелена на корпоративность

Проверенные временем системы с развитой оболочкой, генерирующие “родной” код (или близкий к нему, с интерпретируемыми вставками либо со средой поддержки времени выполнения) для разных платформ, предлагающие нормальную техподдержку, можно счесть по пальцам одной руки.

Начнем с RAD Studio XE5. Данная версия пополнилась поддержкой Android, и даже СУБД InterBase портирована на эту ОС. А создание программ для iOS уже присутствовало ранее — при этом iOS-приложение можно скомпилировать непосредственно в Windows (что многие среды не позволяют: надо устанавливать специальные версии для Mac), остается лишь развернуть его на айфоне. Таким образом, Embarcadero вопрос с кросс-платформенностью практически закрыла — посредством соответствующей технологии FireMonkey. Пока остаются определенные концептуальные отличия в компиляторах для Win32/Win64 и Mac OS X, а также для Android и iOS, где используются наработки проекта LLVM (в его качестве можно не сомневаться, так как LLVM применяет сама Apple). Но далее всё будет полностью переведено на LLVM, хотя это потребует определенных изменений в языке Delphi и ряда внутренних модификаций среды поддержки времени выполнения. Данную “поддержку” приложению придётся всегда “тащить” с собой, правда, занимает она 5—7 Мб, что по современным меркам непринципиально даже для мобильных приложений. К минусам FireMonkey надо отнести высокие минимальные требования к платформам: Android 2.3.3 и iOS 6 (при том, что iOS 5.1, на долю которой сейчас приходится около 5% активно используемых гаджетов, в абсолютных цифрах установлена на десятках миллионов устройств).

Главное же в XE5 — это корпоративность. К самым разным источникам данных приложение может подключаться с помощью технологий FireDAC и dbExpress (последняя развивается, по-моему, уже не один десяток лет). Поддерживаются Microsoft SQL Server, IBM DB2, Oracle, MySQL, PostgreSQL, InterBase, Sybase, Firebird, ODBC и др. Для построения многозвенных архитектур предназначена технология DataSnap — она понимает множество протоколов и платформ (REST, HTTP, TCP/IP, JSON, XML, PHP, JavaScript, .NET и др.). Клиенты под созданную на базе DataSnap серверную часть могут быть написаны на любых языках, необязательно с помощью DAR Studio: таким образом, можно использовать как ПК и браузеры, так и любые мобильные гаджеты, от Windows Phone до Blackberry. Обновленный набор компонентов Delphi RAD Cloud понимает облачные службы Amazon и Microsoft Azure. Важная корпоративная добавка — клиент REST-интерфейсов, позволяющий подключаться к популярным сервисам от социальных сетей и платежных систем до виртуальных серверов и облачных хранилищ данных. На его основе можно создавать кросс-платформенные приложения, которые будут не только работать на разных гаджетах, но и поддерживать множество дистанционных служб как в корпоративной сети, так и во внешних облаках.

Кросс-платформенные конкуренты

Пожалуй, ближайшим конкурентом Embarcadero может стать фирма Xamarin (“кусочек” Novell), развивающая свободную реализацию платформы Microsoft .NET под названием Mono и дополняющая ее собственными коммерческими технологиями. Так, в ноябре 2013 г. было анонсировано официальное партнерство с Microsoft по интеграции Xamarin и Visual Studio. Таким образом, под основные мобильные платформы можно будет программировать с помощью C#/.NET, применяя одновременно корпоративный функционал Visual Studio.

Почти одновременно с этим анонсом на рынок был выпущен кросс-платформенный движок Unity3D 4.3, исходно создававшийся для разработки 3D-игр на основе Mono и C# (можно также писать код на JavaScript). Он поддерживает Windows, Mac OS X, Linux, четыре ведущие мобильные платформы и три вида приставок и может работать в настольных браузерах с помощью подключаемого модуля, который в последнее время начинает заметно конкурировать с флешем. Разработчикам доступна полноценная бесплатная версия, а главное, в 4.3 добавилась поддержка 2D-приложений, что делает возможным применение Unity3D для создания офисного и бизнес-ПО.

В ноябре появилась и качественно новая, седьмая версия кросс-платформенной среды Marmalade, где программирование ведется на C++ и Lua. Она в дополнение к классическому набору востребованных настольных и мобильных ОС поддерживает Tizen и Smart TV. Только бесплатной версии нет.

Объединяет эти три главные на сегодня кросс-платформенные системы генерация “родного” или близкого к таковому кода (это плюс) и почти полное отсутствие корпоративности, так как орентируются они во многом на разработчиков игр (это минус).

Даже у Delphi есть соперник

Интересно, что язык Паскаль (точнее, его Borland-реализация Object Pascal или, по нынешним временам, язык Дельфи) оказался столь удачным, что в конкуренцию с Embarcadero на её собственном поле не побоялась вступить компания RemObjects. Это объяснимо: активно продвигаемый апологетами кросс-платформенной разработки язык C#, идеологически хорошо подходящий под такую задачу, был разработан в Microsoft Андерсом Хейлсбергом, который в 1980-х придумал Object Pascal для компании Borland. В итоге, например, переход с Дельфи на C# и обратно практически не вызывает сложностей у программистов.

RemObjects продвигает систему Oxygene, которая представляет собой реализацию языка, сильно похожего на объектный Паскаль. Код на нем также компилируется в “родные” приложения для множества платформ: Windows .NET (включая Silverlight, WinRT, Windows Phone, Mono), Mac OS X/iOS (на базе Cocoa) и Java/Android. Вдобавок система хорошо интегрируется в популярные оболочки разработки наподобие Microsoft Visual Studio 2012. Кроме того, ведется работа по компиляции под платформы Cocoa и Java не только кода Oxygene, но и программ на C#. Кстати, технологии Xamarin из кода C# выдают отнюдь не целевой код выбранной платформы, а вот Marmalade транслирует C++ как положено, в команды Intel или ARM. Подход RemObjects близок к Marmalade: даже от Delphi система Oxygene отличается большей эффективностью. Исполнимому Delphi-коду, как уже говорилось, требуется среда поддержки времени выполнения FireMonkey (5—7 Мб), а Oxygene создает истинно “родной” исполнимый код: для Java это будет компактный байт-код, для Cocoa — LLVM-код, для .NET — IL-код. Минусы Oxygene те же, что и у его коллег: предлагаются не сильно богатые библиотеки, невысокая активность в плане развития, перспективы непонятны, а вот стоимость “кусается”. И тем не менее малому бизнесу, заинтересованному в особой производительности, имеет смысл присмотреться к Oxygene. Сама RemObjects свой продукт позиционирует как раз для программистов с опытом работы на Delphi, которым не нужна корпоративность, реализуемая “тяжелыми” компонентными технологиями фреймворка DAR Studio, а желательно создание легких и быстрых приложений, максимально приближенных к специфике конкретной ОС. Для этого в язык Oxygene внесены специальные расширения, включая даже небольшую поддержку асинхронных и параллельных вычислений. Но целевая аудитория Oxygene, конечно, пока остается весьма узкой.

Резюме

Рынку не слишком хорошо, когда выраженную технологическую потребность решает только одна система. Конечно, “родной” код не всегда автоматически будет более продуктивным, нежели интерпретируемый, многое зависит и от мастерства программиста. По этой причине веб-технологии и облачные системы, ориентированные на браузеры, включая и мобильные, сегодня играют лидирующую роль на рынке создания онлайновых корпоративных систем. Однако существует множество задач, где возможностей HTML5/JavaScript явно недостаточно: например, при реализации режима реального времени для обмена данными между клиентом и сервером или в случае, когда клиент должен быть “толстым”, хранить объёмные локальные данные и выполнять их анализ (а в системах больших данных это уже стандарт). Поэтому Delphi на сегодня пока остаётся единственной системой корпоративной нацеленности, которая создает исполнимый код под четыре ведущие платформы — Android, iOS, Mac OS X и Windows — на единой кодовой базе (C++ или Delphi). В дальнейшем, по неподтвержденным пока сведениям, возможна реализация под Linux серверной функциональности, связанной прежде всего с модулями промежуточного слоя и взаимодействия с СУБД. Возможно также, что-то корпоративное в 2014-м вырастет из партнёрства Microsoft и Xamarin, но случится это не быстро.