На сайте 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.
Комментариев нет:
Отправить комментарий