Tuesday, October 31, 2006

Новые ExplicitХ проперти в DFM

В Turbo Delphi в DFM стали писаться 4 новыx проперти: ExplicitTop, ExplicitLeft, ExplicitHeight и ExplicitWidth.

Добавляются они сами. В Object Inspector-е их нет и менять их нельзя т.к. они public read only. Объявлены в TСontrol.

Эти новые проперти здорово раздувают файл формы. Но самое противное:

  1. Они постоянно меняются и при добавлении в VSS приходится тратить много времени на их вычитку.
  2. Теряется обратная совместимость формы. Для открытия DFM в ранних версиях надо вычистить все ExplicitX проперти.

Описание этих странных пропертей в хэлпе нет.

Зачем же они нужны?

Внятного ответа от Borland мной не найдено (если кто-то нашел – поделитесь, плиз). В единственном объяснении сказано что в ExplicitX проперти запоминаются значения соответствующих пропертей размеров и расположения, которые были до изменения пропертей Align или Anchor из их дефолтных значений.

Проверяем:

  1. В центр формы кладется панель. Форма сохраняется. В DFM ExplicitX пропертей нет.
  2. Align панели ставится в alBottom. Форма сохраняется. В DFM у панели появились ExplicitX проперти со значениями, равными ее Top, Left, Height и Width, когда она была в центре.
  3. Align панели ставится обратно alNone и… панель сама "прыгает" в середину формы. Форма сохраняется. В DFM ExplicitX пропертей нет.

Мне кажется этот эффект "прыганья" не стоит вышеописанных проблем.

И еще приведенное объяснение явно не полное, т.к. не объясняет эффект появления и исчезания ExplicitX пропертей в TabSheet-ах.


Tags: Turbo Delphi

Monday, October 30, 2006

Анкета от Borland для разработчиков

Борланд в очередной раз выступил в репертуаре "хотели как лучше, получилось как всегда"

Анкета для разработчиков на тему "Как вам нравится Delphi и что бы вам хотелось видеть в дальнейшем":

http://infopoll.net/live/surveys/s30110.htm

Содержит более 200 вопросов! Они хотят знать наше мнение или в очередной раз решили испытать наше терпение?

Генерация XML документации в Turbo Delphi.

Техническая документация на уровне программных объектов, на мой взгляд, может быть нужна в двух случаях:

  1. Сопровождение компонентов, передаваемых сторонним разработчикам. В основном это коммерческие компоненты.
  2. Как внутренняя документация для команды разработчиков.

В первом случае документация фактически является хэлпом - она должна содержать информацию только о public объектах, должна быть соответственно структурирована и оформлена. Информация должна быть подробной – что объект делает, параметры вызова, особенности использования, где расположен (к какому юниту относится), от кого отнаследован. При этом расположение и иерархия являются вторичной информацией и не должны сильно бросаться в глаза.

Во втором варианте документация нужна для быстрого ознакомления с интерфейсами, функционалом и взаимодействием классов. Для более подробной информации есть код (который должен быть хорошо откомментирован). Т.е. подход почти диаметрально противоположный первому варианту. Информация должна быть краткой, и первичным становится расположение объектов.

Меня интересует второй случай. На текущий момент у нас используются обычные комментарии в объявлении классов, переменных, констант и т.д., и для ознакомления с функционалом юнита достаточно просмотреть его interface. Для упрощения взаимодействия между разработчиками и избавления от лишней информации (например вспомогательных переменных) хочется иметь возможность выгружать в отдельный файл объявления классов, всех public и protected членов класса с комментариями к ним и из protected членов класса только те, у которых есть комментарии. Это в идеале. С другой стороны задача, для нас, стоит не очень остро и дополнительных сил на написание своего парсера тратить не имеет смысла. Использование сторонних автоматических документаторов требует изменения формата комментариев и, соответственно, дополнительного контроля за правильностью их написания, что так же не имеет смысла.

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

В Turbo Delphi есть 2 варианта генерации XML документации:

  1. При компиляции приложения создается XML файл для каждго юнита и файла проекта. Для этого должна быть включена опция "Generate XML Documentation" на закладке "Compiler" в "Project Options".
  2. Можно создать единую документацию по всем исходникам приложения. Для этого должен быть включен "Together Support", а сама документация создается из "Model View".

