пятница, 21 декабря 2007 г.

Полезные исходники

Лазя по сети я сегодня набрел случайно на сайт своего знакомого по форуму www.delphimaster.ru - Розыча, т.е. Александра Багеля.

Респект и уважуха. Так держать!

четверг, 20 декабря 2007 г.

Обновления для RAD Studio, Delphi и C++Builder

CodeGear аннонсировал выход обновлений для RAD Studio, Delphi и C++Builder.

В посте Ника Ходжеса от 19 декабря приводятся ссылочки на пофиксенные баги (что-то много их, и ни одного знакомого или моего :) ).

PS Для пользователей Delphi 2007 (не Delphi 2007 Release 2!!!), нужно сначала установить update 3.

Типа шахматы

Проссматривая блог Ника Ходжеса я натолкнулся на новый сайт Delphi programming puzzles and games некоего Jacob Thurman (не знаю его).

Суть проста - каждый понедельник будет выкладываться новая задачка по Delphi, в течении недели ее нужно решить, в пятницу будет официальное решение.

Пока выложена одна задачка от 17 декабрся с.г.: найти причину утечки памяти в вроде бы корректном коде. Я ниииичего не понял :) Т.е. я не решил. Вообще на лажу смахивает. Однако как любитель решать шахматные хадачки в метро (мат в 3 хода и пр.) знаю, что решения бывают даже там, где их вроде не бывает.

Подождем пятницы :)

среда, 5 декабря 2007 г.

Новости CodeGear за декабрь 2007

Новость публикуется по просьбе представительства CodeGear в России.

Кратко

1. Программа "Получи RAD Studio у партнеров CodeGear"
2. InterBase 2007 for Mac OS X
3. Электронный магазин shop.codegear.ru
4. 10 наиболее важных изменений со времен Delphi 7

Подробно

1. Программа "Получи RAD Studio у партнеров CodeGear"
Московское представительство CodeGear Borland объявляет о начале
программы "Получи RAD Studio 2007 у партнеров CodeGear". Программа
предназначена, прежде всего, для пользователей в регионах, где сложно
скачать полный дистрибутив RAD Studio (4.2Гб). В рамках этой программы
Вы можете посетить партнера CodeGear и бесплатно получить у него DVD с
дистрибутивом CodeGear RAD Studio 2007.
Используя ключ, который можно получить на сайте www.codegear.com/downloads/free,
Вы можете попробовать триальную версию RAD Studio 2007, или
преобразовать ее в полную версию с помощью лицензионного ключа. Список
партнеров находится на сайте www.codegear.ru. Список постоянно
дополняется.

2. InterBase 2007 for Mac OS X
Выпущена версия InterBase 2007 для Mac OS X. Теперь компактная
высокопроизводительная база с многоверсионной архитектурой доступна и
для пользователей Mac OS X.
www.codegear.com/products/interbase

3. Электронный магазин shop.codegear.ru
Компания CodeGear при поддержке allsoft.ru открывает электронный
магазин shop.codegear.ru. В магазине представлены как наиболее
популярные версии продуктов, так и хиты прошлых лет, которые
пользуются постоянным спросом.

4. 10 наиболее важных изменений со времен Delphi 7
Павел Гловацки, ведущий евангелист CodeGear в Европе, опубликовал
развернутый список из 10 наиболее важных вещей, которые появились в
Delphi со времен 7 версии: dn.codegear.com/article/37416

суббота, 1 декабря 2007 г.

Купит ли google лет через 20 воздух на Земле?

Вот и я поддался движению давать своим постам яркие заголовки в стиле желтой прессы. Виноват...




Но вот, что я хочу сказать. Я новичок в Интернете. Если быть более точным, то я лет десять пользуюсь инетом, но только сейчас понял, что здесь еще и деньги крутяца, а не только анекдоты, ICQ и голые деффки.
Пользовался я разными бесплатными сервисами типа почты от mail дот ру и джиmail дот ком. На форумы разные ходил. Еще что-то юзал. Ну понятно было мне, что деньги многие сайты делают на рекламе. Меня это не очень заботило, ибо было нереально далеко.

