Delphi 2009: Tiburon со слов очевидцев
Говоря о Tiburon, прежде всего стоит понимать новую версию Delphi for Win32 и C++ Builder. Alex Bozhko
🕛 28.08.2008, 13:26
Не секрет, что любимые многими разработчиками средства создания программного обеспечения от Borland, такие как Delphi и C++ Builder, к середине нынешнего десятилетия стали переживать не лучшие свои времена. Это вынудило компанию принять ряд организационных мер, направленных на борьбу с убытками, и фактически отказаться от дальнейшего ведения бизнеса в сфере создания средств разработки.В 2006-м году было создано автономное IDE подразделение, учетные активы которого по-прежнему принадлежали Borland. Оно было названо CodeGear. И вот, 7 мая 2008 Borland и малоизвестная компания Embarcadero Technologies объявили о том, что было подписано окончательное соглашение о приобретении активов для покупки CodeGear. Приобретение было окончательно завершено 30 июня 2008 года. Тем самым, CodeGear окончательно отделилась от Borland и стала частью Embarcadero Technologies. Таким образом, на сегодняшний день мы можем говорить, что Delphi сменил владельца. Тем не менее, этот факт никак не отразился на планах выпуска новых продуктов. И осенью этого года будет выпущен новый продукт линии Delphi - Delphi 2009.
По традиции, за несколько месяцев до выпуска очередного релиза, бета-тестеры компании начинают активное описание продукта в своих блогах и на форумах. Данный процесс происходит довольно синхронно и его начало является верным признаком скорого выпуска продукта в свет. Таким образом, потенциальные покупатели получают возможность заранее ознакомится с новшествами среды, и даже обсудить ее преимущества с разработчиками. Последние, кстати, охотно идут на контакт на форумах и в блогах. И поскольку с момента начала обсуждения нового детища CodeGear прошло больше месяца, мы можем составить некоторое представление о новом продукте.
Если предыдущие три версии Delphi выходили с интервалом около года, то на создание Tiburon’а (в переводе с испанского означает акула) CodeGear затратил почти два. И похоже, что новшеств в очередном, двенадцатом по счету, продукте линии Delphi, будет намного больше, чем, скажем, их было в Delphi 2007. Изменения затронут практически все составляющие IDE, включая средства отладки приложений и язык Delphi.
Говоря о Tiburon, прежде всего стоит понимать новую версию Delphi for Win32 и C++ Builder. Вероятно, что схема распространения продуктов останется прежней. Оба Win32 решения будут продаваться отдельно и выйдут немного раньше. А затем они войдут в состав RAD Studio 2009, куда помимо них будут включены .Net средства. Новшества, коснувшиеся С# Builder и Delphi for .Net, пока активно не обсуждаются.
Если взглянуть на скриншоты, то можно увидеть, что внешне среда разработки особо не изменилась. Остался тот же Visual Studio подобный интерфейс и похожее расположение панелей.
Наиболее замечательным нововведением, на которое обращают внимание Дэвид Интерсаймон (технический руководитель команды разработчиков) и его коллеги, станет расширенная поддержка юникода. При этом отмечается, что начиная с 2002-го года, по данным регулярных опросов, подобное нововведение являлось наиболее ожидаемым и востребованным среди пользователей Delphi. Юникод это схема кодировки символов, которая фактически предоставляет возможность закодировать любой алфавит в единый набор символов. Проще говоря, юникод дает возможность использовать любой алфавит вне зависимости от того, какие региональные настройки являются базовыми.
Тотальная «уникодификация» затронула практически все составляющие IDE. Прежде всего, это изменение строковой концепции языка. Был добавлен новый строковой тип UnicodeString. Для UnicodeString внутренним форматом будет UTF16. Тип string, который ранее описывался как AnsiString, стал UnicodeString. Типы Char и PChar, которые ранее соответствовали AnsiChar и PAnsiChar, соответственно стали WideChar и PWideChar. Как следствие, все заголовочные файлы для работы с WinAPI изменены под юникод. Если ранее все функции соответствовали A функциям Windows, то теперь они будут соответствовать W функциям... Например, если в Delphi 2007 MessageBox определялась как MessageBoxA, то в Delphi 2009 она это будет MessageBoxW.
Старые типы данных также можно будет использовать, но потребуется явное указание типа (например, AnsiString и AnsiChar для указания старой однобайтной строки и символа).
Кроме того, был введен новый класс TEncoding, предназначенный для преобразования текста в различные кодировки. Соответственно, претерпели изменения некоторые базовые классы, которые стали использовать данный класс в реализации своих методов. Так метод LoadFromFile класса TStrings теперь автоматически определяет кодировку текста и производит его перекодировку в UTF-16 (UnicodeString), используя TEncoding. Множества вида Set of Char теперь в коде должны быть заменены на Set of AnsiChar. В противном случае компилятор выдаст ошибку
Что же мы в результате всего этого получаем на практике? Прежде всего, создавать приложения с полноценной поддержкой мультиязычности. В том числе и приложения, предназначенные для работы с базами данных. Теперь в одной таблице одновременно можно отображать как кириллицу, так и иероглифы. При этом трудоемкость адаптации старых Delphi приложений к использованию юникод сводится к минимуму. Иными словами, без особых затруднений можно перевести свою программу с английского на китайский и тем самым выйти на существенно более высокий уровень продаж. Столь незначительную проблему как изучение китайского в рамках данной статьи я затрагивать не стану. :)
Соответственно, и средства отладки так же приобрели возможность работать с юникодом.
До настоящего времени лично я не испытывал особых проблем с кодировкой в предыдущих версиях Delphi. Хотя, неприятные моменты все же возникали. Например, при определении путей на русскоязычные папки. Есть надежда, что коль скоро разработчики продукта обратили внимание на интернализацию приложений, у них дошли руки и до поддержки локальных версий Windows.
В контексте вышесказанного уместно предаться некоторым отвлеченным размышлениям. Очевидно, что CodeGear проигрывает конкурентам на англоязычном сегменте рынка и сейчас делает ставку на потенциальных клиентов, для которых английский не является родным. Напомню, что кроме натуральной, английской версии Delphi, существуют японская, немецкая и французская локализации. С конца 2007-го года в пресс-релизах CodeGear начали сквозить испанские слова. А акцент в развитии продуктов компании ставится именно на их языковых возможностях. Если вспомнить, что недавно был заключен контракт с Министерством образования РФ на закупку 1 миллиона лицензий Delphi и C++ Builder, то можно прогнозировать, что в обозримом будущем эти продукты заговорят и по-русски.
В отличии от Delphi 2007, где язык разработки практически не эволюционировал, Tibuon привнес существенные изменения в Delphi Language (об очередном переименовании языка речь пока не ведется).
Изменение строковых типов мы рассмотрели выше. Главными же новшествами помимо этого стали так называемые анонимные методы и шаблоны (Generics). Анонимные метода, по сути своей, это процедуры и функции, за которыми не закрепляется имя.
type // описание метода TProc = reference to procedure(x: Integer); procedure Call(const proc: TProc); begin proc(42); end; var proc: TProc; begin // anonymous method proc := procedure(a: Integer) begin Writeln(a); end; Call(proc); readln end.
Если посмотреть пример кода, то можно понять, что фактически анонимный метод это переменная, значением которой может быть любая подпрограмма. Эту подпрограмму мы можем переопределять в коде и даже передавать в качестве параметра другой подпрограмме. По крайней мере, это следует из кода. К сожалению, до выхода релиза мы не можем проверить это на практике и полностью оценить все возможности данной синтаксической структуры.
Концепция шаблонов так же интуитивно понятна из кода. Это решение было позаимствовано из .Net. Наиболее очевидное применение этой конструкции - работа со списками. Однако, вероятнее всего, могут найтись и другие точки ее приложения.
Описание:
TList<T> = class private FItems: array of T; FCount: Integer; procedure Grow(ACapacity: Integer); function GetItem(AIndex: Integer): T; procedure SetItem(AIndex: Integer; AValue: T); public procedure Add(const AItem: T); procedure AddRange(const AItems: array of T); procedure RemoveAt(AIndex: Integer); procedure Clear; property Item[AIndex: Integer]: T read GetItem write SetItem; default; property Count: Integer read FCount; end;
Использование:
var ilist: TList<Integer>; slist: TList<String>; procedure PrintListInteger; var i: Integer; begin for i := 0 to ilist.Count - 1 do Write(ilist[i], ' '); Writeln; end; procedure PrintListString; var i: Integer; begin for i := 0 to slist.Count - 1 do Write(slist[i], ' '); Writeln; end; begin ilist := TList.Create; try ilist.AddRange([1, 2, 3]); // ['1', 'second', 'third']); PrintListInteger; ilist.RemoveAt(1); PrintListInteger; ilist.Clear; PrintListInteger; finally ilist.Free; end; slist := TList.Create; try slist.AddRange(['one', 'two', 'three']); // ['first', 'second', 'third']); PrintListString; slist.RemoveAt(1); PrintListString; slist.Clear; PrintListString; finally slist.Free; end; Readln; end.
Еще одно, пусть и не столь масштабное, нововведение в синтаксисе - новая конструкция процедуры Exit:
function DoSomething(aInteger: integer): string; begin if aInteger < 0 then begin Exit(‘Negative’); end; Result := ‘Positive’; end;
Аналогично следующему коду:
function DoSomething(aInteger: integer): string; begin if aInteger < 0 then begin Result := ‘Negative’; Exit; end; Result := ‘Positive’; end;
К сожалению, пока не ясно как такая конструкция будет работать, скажем, во вложенных подпрограммах.
VCL также претерпел отдельные изменения. По заверениям людей, тестирующих Tiburon, панель компонентов довольно существенно расширится. Добавятся довольно много, пусть не ключевых, но довольно удобных компонентов (Category panel, link label, buttoned edit и т.д.), известных по разработкам сторонних производителей. А также расширятся возможности многих классов. Например, будут поддерживаться PNG-изображения. Многие визуальные элементы управления будут адаптированы под Vista стиль. Так для TEdit появится Error Box (хинт, с сообщением об ошибке), дополнительные наборы стилей для TButton и многие другие новшества. Все это будет работать и под Windows XP, хотя, естественно, смотреться будет несколько по проще.
Позволю себе еще одно маленькое отступление. Меня всегда интересовало отношение вышеупомянутых сторонних производителей к тому факту, что в очередной версии Delphi появляются компоненты, вмещающие в себя те функции, от реализации которых они (производители) получают доход...
Отличная новость ожидает любителей красивого и модного интерфейса. До сегодняшнего дня, пожалуй, единственным профессиональным Delphi совместимым набором компонентов, позволяющим создавать приложения в стиле Office 2007 являлся DevExpress. Теперь же на палитре компонентов Tiburon появится вкладка Ribbon Controls. Она содержит следующие компоненты:
* TRibbon; * TRibbonComboBox; * TRibbonSpinEdit; * TScreenTipsManager; * TScreenTipsPopup.
В комплект продукта прилагается пример, наглядно иллюстрирующий возможности новых контролов. Судя по скриншоту, разработчики Delphi для примера быстренько соорудили полный аналог MS Word 2007. :)
Кроме интерфейсных нововведений в VCL появились и некоторые изменения, связанные технологиями доступа к данным. В частности, новый компонент, основанный на технологии DataSnap server.
Существенно обновились многие диалоги и визарды. В частности, стал более наглядным визард создания COM объектов. Изменился и мастер создания новых компонентов. Кроме того, блогеры отмечают тот факт, что появилась возможность изменять размеры диалоговых окон там, где раньше таковой возможности не было. Мелочь, а приятно. При всем удобстве Delphi 2007, лично меня раздражало то, что строку в диалоге я не могу увидеть полностью. Приходилось ее выделять и копировать в блокнот, что бы прочесть, потому что часто даже хинт не укладывался в ширину экрана.
Как и в предыдущей версии Delphi инсталляция производится посредствам on-line инсталлятора (по крайней мере, для beta-версии, точно). Однако, как отмечают тестеры, эта процедура стала занимать намного меньше времени. Из личного опыта могу сказать, что установка Delphi 2007 при скорости канала 256 kb/s занимала около двенадцати часов. Так называемый Prerequired набор - то, что должно быть установлено для нормальной установки Delphi - несколько сократился.
Кроме всего прочего в комплект Delphi 2009 будут добавлены новые инструменты UML моделирования. Судя по всему, из набора хорошо знакомого по предыдущим версиям Together.
К сожалению, beta-версия Tiburon пока недоступна для свободного скачивания. Поэтому о стабильности и надежности продукта пока сказать нечего. Да и о удобстве его для разработок приходится говорить с чужих слов. Точная дата выпуска продукта обозначена как «выйдет, когда будет готов». Тем не менее, хочется надеяться на лучшее. И основания для таких надежд есть!