26 апр. 2014 г.

RemObjects Oxygene vs Delphi

Oxygene (известный ранее как Chrome и Delphi.Prism) - язык программирования, разработанный RemObjects на основе Object Pascal и, фактически, являющийся его дальнейшим развитием. Новые возможности языка (оператор ":", анонимные конструкторы, асинхронный и отложенный вызовы методов, асинхронное выполнение блока кода, параллельные циклы и многое другое), элементы контрактного и аспектно-ориентированного программирования  "из коробки" делают Oxygene очень удобным для создания эффективного, кроссплатформенного и легко читаемого кода.


Краеугольным камнем Oxygene является идея ОС-нативной разработки ПО. Это значит, что, пишите ли вы приложение под Windows, MacOS/iOS или Android, ваше приложение будет выполняться в специфичном для конкретной операционной системы окружении: в Windows, Windows RT и Windows Phone это будет .NET; в MacOS/iOS - Cocoa-приложение и т.д. Кроме того, пользовательский интерфейс вашей программы будет использовать родные для выбранной платформы элементы управления.

Теперь же рассмотрим те особенности Oxygene, которые выгодно отличают этот язык программирования от Delphi.

"Железо"


Компилятор Delphi не позволяет создавать 64-разрядные приложения для MacOS, хотя эта ОС уже с 2007 года, раньше, чем Windows, является 64-разрядной. Ни один серьезный разработчик приложений под MacOS не будет ограничиваться только 32-разрядной версией своего приложения.

Компилятор Delphi не имеет возможности создавать 64-разрядные приложения под iOS, несмотря на то, что все флагманские устройства от Apple - iPhone 5S, iPad Air и iPad Mini - используют мощности 64-разрядного процессора A7.
 
Ограниченная поддержка Android-устройств. Android-устройства используют широкий спектр различных процессоров - от ARM до Intel Atom. Однако приложения, созданные в Delphi, требуют только конкретные CPU и GPU и не могут быть запущены на других устройствах.

И хотя маркетологи Embarcadero убеждают разработчиков в подлинно нативной поддержке Android, тем не менее Delphi использует NDK в обход Android SDK. Google же не рекомендует использовать NDK для разработки прикладного ПО. Компилятор Delphi фактически "обертывает" NDK-код в шим (shim), чтобы Dalvik смог выполнить его. Вряд ли это можно назвать "подлинной нативностью"!

Delphi не поддерживает разработку приложений для Windows Phone, хотя эта платформа с каждым днем становится все более популярной и может стать одним из трех основных игроков на рынке мобильных платформ. Как заявляют в Embarcadero, компания не заинтересована в поддержке этой платформы, по крайней мере, не ранее реализации поддержки Blackberry. И это логично, так как поддержка Windows Phone не может быть реализована с помощью одного лишь "подлинно нативного" компилятора.

Oxygene же лишен этих недостатков. Написанные с помощью него программы под Android используют Android SDK, поэтому могут быть запущены на любом устройстве. Использование же .NET для разработки Windows-приложений позволяет создавать программы, прекрасно работающие на устройствах под управлением Windows Phone и, даже, под Windows RT.

Пользовательский интерфейс


Для создания пользовательского интерфейса в кроссплатформенных Delphi-приложениях используется фреймворк, получивший название Fire Monkey, или FM.

FM не использует родные для выбранной платформы элементы пользовательского интерфейса. Вместо этого для эмуляции родственного внешнего вида приложения используются темы оформления. Поэтому такие приложения практически всегда выглядят как нечто инородное, особенно на мобильных платформах, где как ведет себя элемент UI, как он взаимодействует с пользователем, не менее важно того, как он выглядит. 

Более того, это означает, что приложения, использующие FM, не могут самостоятельно адаптироваться к изменениям пользовательского интерфейса платформы. Разработчики фактически зависят от того, насколько быстро Embarcadero сможет обновить темы оформления для своих компонентов. Так, например, было, когда разработчики, купившие Delphi XE4, вынуждены были спешно приобретать XE5, чтобы адаптировать свои приложения под новый внешний вид iOS 7, несмотря на то, что эта версия операционной системы от Apple была анонсирована незадолго до выхода XE4.

Oxygene, в свою очередь, всегда (!) использует родные для выбранной платформы компоненты UI.

Размер приложения


Компилятор Delphi на выходе всегда создает исполняемые файлы значительного размера (или исполняемые файлы со сложными зависимостями от пакетов времени выполнения). Это относится и к VCL-приложениям, и, особенно, к FM-приложениям. Связано это с тем, что приложение должно распространяться с фреймворком.

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

Так как Oxygene использует родные для выбранной платформы фреймворки, то и размер таких приложений очень мал. Простое приложение может "весить" всего лишь несколько десятков килобайт.

Язык