Но тут я наткнулся на корпоративное предложение от гугла: почту для фирмы за 50 баксов в год за ящик. И тут я понял, можно сказать, что переворот в моем сознании произошел, что в сети можно предоставлять услуги доступа к софту! Т.е. гугл начал двигать SaaS (как я сейчас понимаю, он и раньше это делал, только я этого не замечал).

И почему гугл стал это делать? Он способен предоставить качественную услугу: как они пишут что-то около 99 с гаком процентов доставки почты. Также они лучше всех гасят спам (сам третий год пользуюсь бесплатным эккаунтом gmail - за последний год ни одной ошибки замечено не было, при количестве писем более 20 в день от разных отправителей). Волнует вопрос утечки информации из почты, которая хостица где-то? Меня это тоже волнует, но мои поиски случаев утечки не дали ничего (буду рад опровержению, ибо подумываю о переводе фирмы на гугловскую почту).

Собсно вот, что я хочу сказать. Есть у меня ощущение, что время массовых приложений на дискетках, сидиромах и дивидюшках уходят послепенно в прошлое. Создай качественную услугу и продавай ее в аренду в сети. Бери за нее меньше, чем за отчеждаемое приложение, и расценивай свою деятельность, как выдачу софта в аренду. И будет тебе счастье.

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


пятница, 30 ноября 2007 г.

Четвертый день коференции Code  

На сайте CodeGear выложены материалы докладов в разбивке по дням конференции. Есть только flash-файлы. Исходников нет, но обычно в презентациях указывается где можно взять исходники.

На третьем и пятом дне (т.е. 28 и 30 ноября) я не был.
Зато был 29 ноября.

С большим удовольствием я послушал оба доклада Джима МакКи (Jim McKeeth): Exceptional Exceptions и Class Helpers: Friend or Foe.

Второй доклад мне лишний раз доказал, что хелперы есть хорошая разминка для ума, не более того. Я пока не решаюсь их широко использовать в работе - плохо документировны и имеют не всегда очевидное поведение (имхо). Для небольших вливаний (добавок) в класс вполне сгодятся. Главное - самому не запуться.
Замечу, что в презентации есть небольшой обзор блогов, которые писали о хелперах. Есть что почитать.

Первый доклад на тему исключений мне подкинул пару идей.
Я иногда вижу на форумах вопросы о том, как уменьшить размер консольного приложения.
Вот такое минимальное приложение у меня занимает 17920 байт

program Project1;
{$APPTYPE CONSOLE}
begin
end.


Если требуется наследование от Exception, то нужно подключать SysUtils, а это уже 44032 байта.

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils;
begin
end.


Но ведь можно сделать проще - возбуждать не потомков Exception, а потомков TObject:

program Project1;
{$APPTYPE CONSOLE}
type
 TMyException = class
 end;
procedure Test;
begin
 raise TMyException.Create;
end;
begin
 try
  Test;
 except
  on E: TMyException do
   do something
 end;
end.


Такая программа уже весит 19456. Я, конечно, понимаю, что идиотизм экономить 20Кб, но это чем не ответ на вопрос о том, как сделать маленький EXE?

Также в докладе Джима об исключениях меня заинтересовала методика использования функции AcquireExceptionObject для управления временем жизни объекта исключения. К сожалению есть некий баг, относящийся к функции AcquireExceptionObject и парной ей функции ReleaseExceptionObject (если кратко, то в документации все неверно написано). Однако идея выбрасывать в качестве исключений объекты и при этом не давать им уничтожаться имеет право на жизнь.

program Project1;
{$APPTYPE CONSOLE}
type
 TMyException = class
 end;
