Чтобы установить остальные продукты, включая Delphi Prism, требуется закачать соответствующие пакеты из Сети.

Внешний вид Delphi XE — стабильность и эргономичность

Самые большие изменения, как всегда, случились не там, где их ждали: вышла новая мощная версия программы Delphi Prism — инструментария для программирования под платформу .NET/Mono. Теперь Delphi Prism интегрируется со средами разработки MS Visual Studio 2008, 2010 и MonoDevelop.

Рассмотрим вкратце отдельные новшества.

Для начала удостоверимся, что параллельные вычисления так же успешно кодируются в Delphi Prism, как и в языке C#. Проведем простой опыт с параллельными вычислениями для Delphi Prism, создав несложную процедуру. Это можно быстро сделать в MS Visual Studio 2010 либо в MonoDevelop.

class method ConsoleApp.Main (args: array of string);

var i:Integer;

begin

var gtс1:=DateTime.Now; //Время начала вычислений

// for i:=0 to 100 do begin первый вариант

for parallel i:=0 to 100 do begin //второй вариант

var k:Integer;

// for k:=0 to 100 do begin — первый вариант

for parallel k:=0 to 100 do begin //второй вариант

Console.Write (‘-’);

var m:Integer;

for m:=0 to 500000 do begin end;

end;

Console.Write (‘.’);

end;

var gtc2:=DateTime.Now; //Конец вычислений

Console.WriteLine (gtc2‑gtс1);

Console.ReadLine;

end;

end.

Результат выполнения процедуры с использованием обычных вычислений (слева) и с использованием параллельных вычислений (справа)

Мы получим разные значения времени выполнения процедуры в зависимости от использования в коде служебного слова parallel, которое позволяет производить параллельные вычисления, эффективно используя много­ядерную архитектуру компьютера.

Методы расширения (или «расширяющие» методы, впервые появившиеся в языке C# 3.0) позволяют почти на ходу достраивать нужными методами уже имеющиеся классы. Для наглядности возьмем тип данных Int32.

extension method Int32.ПриветВам: String;

implementation

extension method Int32.ПриветВам: String;

begin

Exit (‘привет от Delphi Prism ‘+self.ToString+’ раз ‘);

end;

class method ConsoleApp.Main (args: array of string);

begin

var i:=100;

Console.WriteLine (i.ПриветВам);

Console.ReadLine;

end;

Интересно рассмотреть и новый класс Tuple — класс фабрики, предоставляющий статические методы для создания экземпляров типов кортежей. Проще говоря, если вам быстро надо где-то сделать какую-либо последовательность из элементов, которые к тому же могут быть разного типа, то Tuple — это то, что надо.

method Выбрать_Два (aTuple: Tuple): Tuple;

begin

result:= [aTuple.Item1, aTuple.Item2];

end;

class method ConsoleApp.Main (args: array of string);

begin

var Выбор:=

Выбрать_Два (Tuple.Create (‘Каждую ночь’,

‘когда падает снег’,

‘Тихо ложась на оконные рамы’));

Console.WriteLine (Выбор.Item1);

Console.ReadLine;

end;

Тут наблюдается забавная картина: нарушается совместимость с традиционным языком Delphi. Компилятор открыто об этом скажет, если в момент компиляции будет включена поддержка явного использования служебного слова Create в качестве конструктора, так как в этом случае Create — не конструктор. Следовательно, чтобы в MS Visual Studio сборка завершилась успешно, нужно отключить в свойствах проекта параметр Allow ‘Create’ constructor calls.

Волшебное всепрощающее слово dynamic (www.osp.ru/pcworld/2010/06/13003029/) наконец-то также добралось до Delphi Prism. Теперь компилятор можно просить о чем угодно, конечно беря на себя всю ответственность за последствия в режиме запущенной на выполнение программы:

method Сложить (left, right: Dynamic): Dynamic;

begin

exit (left + right);

end;

class method ConsoleApp.Main (args: array of string);

begin

Сложить (‘Delphi ‘,’Prism XE’). ПолныйПривет:=’Ура!!! ’;

end;

Динамические типы позволяют полностью абстрагироваться от вопроса определения конкретного типа данных на этапе компиляции проекта, причем компилятор не выдает сообщение об ошибке. Но в случае ошибочного алгоритма есть риск получить соответствующее сообщение уже во время выполнения программы.

Несколько слов об уже имеющейся кросс-платформенности

Чтобы сказать, что имеется кросс-платформенный инструментарий Delphi (не путать с кросс-платформенной средой исполнения или кросс-платформенным языком!), требуется как минимум соответствующий пакет установки. А он сейчас имеется только для Windows, не считая отдельного специально подготовленного пакета MonoDevelop для Mac OS X. Следовательно, все заявления о Delphi для Linux и Mac OS можно все еще считать результатом сокровенных ожиданий или путаницы в головах относительно Delphi и Delphi Prism, и не более того.

Действительно, сейчас уже можно испытать всю мощь программирования под управлением Mac OS X на Delphi Prism. Для этого (если начинать с нуля) требуются сама Mac OS X, установочный пакет платформы Mono и собственно MonoDevelop для Mac OS X, относительно стабильности работы которого автор позволит себе высказать сомнения.

Куда привычнее программировать в MS Visual Studio, тем более что Delphi Prism уже прочно обосновался в этой интегрированной среде.

Кстати, в MS Visual Studio можно при желании интегрировать не только Delphi Prism. Там одинаково удачно будут смотреться и Fortran, и PHP.

На закуску создадим на Delphi Prism (в MS Visual Studio 2010) простенький проект «Часы» и попробуем запустить полученную программу в трех разных операционных системах. Так будет выглядеть самая сложная часть программы:

method MainForm.timer1_Tick (sender: System.Object; e: System.EventArgs);

begin

self.label1. Text:=System.DateTime.Now.ToLongTimeString;

self.Text:=System.DateTime.Now.ToShortDateString;

end;

Результаты, как видно на соответствующих рисунках, получились вполне удовлетворительные.

Часы под Fedora 13

По поводу Linux стоит отметить одну особенность: в некоторых дистрибутивах уже имеется платформа Mono, причем не всегда свежая ее версия, что объясняется якобы ее стабильностью (например, это практикуется в операционной системе Debian GNU/Linux). Программисты Delphi Prism должны об этом помнить.

Часы под Mac OS X

* * *

Интеграция Delphi Prism в MonoDevelop слегка смазана тем фактом, что в последнем никогда не существовало своего визуального дизайнера для Windows Forms, визуализация присутствует лишь для GTK#, что объясняется изначальной ориентацией MonoDevelop на Linux.

На самом деле сложилась парадоксальная ситуация, когда по ряду модных нововведений тот же Lazarus (www.lazarus.freepascal.org) уже давно успел обогнать Delphi, и есть ли особый смысл в реанимации идей, заложенных когда-то в Kylix, в наше время уже непонятно. Ведь по опыту известно, что для доведения новой технологии до ума нужно около пяти лет.