Посмотрим правде в глаза: за исключением небольших изменений (например, обобщенные классы (generics), к тому же нестабильные), Delphi фактически остается неизменным с середины 90-х годов прошлого века. Сейчас же он выглядит значительно устаревшим! Например, разработчик также, как из 20 лет назад, вынужден полностью контролировать жизненный цикл созданного объекта. И пусть в последних версиях Delphi появился автоматический подсчет ссылок, но это новшество часто привносит лишь неразбериху (об этом ниже).

Oxygene начал свое развитие в 2004 году как значительная надстройка над Delphi. С тех пор язык продолжает эволюционировать, включая в себя все новые и новые возможности, которые позволяют сократить время разработки и способствуют разработке все более эффективного кода.

Но это не значит, что Oxygene сложен для обучения, ведь это все тот же Object Pascal! Новые возможности языка можно изучать по мере необходимости. Например, вы можете написать большое количество кода без использования оператора ":", но однажды применив этот оператор, вы уже не сможете без него обходиться. 

"Кроссплатформенное заблуждение"


Маркетологи Embarcadero убеждают нас, разработчиков, что им удалось найти Святой Грааль разработки ПО. Они утверждают, что единожды написав код для одной платформы, мы сможем использовать этот код повторно и на остальных платформах. Насколько же правдиво это утверждение?

Разработка мобильных приложений в Delphi значительно отличается от разработки настольных приложений. Если вы решили перенести код обычного приложения на мобильную платформу, то будьте готовы к боли: нужно учитывать 0-индексацию в строках; 8-битные (состоящие из 8-битных символов) строки, включая ANSI и UTF-8, более не доступны, и других возможностей заменить их в вашем коде нет. Отличается и модель управления памятью: в мобильных приложениях используется автоматический подсчет ссылок, в то время как в настольных приложениях по-прежнему разработчик вынужден использовать "ручное" управление жизненным циклом объектов. Таким образом, портировать код с одной платформы на другую вряд ли получится также легко, как заявляют в Embarcadero.

Конечно, Oxygene не гарантирует переноса кода с одной платформы на другую "как есть", но разработчик всегда может быть уверенным: строки всегда 0-индексированы, а жизненным циклом объектов управляют автоматический подсчет ссылок и сборщик "мусора".

Разработка классических Windows-приложений


Единственным направлением, в котором Delphi долгое время сохранял преимущество, оставалась разработка приложений под Windows. В те времена VCL была замечательной и такой необходимой надстройкой над неудобным Win32 API.

С тех пор много изменилось в Windows, но не в Delphi. VCL остается практически неизменной на протяжении как минимум последних десяти лет и, по мнению многих разработчиков, заброшенной. Embarcadero сконцентрировала свои усилия на разработке Fire Monkey в ущерб VCL, но значительное число разработчиков сходится в мысли, что Fire Monkey еще очень далеко, чтобы заменить собой VCL. В большей мере это касается разработки Windows-приложений.

В то же время, Microsoft продолжает упорно продвигать собственный набор API для разработки приложений. Это .NET Framework, который стал, de facto, стандартом  разработки приложений для Windows, несмотря на Embarcadero, которая своими манипуляциями пытается убедить разработчиков в обратном.

И, конечно же, это новая платформа WinRT, которая представляет собой дальнейшее развитие платформы .NET и которая легла в основу Windows 8 и Windows RT. Но о них чуть позже.

В Embarcadero не могут предложить ничего, кроме пустых разговоров, когда речь заходит о .NET и WinRT. Маркетологи компании могут лишь пугать разработчиков и сравнивать .NET со скриптовыми языками.

С Oxygene разработчики получают полный доступ ко всем возможностям .NET и WinRT, получая возможность создания любых приложений от классических (используя WinForms и WPF - фреймворк, который разработчики Fire Monkey пытаются повторить) до приложений Metro и программ для Windows Phone и устройств, работающих под управлением Windows RT.

Вы сказали "Windows 8"?


Delphi не поддерживает разработку для Windows RT и создание приложений Metro для Windows 8, несмотря на то, что в Embarcadero заявляют обратное и поставляют темы оформления, призванные заставить выглядеть настольные приложения как приложения Metro. Однако подобные приложения на самом деле не являются приложениями для Windows 8 и не могут быть запущены на устройствах под управлением Windows RT, например, на Windows Surface.

С выходом Windows 8.1 стало ясно, что Microsoft не намерена отказываться от выбранного направления, и что разработка приложений для нового интерфейса и Windows Store становится еще более приоритетной для задумывающихся о своем будущем разработчиков. 

Как уже было сказано выше, Oxygene, поддерживая разработку .NET и WinRT приложений, обеспечивает и разработку программ с новым пользовательским интерфейсом.

Oxygene - Object Pascal XXI века


Итак, Delphi был замечательным средством разработки 10 или 15 лет назад, способствуя популярности Object Pascal, который мы все так любим. Но Delphi уже стар и не может идти в ногу со временем.

Oxygene - это язык следующего поколения, который вы полюбите и который не перестанет быть актуальным и через десять или, даже,  двадцать лет!

Ссылки:


Скачать пробную версию можно здесь. Компилятор распространяется без ограничений.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.