procedure Test;
begin
 raise TMyException.Create;
end;
var
 C: TMyException = nil;
begin
 try
 Test;
 except
  on E: TMyException do
   C := AcquireExceptionObject;
 end;
 if C <> nil then
 begin
  здесь можно использовать C, но его нужно
  потом явно удалить, т.к. после вызова
  функции AcquireExceptionObject нарушен
  обычный контроль над временем жизни
  исключения.
  C.Free;
 end;
end.


Замечу, что подобным образом можно выбросить в качестве исключения, например, кнопку на форме, например так:

raise Button1;

Только нужно быть готовым к тому, что кнопка пропадет с экрана после такого вызова, т.к. будет удалена :)

Также имхо стоит обратить внимание на доклад Fighting Memory Leaks for Dummies, который сделал Francois Gaillard. Доклад про FastMM. В принципе материал схож с тем, который я приводил ранее. По теме сложно что-то сказать нового, т.к. вся документация по FastMM состоит из поисания в *.inc файле, поставляемом с FastMM.

среда, 28 ноября 2007 г.

Старая новая панель инструментов VS старая панель инструментов.

Источник блог Ника Ходжеса.

Ник сказал, что ему вчера на конференции CodeRage заметили о том, что не хватает старой панели иснтрументов. На что Ник ответил:
1. Новая панель в 723 раза удобней :)
2. Нелюбовь к новой панели является следствием незнания ее возможностей.

Сказал, как отрезал :)

Также он привел ссылочку на ролик, демонстрирующий возможности новой панели.
ИМХО интересно, я, например, что-то новое увидел для себя.

Второй день конферении CodeRageII

Вчера был второй день on-line конференции CodeRage II 2007.
Я посмотрел и послушал презентации Марко Кенту и Рея Конопки.

О своих презентациях Марко Кенту говорит в своем блоге. Там же находятся исходники к презентациям.

В презентации Delphi Dynamic Architectures with Packages Марко рассказал о том, как в дельфи с использованием BPL делать плагины (расширения), которые можно подцеплять к приложению без его перекомпиляции, возможно даже к работающему приложению! Также сравнил подход плагинизации с использованием BPL и DLL, есно сделал вывод в пользу первого подхода. В общем ничего нового для меня, т.к. я активно пользуюсь плагинами на основе BPL. Однаком презентация может быть полезна тем, кто еще не прочувствовал всей крутизны рантайм пакетов.

В презентации Delphi 2007 and Vista Марко рассказал есно о Дельфи и Vista. Vista я пока в глаза не видел, поэтому ничего не понял.

Презентации Рея Конопки:
1. Introduction to Generics in Delphi
2. Creating Composite VCL Controls

Первая презентация мне очень понравилась. Вся презентация практически полностью идентична материалам, представленным в блоге Hallvard Vassbotn в статье Highlander2 Beta: Generics in Delphi for .NET. В Delphi 2007 for Win32 джнериков пока нет, обещают в Tiburon'е в 2008 году. Но на меня презентация произвела большое впечатление - представил, какая светлая жизнь начнется после выхода Tiburon'а :)

Вторая презентация в стиле Рея - он же известны и опытный писатель компонентов. Было интересно.

Исходники по докладам Рея у меня есть - прямые ссылки на исходники Рей озвучивал в чате. Но сейчас я их не могу найти. Когда найду, выложу.