В документацию идет вся информация по объектам + пользовательские комментарии (перед XML комментариями в коде должно быть ///). Вроде бы все хорошо, но…

Документация, создаваемая через "Model View" слишком "тяжелая". Ее, наверно, можно было бы использовать в качестве хэлпа для сопровождения компонентов, но там слишком много внутренней информации, которая в данном случае не нужна. Выбрать же уровень детализации (какие объекты выгружать в документ) нельзя. Насколько корректно работает данный генератор не проверялось т.к. стало ясно, что этот вариант генерации использоваться не будет.

Документация, создаваемая при компиляции на первый взгляд выглядела практически тем что надо. Основная проблема виделась в том, что для класса в XML файл тянется много избыточной информации: все данные по всем предкам. Для пустой формы это более чем 2000 (две тысячи)! строк. Но, в принципе, это не страшно т.к. при парсинге XML избыточную информацию можно игнорировать.

Начинаем экспериментировать с генерацией XML документации при компиляции:

1. Создаем простенький класс с одной функцией. XML комментарии сделаны перед объявлением класса, объявлением функции и в теле функции (последний был добавлен чтоб проверить не добавляет ли генератор комментарии из тела функции к комментариям к самой функции).

...

Получаем XML (комментарии подчеркнуты красным, предки свернуты, чтоб не мешаться). Комментарий из тела функции проигнорироаван, но это не страшно.

2. Добавляем процедуру с комментарием перед объявлением, тело процедуры без комментариев.

Получаем XML с перепутанными комментариями. Вместо комментария к процедуре вставился комментарий из тела функции

3. Ну если не нравятся генератору комментарии в implementation уберем комментарий из тела функции, но добавим один после всех объявлений.

...

И опять получаем XML с перепутанными комментариями.

Нет ребята, такой документатор использовать нельзя. А жаль, такая идея хорошая...

Saturday, October 28, 2006

Обживаемся в Turbo Delphi

Не смотря на то, что Turbo Delphi, похоже, последняя реинкарнация среды, деваться некуда.

Некуда деваться потому, что нужен нэйтивный код. А последняя реинкарнация (по ощущениям) потому, что рулевые в Борланде не понимают свою аудиторию. Аудитория с ними только из-за нэйтивного кода, а те кому нужны web приложения или .net уже давно от дельфей сбежали и возвращать их бесполезно...

10 лет на Delphi5! Были, конечно, и 6, и 7 и далее по списку, но они в лучшем случае не давали существенных преимуществ, в худшем нещадно глючили :-( Т.ч. отдавать за них денег Борланду категорически не хотелось.

Ну, собственно, о самой Turbo Delphi.

Среда понравилась. Снова хочется писать. Возможно это по контрасту с надоевшей Delphi5? Более яркая раскраска, в принципе, выглядит неплохо.

Борланд решил совсем отказаться от старого варианта среды. Новая похожа на Майкрософтовские IDE. Основные изменения: работа с формой в design time и перенос палеты компонентов в docking window.

Сначала, конечно, пришлось среду "обживать". Раскладка desktop-а идущая по умолчанию (Default Layout) не понравилась т.к. мало места для кода (смотришь как через бойницу дзота).



Сделана стандартная настройка под себя (все вспомогательные окна убраны влево, настроены шаблоны, перенастроена подсветка).



Приятные новшества среды:

  • Более умные шаблоны автодополнения - возможность задавать в шаблоне несколько полей для ввода, переход между полями, автоматическая генерация переменных (например счетчик в for), разворот перечислимых типов (в case). Шаблоны теперь задаются в XML формате.
  • Автоматическая проверка синтаксиса "на лету".
  • Рефакторинг.
  • Автодокументация (правда возможность ее использования под сомнением).
  • Сворачивание отдельных кусков кода (директива {$REGION}).
  • Опция Surround.
  • Возможность закомментировать выделенный фрагмент кода (Ctrl+/).
  • Отдельная раскладка desktop-а во время исполнения (Debug Layout).
  • Поиск компонента в палете по первым символам.

Кое-что из вышеперечисленного появилось еще в BDS2005, но, т.к. BDS2005 была пропущена, считаю их новшествами BDS2006/Turbo. Работается быстрей и приятней.

Минусы:

  • Хотя шаблоны и более умные они, почему то, не вызываются при вводе параметров функции.
  • При установке требует поставить массу всего, что не понятно зачем нужно (зачем компилятору нэйтивного кода на Pascal нужен .netJ# ?).
  • Хэлп ставится при инсталляции по всем продуктам BDS 2006. При контекстном поиске вываливаются громадные списки среди которых приходится отыскивать записи, которые относятся к Delphi.
  • Хэлп написан неаккуратно. После нахождения пары ошибок/неточностей доверие вообще перестал вызывать,
  • Подглючивает Object Inspector. При переключении из Object Inspector в Project Manager и обратно Object Inspector теряет данные текущего контрола и обновляется только после повторного выбора контрола.
  • Debug Layout может быть только один. Т.е. может их быть много, но во время исполнения показывается тот, что с именем "Debug Layout".
  • Не работает User override для Enviroment Variables (была попытка изменить BDSPROJECTSDIR).
  • Попытка работать с Model View вызвала ощущение что его лучше не открывать вообще! Здесь тронешь - там посыпалось. Все изменения в моделе сразу же автоматом меняют код юнита, причем обычно криво.
  • Изменены некоторые ShortCut-ы. Например шаблоны автодополнения вызываются теперь по Ctrl+J. Здесь приведен список основных ShortCut-ов.

После более ближайшего рассмотрения какие то плюсы могут уйти в минусы. А минусы перестанут замечаться или просто выяснится что проблемы из за того что я еще "не умею их готовить".

А вот какие сюрпризы нам преподнесет компилятор будем выяснять в процессе работы.

Hello World!

Ну с чего же еще начинать ;-)