Чтобы установить остальные продукты, включая Delphi Prism, требуется закачать соответствующие пакеты из Сети.
Самые большие изменения, как всегда, случились не там, где их ждали: вышла новая мощная версия программы 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 Выбрать_Два
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;
Результаты, как видно на соответствующих рисунках, получились вполне удовлетворительные.
По поводу Linux стоит отметить одну особенность: в некоторых дистрибутивах уже имеется платформа Mono, причем не всегда свежая ее версия, что объясняется якобы ее стабильностью (например, это практикуется в операционной системе Debian GNU/Linux). Программисты Delphi Prism должны об этом помнить.
* * *
Интеграция Delphi Prism в MonoDevelop слегка смазана тем фактом, что в последнем никогда не существовало своего визуального дизайнера для Windows Forms, визуализация присутствует лишь для GTK#, что объясняется изначальной ориентацией MonoDevelop на Linux.
На самом деле сложилась парадоксальная ситуация, когда по ряду модных нововведений тот же Lazarus (www.lazarus.freepascal.org) уже давно успел обогнать Delphi, и есть ли особый смысл в реанимации идей, заложенных когда-то в Kylix, в наше время уже непонятно. Ведь по опыту известно, что для доведения новой технологии до ума нужно около пяти лет.