Еще от Рея я узнал, что есть второе издание его книги про написание компонентов. Он считает, что она с упехом применима также и для Delphi 2007, а не только для более ранних версий Delphi. Я так понял, что она на русский язык книга переведена не была :(

понедельник, 26 ноября 2007 г.

Конференция CodeRage II

CodeGear устраивает вторую online-коференцию CodeRageII.

Сегодня прошел первый день. Не знаю как кому, а мне интересно - мне практика таких конференций для собственного бизнеса пригодится. Пока, конечно, ничего нового не сказали (ну там unicode будет, generics и усовершенствованная документация). Про любимый россиянами баг в Delphi2007 с вводом русских символов есно ничего не сказали: там русских 2 или 3 человека. При случае спрошу кого-нибудь из CodeGear'а.

Завтра будут выступать Марко Кенту и Рей Конопка. По Москве это +11 часов: т.е. Кенту, начиная в 7:15 АМ по ихнему времени, по Москве начинает в 18:15. Подробное расписание можно найти по приведенной выше ссылке.

Если кто решится присоединиться к конференции, то имейте в виду:
1. Нужно будет поставить ActiveX для вашего IE60 (и вроде только его) от Interwise. На сайте CodeGear написано где брать и как ставить. Делов на 1 минуту.
2. Я при регистрации использовал свой CDN логин. Наверное он обязателен, точно не знаю.

воскресенье, 25 ноября 2007 г.

Несколько новостей

1. Где-то 14 ноября CodeGear'у было ровно год. Офигеть. Вот тут http://blog.marcocantu.com/blog/one_year_codegear.html говорит о сабже. Коротко - CodeGear молодец!
2. Книга Марка Кенту http://www.marcocantu.com/dh2007/. Может переведут когда-нибудь. Будем ждать.

Я вот тут решил пофилосовствовать о Unicode for VCL. Я, признаться, совершенно не могу представить себе - как это и что это!?!?! (и ?! в периоде). С одной стороны - дело нужное. С другой - реально ли это?

Для того, чтобы был Unicode нужно делать нормальные двухбайтовые строки, я не то уродство, что есть сейчас в виде WideString. Верно ведь? Ибо AnsiString и WideString - две большие разницы, и не в 2 раза :) Естественно, что CodeGear решит сделать умольчательным типом для жереника string именно новый тип для unicode-строки.

Но сколько тогда завалится старого кода?! Например, простое преобразование PChar(S), где S типа String что должно давать? Часто такое преобразование делается при пераче параметров для win-api функций. Сколько разработчиков не учтет факт смены формата представления в памяти значений типа string.

В общем так:
1. Если они сделают это таким образом, что миграция не-unicode -> unicode будет простой и понятной, то я ... скажу, что они молодцы!
2. Жду с нетерпением новых тестовых билдов. Я хочу делать софт для буржуинов и не хочу пользовать сторонние компоненты. 

четверг, 4 октября 2007 г.

CodeGear прекращает лицензирование Delphi7 с 1 ноября

Информация о прекращении была оглашена на семинарах-презентациях, прошедших в Москве в сентябре с.г.

В таких случаях принято давать ссылку на сайт, где приведена соответствующая информация. Ссылки нет Ибо www.codegear.ru находится пока в зачаточном состоянии, а искать информацию на www.codegear.com мне некогда. Все со слов Сергей Кожевникова — менеджера по лицензиями российского представительства CodeGear. На www.codegear.com есть контакты представительства.

Т.о. после 1 ноября легализовать Д7 будет нельзя.Аналогичная процедура будет проведена в отношении CBuilder 6 (кажется такой номер версии, ибо я не силен в номерах версий билдера). С билдером точно все жестко — с 1 ноября никаких лицензий не будет, ибо у CodeGear'а кончились лицензии на компоненты билдера третих производителей. В Д7 вроде тоже жестко, но лицензионных ограничений нет. Поэтому фиг его знает.

ВЫВОД, если хотите легализовать Дельфи 7, то делайте это сейчас.

AdWords

1. Введение

Вот ведь, возможно, подумают по заголовку - америку открыл: AdWords только ленивый не знает. Да открыл! Вот сидел я себе в программерах, а оказывается еще и продавать продукт надобно как-то.

2. Задача

Хочу, чтобы мой продукт знали и на мой сайт приходили целевые клиенты, а не просто серферы.

3. Возможное решение

