Это, наверное, единственный пост на тему Delphi Prism, который читатели DelphiFeeds.ru, да и вообще те, кто подписан на RSS-канал блога могут увидеть в подписке. Не потому, что я жадный или ещё что-то в таком духе. Просто тема работы с Delphi Prism (во всяком случае в моем понимании) никак не согласуется с разработкой программ в Delphi for Win32, есть, конечно много чего общего в плане синтаксиса, реализации некоторых возможностей, но всё-таки суть несколько разная. Да и пока особенно не стремлюсь в .NET, скорее просто расширяю свой кругозор по этой теме, смотрю, что есть, чего нет, какой язык больше понравится, если вдруг когда-нибудь придётся выбирать (вряд ли, конечно), следовательно раздел, скорее всего будет мелким и содержать небольшие заметки, мысли по сабжу, может сравнения возможностей и т.д. Поэтому, чтобы не напрягать ленту нашего Delphi-аггрегатора я вынесу категорию Delphi Prism за пределы RSS-ленты сразу после публикации этого поста (по другому нельзя), но оставлю возможность вывода постов из этой категории на главную страницу блога. Если тема Вам будет интересна – заходите, читайте, обсуждайте. Сегодня будет немного рассуждений на тему использования Prism.
Delphi Prism – что за зверь?
Delphi Prism — среда разработки под .NET и Mono Framework на языке Oxygene, который, в свою очередь, разрабатывался на основе языка Object Pascal. Кому интересно узнать более подробные сведения – ссылка на wiki.
Если теперь посмотреть в wiki Delphi Prism, то увидим следующее:
Delphi Prism — это язык для .NET. Когда вы пишете программу в Delphi Prism, вы пишете .NET-программу. Delphi Prism предлагает все возможности .NET Framework…
Кому верить? По мне так особенно и без разницы – главное, чтобы было удобно, а разбираться в том, что это “язык” или “среда” оставим на откуп маркетологам, PR-щикам и просто любителям покопаться в понятиях.
Delphi Prism устанавливается как аддон в Visual Studio и использует все возможности этой IDE. Кстати, про возможности, думаю, немного расскажу, но позднее.
Считать такое действие (установку в качестве аддона) плюсом или минусом? Не важно, что я скажу по этому поводу, т.к. это будет чисто субъективное мнение, основанное на личном использовании той или иной IDE. Хоть и есть небольшой опыт использования и VS и более обширный — RAD Studio. Здесь каждый решает сам, например, мне очень понравился в VS процесс отладки программ – как все устроено, но не нравится как распределены горячие клавиши, как располагаются окна (даже, если их настраивать) и т.д. – приходится сразу настраивать IDE “под себя”. Вот такие пока “тараканы” в отношении выбора IDE. Все эти мелочи вполне решаемы – можно настроить IDE, можно просто привыкнуть и все, но по поводу этих мелочей можно спорить сколько угодно и при этом не прийти ни к какому выводу, т.к. все эти мнения субъективны.
А вот с чем не поспоришь, так это с цифрами.
Популярность Delphi Prism.
Надо сказать (и это не будет ни для кого секретом), что ни Delphi Prism ни язык Oxygene не являются популярными среди разработчиков. И об этом свидетельствуют все – простые разработчики в обсуждениях на форумах, популярные рейтинги типа TIOBE, просто статистика запросов в Сети.
Пример: запрос “Delphi Prism” задавался в Яндекс за прошедший месяц всего 802 раза:
В то время как запросы просто по Delphi и C# исчисляются сотнями тысяч и даже миллионами. Собственно, числа более, чем говорящие – Delphi Prism не популярен. Зачем же я полез в то, что никому не надо? Интерес, простой интерес и, возможно, когда-нибудь мой интерес окажется мне на пользу. Посмотрим.
После столь обширного введения приступим, наконец-то, к непосредственному знакомству.
Hello, Delphi Prism!
Начнем знакомство с привычного для всех начинающих приложения, которое выведет нам на экран приветствие.
Для начала, скачиваем дистрибутив Delphi Prism с официального сайта разработчика (30-ти дневный триал).
Так как для работы нам необходима IDE Visual Studio, то идем в гости к Microsoft и скачиваем дистрибутив, скажем 90-та дневный триал Visual Studo 2010.
Вначале устанавливаем Visual Studio 2010, после этого – Delphi Prism.
Теперь, когда все готово для начала работы, открываем VS 2010 и в главном меню выбираем:
Файл – Создать – Проект:
В открывшемся окне выбираем раздел “Delphi Prism – Windows” и тип проекта “Console Application”
Также в этом окне можно выбрать версию .NET Framework, задать название и расположение нашего проекта. Жмем “Ok” и для нас будет создан простой шаблон консольного приложения, который уже фактически содержит всё, что нам на данном этапе необходимо:
Всё, что нам теперь осталось – это изменить строку “Hello, World” на “Hello, Delphi Prism” и задача решена. Не интересно? Да, реализация элементарная – мы не написали ничего, кроме строки для вывода на экран, но этот пример показателен именно своим содержимым, особенно тем, кто до этого имел дело с Delphi.
Вроде бы и выглядит весь код до боли знакомо и, даже понятно с первого взгляда, но всё же что-то не то и не так. Давайте разберемся прямо по строкам, что “то”, а что “не то”.
Первая строка:
namespace HelloPrism;
Определяет новое пространство имен для проекта. До сих пор мы привыкли оперировать такими понятиями, как «модуль» и «файл», а «пространство имен» — это для нас пока внове.
Пространство имен может распространяться на несколько файлов проекта и упорядочивают объекты, определенные в сборке. Сборки могут содержать несколько пространств имен, которые, в свою очередь, могут содержать другие пространства имен. Пространства имен предотвращают неоднозначность и упрощают использование ссылок при использовании больших групп объектов, таких как библиотеки классов.
Одно и то же пространство имен может встречаться в разных файлах проекта и это не будет ошибкой. Например, используя наш проект, выберите в Обозревателе решений его название, кликните правой кнопкой мыши и в контекстном меню выберите “Добавить элемент…”. Добавьте в решение новый класс и получите следующую заготовку для нового класса:
namespace HelloPrism; interface uses System.Collections.Generic, System.Text; type Class1 = public class private protected public end; implementation end.
То есть, если вы решите использовать в работе .NET (не важно, на чем при этом будете писать) придётся привыкнуть к тому, что вместо понятия «модуль» используется «пространство имен». Всегда, кстати, существует хотя бы одно пространство имен для решения — корневое пространство имен, название которого соответствует названию проекта, например, как в нашем случае, HelloPrism. Если потребуется, мы можно определить сколь угодно много пространств имен внутри нашего решения. Если ключевое слово namespase для вас непривычно — в Delphi Prism можно пользоваться и более привычным словом unit — так тоже можно определить пространство имен.
Далее в нашем примере определяется новый класс ConsoleApp. Определение класса выглядит аналогично тому, к которому мы привыкли. Различия же видны в определении методов.
Во-первых, в проекте всегда присутствует хотя бы один метод он же – главный метод.
Главный метод по сути является той точкой входа с которой начинается выполнение программы. Этот метод должен:
- Быть статичным (именно поэтому он определен как class method)
- Всегда иметь название Main
Главный метод может:
- Принимать в качестве аргументов: строку или массив строк. Или не принимать аргументы вообще. Строки используются, если необходимо запустить программу с параметрами командной строки.
- Не возвращать никаких результатов, либо возвращать целое число, например код выхода из программы.
Что будет, если мы объявим в двух классах метод Main? Судя по информации в той же wiki в этом случае в настройках проекта необходимо указать какой из классов будет выступать в роли регулярного (указать свойство Sturtup Object) и именно метод из этого класса и станет главным. Но попробовал применить этот прием на практике – VS заругалась на то, что не может определить главный метод. Так что этот момент отпишем на потом в силу моей неопытности.
Что ещё остается сказать про методы в Delphi Prism?
Как Вы могли заметить в Delphi Prism нет таких понятий как функция или процедура – здесь всё просто методы. Есть методы, которые возвращают результат, а ест методы, которые не возвращают результат. Соответственно, для их определения используется одно ключевое слово – method.
Но, если уж Вам опять же тяжко свыкнутся с мыслью о том, что теперь придётся иметь дело только с method, то не расстраивайтесь – Prism прекрасно понимает и такие ключевые слова как procedure и function. Такой код нормально скомпилируется:
namespace HelloPrism; interface type ConsoleApp = class public class procedure Main(args: array of string); end; implementation class procedure ConsoleApp.Main(args: array of string); begin // add your own code here Console.WriteLine('Hello World.'); Console.ReadKey; end; end.
Вот, пожалуй пока все, что могу сказать после первого знакомства с Delphi Prism. Есть ещё всякого рода «фичи», «плюшки» для Delphi-программистов, с которыми я вкратце ознакомился, но пока ещё не собрал в кучу, чтобы выложить в блоге. Поэтому на сегодня все. Если тема Delphi Prism Вам интересна — следите за одновлениями в блоге.
Я кстати тоже начал двигаться в данном направлении, но пока до статей дело не дошло, так что буду рад еще почитать
сори за оверпост, что касается популярности Delphi Prism, то если бы он появился вместе с С#, то может бы конкурировал немного, а сейчас он будет интересен только Delphi-программистам, которые хотят попробовать себя в .NET, тем более не имеет своего компилятора, кроме покупки самой Prism, надо покупать еще VS
Лично мое мнение
Несколько замечаний. Первое — oxygen не только в .net работает. Благодаря проекту cooper от RemObjects мы получим oxygen for java (android). Второе- oxygen интегрируется также в monodevelop. Соответственно, prism поддерживает также разработку под mono, monoTouch, monoDroid.
Про Mono я в курсе, просто не стал сильно расписывать то, что можно почитать в официальном описании на Embarcadero Мне Prism больше интересен в плане того удобнее ли будет писать программы, чем на С# или нет — сугубо субъективный подход :)