Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизDelphi vs. C++ Найти похожие ветки
← →
Акуличев Дмитрий (2004-09-08 12:55) [400]
> Сколько же ежиков плачут, колются, но продолжают грызть
> кактус :)
А ещё миллион мух не может ошибаться.
:)
← →
MU © (2004-09-08 12:58) [401]Хочу отметить еще один вопрос - мнение (психология) заказчиков...
казалось бы, им д.б. все равно на чем написан проект, главное, чтобы он работал и выполнял все необходимые функции.
был у нас большой проект на FoxPro DOS - много успешных внедрений и проч., но со временем стали раздаваться голоса, что это вчерашний день, что виндоуз это - круто и т.д. хотя кассиру или бухгалтеру ведь все равно DOS это или Windows, им надо чтобы цифры были правильные.
Перешли на Дельфи. теперь нет-нет да и слышится от заказчиков-руководителей: "на дельфи серьезные проекты не пишутся, .NET, C# и прочий набор где-то услышанных ими звуков".
← →
Акуличев Дмитрий (2004-09-08 12:59) [402]
> Суслик © (08.09.04 12:46) [399]
>
> Вопрос: Почему _AddRef не вынесен в доступную фукнкция,
> как это сделано для finlize и initilize? Как вы думаете,
> в чем причины?
Как же не вынесен, если это часть любого интерфейса?
Название с чёрточкой смущает?
← →
Игорь Шевченко © (2004-09-08 13:05) [403]Акуличев Дмитрий (08.09.04 12:55) [400]
> А ещё миллион мух не может ошибаться.
Эт к Visual Basic :))
← →
jack128 © (2004-09-08 13:12) [404]Суслик © (08.09.04 12:46) [399]
Вопрос: Почему _AddRef не вынесен в доступную фукнкция, как это сделано для finlize и initilize? Как вы думаете, в чем причины
А если не секрет зачем?? Где используется initialize/finalize я себе представляю, а вот зачем нужен явный вызов _AddRefArray не очень..
← →
Акуличев Дмитрий (2004-09-08 13:13) [405]
> Игорь Шевченко © (08.09.04 13:05) [403]
> Эт к Visual Basic :))
Нет. Эт к ссылкам на большинство как авторитет.
← →
jack128 © (2004-09-08 13:16) [406]jack128 © (08.09.04 13:12) [404]
кстати, про интерфейсы вы тут вроде разобрались ;-) а формат строк/дин массивов расписан, коль жить надоело, можешь сам использовать их счетчик ссылок ;-)
← →
Димитрий © (2004-09-08 13:35) [407]А еще в последнее время набирает популярность язык программирования BrainFuck :)
← →
Акуличев Дмитрий (2004-09-08 13:42) [408]
> А еще в последнее время набирает популярность язык программирования
> BrainFuck :)
А ещё есть язык, у которого весь алфавит состит только из символов
#9 #10 #12 #13 #32
Забыл только как называется.
← →
Суслик © (2004-09-08 13:59) [409]
> Акуличев Дмитрий (08.09.04 12:59) [402]
Ты не просек, про что я.
_AddRef это не из интерфейсов - это функция в system... посмотри - рядом с _initilize.
под невынесенностью я понимаю недокументированность.
> jack128 © (08.09.04 13:12) [404]
> Суслик © (08.09.04 12:46) [399]
> А если не секрет зачем?? Где используется initialize/finalize
> я себе представляю, а вот зачем нужен явный вызов _AddRefArray
> не очень..
Для копирования больших кусков памяти.
Например - есть record с длинными строками. Тебе нужно его скопировать. Хорошо было бы move + addref. Конечно, для записей это можно и так сделать - просто присваиваньшем. Но существуют задачи, где было бы нужно анонимно копировать область памяти конечно зная ее typeInfo.
← →
Суслик © (2004-09-08 14:00) [410]
> jack128 © (08.09.04 13:16) [406]
зачем мне самому лезть в формат строк и дин масивов.
есть addref, только вызывать ее надо без параметров.
теоретически это можно (я даже пробовал).
мне непонятно почему эта ф-я недокументирована.
← →
имя (2004-09-08 14:12) [411]Удалено модератором
← →
Ihor Osov'yak © (2004-09-08 14:13) [412]> мне непонятно почему эта ф-я недокументирована.
По той же причине, почему не нужно вмешиваться в процесс управления жызнью обьектов, хостящих интерфейсы.
Зы.. Я уже приводил цитату, относительно програмированния под платформу майкрософт и соблюдения рекомендаций майкрософт.. Немного перефразируете его относительно программирования с использованием инструментария борланда и рекомендаций борланда. Я имею ввиду о работе с обьектами с управляемым временем жызни.
Зы2. Вы бы лучше хорошо разобралисть с тем, что уже есть, а потом бы велосипед изобретали... Да, кстати, как подсказывает жизненный опыт - чем больше знаешь, тем реже возникает потребность и желание изобретать велосипед.
← →
Суслик © (2004-09-08 14:18) [413]
> Ihor Osov"yak © (08.09.04 14:13) [412]
По той же причине, почему не нужно вмешиваться в процесс управления жызнью обьектов, хостящих интерфейсы.
Все опнятно.
Зачем тогда initilize и finilize документированы?
чем они концептуально отличаются от system._addref?
Очень прошу - не отвечайте общими словами.
Вопрос то в общем весьма конкретный.
ЗЫ. Еще огромная просьба - сбавить назидательность. Ранее я поблагодарил тебя за продуктивную дискуссию. Чрезвычайно был бы рад и благодарен, если бы мне не пришлось менять свое мнение.
:)) Если уж я справшиваю, то наверное разобрался? :)
ЗЗЫ. Из того, что вы до сих пор говрите про интерфейсы делаю вывод, что был непонят исходный вопрос. См. system по строке поиска _initialize и ниже на 4-5 строк - функция _addref.
← →
vuk © (2004-09-08 14:19) [414]to Ihor Osov"yak © (08.09.04 14:13) [412]:
>По той же причине, почему не нужно вмешиваться в процесс
>управления жызнью обьектов, хостящих интерфейсы.
Вмешиваться иной раз все-таки нужно. Но только делать это нужно с полным пониманием происходящего.
← →
Суслик © (2004-09-08 14:20) [415]
> vuk © (08.09.04 14:19) [414]
Вмешиваться иной раз все-таки нужно. Но только делать это нужно с полным пониманием происходящего.
Во-во.
Именно для вмешательства и существуют (в частности) initilize и finilize. Вот весь вопрос, почему нет addref?
← →
KSergey © (2004-09-08 14:21) [416]> [413] Суслик © (08.09.04 14:18)
> Зачем тогда initilize и finilize документированы?
> чем они концептуально отличаются от system._addref?
Прощу прощения, а скажите, почему они в один ряд встали? initilize и finilize - одно. А addref при чем тут? Или обобщаем понятия объект/модуль?
А еще такой вопрос: почему (Д5, если критично) нельзя написать finilize без initilize??
← →
Суслик © (2004-09-08 14:23) [417]
> KSergey © (08.09.04 14:21) [416]
вы совсем не о том
initialize + f1
← →
Суслик © (2004-09-08 14:30) [418]Чую интузиазма у участников нет.
Вообще initilize/finalize кто-нить пользуется?
← →
vuk © (2004-09-08 14:32) [419]to Суслик © (08.09.04 14:20) [415]:
>Во-во.
Я говорил только про интерфейсы.
← →
Суслик © (2004-09-08 14:36) [420]
> vuk © (08.09.04 14:32) [419]
А про все остальное: строки, дин. массивы и пр., варианты?
Там не надо вмешиваться?
Зачем же тогда документированы initilize/finilize?
Я бы может и сам был бы рад не пользоваться, но такая хорошая документированная фича. Да и сами ребята из борланда где-то видел этим пользуются.
Ты сам пользуешься initilize/finilize?
← →
KSergey © (2004-09-08 14:37) [421]> [417] Суслик © (08.09.04 14:23)
Прошу прощения. Сильно я ляпнул ;)
← →
jack128 © (2004-09-08 14:37) [422]Суслик © (08.09.04 14:30) [418]
Вообще initilize/finalize кто-нить пользуется?
я иногда. Но редко. Только потому, что их использование навязывает сторонний компонент..
← →
Акуличев Дмитрий (2004-09-08 14:37) [423]
> Но существуют задачи, где было бы нужно анонимно копировать
> область памяти конечно зная ее typeInfo.
Приводи типы и будет тебе щасье.
← →
Суслик © (2004-09-08 14:41) [424]
> Акуличев Дмитрий (08.09.04 14:37) [423]
Приводи типы и будет тебе щасье.
Иногда так и делаю. Это не всегда удобно.
Например надо очистить элементы массива variant с 10 по 20. Можно пробежаться и присвоить им всем null иди unassigned, например. А можно вызывать
finlize(a[10]^, 11);
← →
Суслик © (2004-09-08 14:41) [425]виноват
> finlize(a[10]^, 11);
finlize(a[10], 11);
← →
Игорь Шевченко © (2004-09-08 14:43) [426]
> Например надо очистить элементы массива variant с 10 по
> 20. Можно пробежаться и присвоить им всем null иди unassigned,
> например. А можно вызывать
>
> finlize(a[10]^, 11);
А через пару месяцев поиметь проблемы на тему: "а что же я написал"
← →
Суслик © (2004-09-08 14:46) [427]
> А через пару месяцев поиметь проблемы на тему: "а что же
> я написал"
Кому поиметь? Мне?
Повторю - это документированная функция.
Я не поимею. Другой? Нажми ф1.
Была бы недокументированная - не в жизь не пользовался бы - никогда так не делаю.
← →
Акуличев Дмитрий (2004-09-08 14:48) [428]
> Суслик © (08.09.04 14:30) [418]
> Чую интузиазма у участников нет.
>
> Вообще initilize/finalize кто-нить пользуется?
Я пользовался. Когда хранил в TList записи со строками.
Дело в том, что необходимость в Initialize/Finalize я вижу. А вот в ручном управлении счётчиком -- нет.
← →
Акуличев Дмитрий (2004-09-08 14:53) [429]
> Зачем же тогда документированы initilize/finilize?
Там где они документированы, там же и написано зачем.
Initialize should be used only in situations where a variable is dynamically allocated by other means than the New standard procedure.
Finalize should be used only in situations where a dynamically allocated variable is deallocated by other means than the Dispose procedure.
← →
Суслик © (2004-09-08 14:53) [430]
> Акуличев Дмитрий (08.09.04 14:48) [428]
> Дело в том, что необходимость в Initialize/Finalize я вижу.
> А вот в ручном управлении счётчиком -- нет.
Уточню ответ:
Наверное так
"А вот в ручном управлении счётчиком интерфейсов -- нет."
Да?
Т.е. для строк, например, видишь?
Не могу понять в чем для тебя разница.
Ну представь себе, что я в интерфейса вижу "плодотворную идею" саму по себе без привязки к com. Более того, я не только вижу, но и применяю такое видение, о чем пока пожалеть не пришлось.
Вот скажи с обозначенной выше точки зрения - чем для меня отличается скажем строка и интерфейс с точки зрения управления их жизнью?
← →
Danilka © (2004-09-08 14:55) [431][430] Суслик © (08.09.04 14:53)
> Т.е. для строк, например, видишь?
Хм, а для строчек-то зачем? Просто интересно..
← →
Суслик © (2004-09-08 14:56) [432]
> Акуличев Дмитрий (08.09.04 14:53) [429]
> Там где они документированы, там же и написано зачем.
Ну знаешь ли, читать и я могу.
Почему бы не документировать (тем более, что она есть и хорошо работает) такую функцию: addref.
С такой докой:
AddRef should be used only in situations where a variable copied by other means than by ":=".
Поясню, почему меня этот вопрос уже второй год занимает. Понимаешь, я чуствую, что здесь есть какая-то глубинная (не обозначенная впрочем во всем текущем топике :))) причина. Очень хотелось бы услышать, тех кто об этом тоже задумывался.
← →
Игорь Шевченко © (2004-09-08 14:57) [433]Суслик © (08.09.04 14:46) [427]
> Нажми ф1.
Нажал. "The word you have typed is not in the index".
← →
Суслик © (2004-09-08 15:01) [434]
> Danilka © (08.09.04 14:55) [431]
сначала пример
type
PRec = ^TRec;
TRec = record
s: string;
end;
var
p: PRec;
begin
GetMem(p, SizeOf(TRec));
p^.s := stringof("0", 10);
Finalize(p^); // без этого будет учечка - s не освободится.
FreeMem(p);
end;
зачем это нужно?
Представь, что реализуешь например свой датасет. Понятно, что при серьезной разработке ни вариантами, ни строками пользоваться нельзя - надо их эмулировать более оптимально. НО для реализации чего-то внесколькократно быстрого чем tclientdataset вполно можно пользоваться и AnsiString. Для того, чтобы быстро очищать боласти памяти нужно исползовать finalize.
← →
Суслик © (2004-09-08 15:02) [435]>>Игорь Шевченко © (08.09.04 14:57) [433]
Ты имеешь в виду очепатку?
Ну-ну
тогда жми f1 на строке finalize :)))))
← →
Акуличев Дмитрий (2004-09-08 15:03) [436]
> Суслик © (08.09.04 14:53) [430]
>
> > Акуличев Дмитрий (08.09.04 14:48) [428]
>
>
> > Дело в том, что необходимость в Initialize/Finalize я
> вижу.
> > А вот в ручном управлении счётчиком -- нет.
>
> Уточню ответ:
> Наверное так
> "А вот в ручном управлении счётчиком интерфейсов -- нет."
> Да?
Чяво? Мы же вроде бы уже про структурированные типы говорим.
> Вот скажи с обозначенной выше точки зрения - чем для меня
> отличается скажем строка и интерфейс с точки зрения управления
> их жизнью?
Ничем. Я про это всю дорогу и толкую.
Мне не надо управлять временем жизни.
Кроме особо специальных случаев. Которые, в свою очередь, полностью покрываются приведением типов.
Зачем же это надо тебе, ты никак внятно пояснить не можешь.
← →
Суслик © (2004-09-08 15:06) [437]
> Акуличев Дмитрий (08.09.04 15:03) [436]
датасет свой
часть клиенской бд
не очень нагруженной, поэтому без замороенной оптимизации.
ЗЫ. Проше прощения - вчера чуть палец не отрезал. Поэтому сложно набирать без ошибок - а глазами ошибки в тексте я до сих пор вижу плохо.
← →
Акуличев Дмитрий (2004-09-08 15:08) [438]
> Суслик © (08.09.04 14:56) [432]
> Поясню, почему меня этот вопрос уже второй год занимает.
> Понимаешь, я чуствую, что здесь есть какая-то глубинная
> (не обозначенная впрочем во всем текущем топике :))) причина.
> Очень хотелось бы услышать, тех кто об этом тоже задумывался.
Причина проста: средств для инициализации/финализации нет, для них были сделаны встроенные процедуры.
Для копирования есть присваивание с приведением типов. Зачем еще вводить в язык лишние сущности?
← →
Игорь Шевченко © (2004-09-08 15:09) [439]Суслик © (08.09.04 14:56) [432]
> Представь, что реализуешь например свой датасет. Понятно,
> что при серьезной разработке ни вариантами, ни строками
> пользоваться нельзя - надо их эмулировать более оптимально.
> НО для реализации чего-то внесколькократно быстрого чем
> tclientdataset вполно можно пользоваться и AnsiString. Для
> того, чтобы быстро очищать боласти памяти нужно исползовать
> finalize.
Суслик © (08.09.04 15:06) [437]
датасет свой
А глупый вопрос - нафига при реализации своего dataset"а использовать такие record"ы ?
← →
vuk © (2004-09-08 15:09) [440]to Суслик © (08.09.04 14:56) [432]:
>Вот скажи с обозначенной выше точки зрения - чем для меня
>отличается скажем строка и интерфейс с точки зрения управления
>их жизнью?
Объект реализующий интерфейс управляет временем жизни сам на основании счетчика ссылок. Строка - не объект и поэтому ее временем жизни управляет RTL.
Страницы: 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 1.59 MB
Время: 0.174 c