AdWords это для тех, кто хочешь привлчеть посетителей (возможно, клиентов) к своему сайту. Кратко (для тех, кто не в курсе) - ты можешь платить за показы (либо клики - это два разных режима) своей рекламы на определенные ключевые слова. Например, я готов платить 10 рублей за клик на объявление, которое выдается, если юзер набирает в поисковике "delphi export excel OLE slow". Объявление может звучать так - "Quick export to Excel! Timokhov's super component! Only $29!!!". Если пользователь www.google.com кликнет на мою ссылку, то я заплачу 10 рублей (сумму выбираю я). Есно есть шанс, что кликнувший будет поим пользователем и купит у меня за $29 мой компонент.Суть, думаю, понятна - говоришь на какие запросы ты должен быть выше в результатах поиска, чем другие :)))) Есно платишь за это.

4. Техника вопроса

Техника вопроса проста: набираешь в браузере adwords.google.com, потом нажимаешь "Далее" и делаешь далее :)
Обратите внимание на поисковое слово в кавычках "Google Advertising Professionals". Хороший источник информации о том, как рекламироваться в гугле.

Я решил писать снова

Я верю гуглу. При том верю больше, чем своему винту. Поэтому буду я здесь располагать различные мысли и идеи.

Для начала я изменил описание своего блога. Изначально я создавал его как акцию поддержки Delphi2007. Продукты вышел, нужно же что-то еще писать. Буду писать то, что мне интересно, а интересно мне продать свое прогрАммерское творение.

В общем так - ближайшее время я буду писать о том, что я лично накопал в области распространения своего продукта за деньги.

Сразу скажу, что я не пытаюсь быть правым. Я просто делюсь своими полученными знаниями. Это же дневник.

среда, 11 апреля 2007 г.

Итераторы

Зачем писать что-то в блог, когда все уже написано.

Советую почитать всем тем, кто является противниками нововведений в Delphi.

http://17slon.com/blogs/gabr/2007/03/fun-with-enumerators.html

среда, 7 марта 2007 г.

Меня опередили

Предлагаю вашему вниманию ссылку http://hallvards.blogspot.com/2007/03/review-delphi-2007-for-win32-beta-part_06.html.

Это статья из блога Hallvard Vassbotn.

Собственно, по поводу нововведений в RTL и компиляторе он все сказал. Я обязательно что-то из сказанного им напишу на русском, но все же добавить к его блогу почти нечего :(

вторник, 6 марта 2007 г.

Delphi 2007 (часть III - FastMM)

Введение

О чем речь

Ниже речь пойдет о FastMM - менеджере парамяти для Delphi for win32. Я поделюсь опытом использования данного продукта и покажу, какие можно получать выгоды от него.

Предполагается, что FastMM используется для отладки приложения. Это важно, т.к. FastMM, работающий в режиме отладки, серьезно тормозит выполнение программы.

Версии дельфи, для которых применим материал

Материал применим как для BDS2006, так и для Delphi2007 (возможно, что и для более ранных версий дельфи - я не проверял).

История FastMM

Насколько я понимаю, данный манагер памяти был алтернативным манагером до Delphi2005 включительно. Т.е. можно было скачать FastMM (он свободный, где брать - см. ниже) и включить его в свой проект, заменив штатный манагер. Начиная с BDS2006 FastMM уже включен в Delphi.

По сравнению с ранее существовавшим манагером FastMM обладает следующими достоинствами:

  1. Он быстрее.
  2. Он предоставляет сервисные функции для отладки и поиска утечек памяти.

Естественно FastMM включается не только в программы, создаваемый разработчиком, но и в саму IDE. Насколько я понимаю одной из причин резкого ускорения работы IDE при переходе от BDS2005 к BDS2006 был именно FastMM.

Проблемы

Проблема в том, что:

  1. В Delphi FastMM включается только как манагер памяти и как упрощенный поисковик утечек памяти.
  2. В Delphi в настоящий момент полностью отсутствует документация по поводу FastMM (есть соответствующий репорт - http://qc.codegear.com/wc/qcmain.aspx?d=27105, который уже открыт автором FastMM).

При этом никто не машает скачать полную версию FastMM и заменить ею "штатный" FastMM, который есть в Delphi, настроив заменяющий FastMM таким образом, чтобы получать максимальную выгоду от сервисных функций в процессе отладки.

Использование FastMM

Где брать

FastMM хостится на http://www.sourceforge.net. Вот точная ссылка на страницу проекта: http://sourceforge.net/projects/fastmm.

Далее идете по ссылке Download FastMM. и скачиваете версию 4.x. В настоящий момент последней версией является 4.78.

Как устанавливать

Устанавливать собственно и не надо ничего. Есть три файла, которые вам необходимы:

  1. FastMM4.pas
  2. FastMM4Messages.pas
  3. FastMM4Options.inc

Кладете их в каталог проекта (или в путях, прописанных в Library Path в настройках Delphi) и подключаете первым модулем проекта FastMM4.

В случае, если используются runtime пакеты, то FastMM4, естественно не нужно подключать в пакеты - только в главное приложение.

NB Как использовать FastMM для DLL я не знаю, ибо не разбирался. Но в файле FastMM4Options.inc есть очень много комментариев по поводу настройки FastMM. Скорее всего там можно выяснить этот вопрос.

Настройка FastMM

FastMM настраивается посредством опций условной компиляции, задаваемых в файле FastMM4Options.inc. Опции снабжены подробными комментариями. Я для своих задач сделал следующие изменения:

  1. Убрал комментарии для опций UseRuntimePackages, FullDebugMode, ClearLogFileOnStartup.
  2. Закомментировал опцию RequireDebuggerPresenceForLeakReporting.

NB При использовании FastMM с опцией FullDebugMode в каталоге проекта должна быть библиотека FastMM_FullDebugMode.dll, которая есть в поставке FastMM как в виде исходников, так и в виде скомпилированного файла. Подробнее см. каталог FastMM478.zip \FullDebugMode DLL.

Настройки проекта

При возникновении нештатных ситуаций FastMM показывает стек вызовов, приведший к ошибке. Для того, чтобы стек вызовов содержал имена функций и строк в исходном коде нужно в параметрах проекта (и runtime пакетов, если они используются) на закладке Linker в секции Map File выставить опцию Detailed.

Пример использования в целях получения стека вызовов, приведшего к утечке памяти

Цель примера показать, что в стеке вызовов, приведшего к утечке памяти будут методы TMyClass.Execute() и TMyClass.fProcess() с точным указанием номера строки исходного кода.

program Project1;
{$APPTYPE CONSOLE}
uses
FastMM4,Classes,SysUtils;
type
TMyClass = class
public procedure Execute();
strict private procedure fProcess();
end;
procedure TMyClass.Execute();
begin
fProcess();
end;
procedure TMyClass.fProcess();
var
L: TList;
begin
L := TList.Create();
end;
var
MC: TMyClass;
begin
MC := TMyClass.Create();
try
MC.Execute();
finally
MC.Free();
end;
end.

Еси выполнить данную программу, то, во-первых, при завершении программы будет выведено сообщение о том, что были утечки, во-вторых, в каталоге программы будет создан файл Project1_MemoryManager_EventLog.txt, в котором будет представлена более подробная информация об утечке памяти.

В частности будет представлена следующая информация:


Stack trace of when this block was allocated (return addresses):
402DBE [system.pas][System][System.@GetMem][2648]
4036EF [system.pas][System][System.TObject.NewInstance][8824]
40399A [system.pas][System][System.@ClassCreate][9489]
403724 [system.pas][System][System.TObject.Create][8839]
403A08 [system.pas][System][System.@AfterConstruction][9537]
414935 [E:\temp\_Borland\FieldTest\01\Project1.dpr][Project1][Project1.TMyClass.fProcess][18]
41491B [E:\temp\_Borland\FieldTest\01\Project1.dpr][Project1][Project1.TMyClass.Execute][12]
4152FD
794589A5 [ProcessIdToSessionId]
The block is currently used for an object of class: TList

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

Можете попробовать использовать указанный подход в своих оконных приложениях (я не стал этого здесь делать т.к. код бы получился очень большой). В этом случае будет выводится очень глубокий стек, начиная от VCL.

NB В какой-то момент может показаться ошибкой, что в стек иногда попадают лишние методы. Я не силен в архитектуре возбуждения исключений, поэтому могу только передать слова автора FastMM: "Я пользовался функцией построения стека, которая реализована в JEDI". От себя замечу, что именно этой функцией пользуется сама IDE в BDS2006 и Delphi2007. Наверное, стоит спокойно относится к лишним методам - лишь бы нужные методы не пропадали.

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

Такой функционал - еще одна сервисная функция, предоставляемая FastMM.

В отладочном режиме (т.е. если включена опция условной компиляции FullDebugMode) FastMM при удалении объекта "портит" память, занимаемую ранее объектом, таким образом, что при следующей попытке вызывать виртуальный метод удаленного объекта FastMM возбуждает исключение.

В заголовке текущего пункта я не указал, что речь идет про именно виртуальный метод. Я это не сделал сознательно т.к. подобная техника может быть использована и для обычных методов своих классов: можно временно сделать метод виртуальным и выяснить откуда же был вызван этот метод.

Ниже представлен пример отслеживания момента повторного удаления объекта (деструктор тоже виртуальный метод).

program Project1;
{$APPTYPE CONSOLE}
uses
FastMM4;
type
TMyClass = class
end;
var
MC: TMyClass;
procedure Proc1;
begin
MC := TMyClass.Create();
end;
procedure Proc2;
begin
MC.Free();
end;
procedure Proc3;
begin
MC.Free();
end;
begin
Proc1;
Proc2;
Proc3;
end.

Запустите проект.

Во-первых, вы получите сообщение о том, что была попытка вызывать виртуальный метод удаленного объекта.

Во-вторых, в файле Project1_MemoryManager_EventLog.txt можно посмотреть:

  1. Стек вызовов при создании объекта.
  2. Стек вызовов при удалении объекта.
  3. Стек вызовов при попытке вызывать виртуальный метод объекта (в текущем примере это тот же деструктор).

ИМХО весьма полезно может быть.

Заключение

При анализе файла FastMM4Options.inc можно найти некоторые другие сервисные функции. Я с ними не разбирался, но, очевидно, что они также могут быть полезны при отладке.

понедельник, 5 марта 2007 г.

Я научился форматировать исходный текст

Ура, я научился форматировать исходный текст примеров на Delphi.

Здесь http://www.delphidabbler.com/software?id=pash&mid=2 расположена удобная утилита для этого. Да и вообще - весь сайт также интересен.

Так что в будущем будут посты только с правильным форматированием текста.

Обратная связь

Уважаемые читатели!

Если у вас есть вопросы, то, пожалуйста, посылайте мне их на почту timokhov@gmail.com. Не нужно задавать вопросы в комментариях к постам. Комментарии (как я думаю) существуют для высказывания своего мнения по поводу приведенной новости.

Я постараюсь обработать данные вопросы и запостить, если что-то будет интересное.

Спасибо за понимание.

Пофиксен старый баг

Всегда приятно, когда видишь, что баг, которому более 3 лет, вот так просто взяли и пофиксили.
Речь об этой ошибке http://qc.codegear.com/wc/qcmain.aspx?d=3793
Мои поздравления автору репорта, Алексею Вукулову aka Vuk!!!

Delphi 2007 (часть II - строковые функции)

Тема

В Delphi 2007 оптимизированы следующие строковые функции:

  1. UpperCase
  2. LowerCase
  3. CompareStr
  4. StrLen
  5. _LStrCmp

Мои исследования

Т.к. я чаще всего пользуюсь сравнением строк (оператор стравнения), то мне наиболее интересно было посмотреть разницу выполнения функции _LStrCmp (именно она в конце концов вызывается при сравнении двух строк if S1 = S2 then ...).

Построив свой первый тест производительности я был удивлен (огорчен), что в BDS 2006 и Delphi 2007 выполнение теста сопостовимо по времени.

Тут я подумал, что не может быть такого - процедуру переписали (вроде это кто-то делал из проекта fastcode - точно я не в курсе ибо не интересуюсь данным проектом), а скорость примерно та же.

Поэтому я полез в исходники и обнаружил, что оптимизация проведена для определенных случаев. Скорость выполнение операции сравнения строк повысилась в случае:

  1. Сравнения строк, если одна (или обе) из них пустая.
  2. Сравнение строк, которые отличаются первым символом.

Я построил еще один тест. Суть теста 10^9 сравнений случайных строк длины 10 со случайной строкой такой же длины.

{$o+}{$r-}{$q-}
program StringFunctionsTest3;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
const
cLen = 1000000;
cStrLen = 10;
cTests = 1000;
var
I,J: Integer;
A: array [0..cLen-1] of String;
PF, PC1, PC2: TLargeInteger;
S: String;
begin
QueryPerformanceFrequency(PF);
for I := 0 to cLen - 1 do
begin
A[I] := '';
for J := 0 to cStrLen-1 do
A[I] := A[I]+Chr(32+Random(60));
end;
S := A[cLen-1];
QueryPerformanceCounter(PC1);
for J := 0 to cTests - 1 do
for I := 0 to cLen - 1 do
if A[I] = S then
Break;
QueryPerformanceCounter(PC2);
WriteLn(Format('%.4f', [(PC2-PC1)/PF]));
ReadLn;
end.
По результатам проверки в BDS 2006 и Delphi 2007 обнаружено ускорение от 30% до 50%.

Также я провел замеры скорости выполнения при сравнении строк, когда одна из них пустая. Также обнаружено ускорение от 30% до 50%.

Данная доработка не может не радовать ибо, во-первых, среда в целом будет работать быстрее, во-вторых, наши с вами программы будут работать быстрее.

воскресенье, 4 марта 2007 г.

Delphi 2007 (часть I)

Что это

Как вы знаете скоро выходит новая версия Delphi2007 for win32. Теперь данный продукт разрабатывается фирмой CodeGear, которая была образована где-то в конце прошлого года на основе подразделения фирмы Borland, которое ранее занималось разработкой Delphi.

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

Наверное вы заметили, что в сети уже достаточно много появилось информации о новой версии. Не думаю, что я скажу что-то сильно новое, но я буду говорить на русском языке :)

Мой план

Меня уполномочили доносить инфу по поводу Delphi 2007 до России. Но я с огномным удивлением узнал, что про BDS 2006 в России также знаю не очень много. При таком раскладе говорить о Delphi 2007 и его преимуществах перед BDS 2006 глупо - ибо BDS 2006 знаю не особо много людей.

Поэтому я сделаю вольность и буду говорить об обих продуктах сразу, акцентируя внимание на то, что сделано дополнительно в Delphi 2007.

Итог

Пока все :) Нужно еще составить нормальный план изложения. Заходите завтра :)

Доп. материалы

Сами понимаете, что я не один, кто в блогах будет освещать Delphi 2007. Возможно, что я буду один из немногих, кто делает это на русском языке. Однако существует достаточно много источников на английском языке. Я буду стараться собирать ссылки на такие блоги.

Список того, что я нашел к текущему моменту:
  1. http://hallvards.blogspot.com/