powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / делфинист предлагает сборку мусора
25 сообщений из 78, страница 3 из 4
делфинист предлагает сборку мусора
    #37876767
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иванов Александр Александрович,
> если очень хочется чтобы твой код смотрели, хоть модуль в порядок привел бы.
Я занят работой, и данный модуль мне в ней помогает. Меня он устраивает. Деструктор я поменял согласно комменатрию в примере, посмотрим, что будет. А так - я его приведу в порядок, когда перестанет устраивать. Мне умеренно хочется, чтобы Дельфи не умирал, поэтому я опубликовал этот код. Но не настолько, чтобы его менять, ведь я могу его сломать, а модуль ответственный и последствия могут быть серьёзными. "Оно работает? Да - не трогай его". Если хотите, можете в течение недели привести его в то, что Вы считаете порядком и, если мне понравится, я положу на Ваш телефон 500 рублей. Но я буду сильно придираться, учитывая Ваше плохое поведение. Категорически не рекомендуется менять стиль отступов.

> Но нет, надо строить из своего решения какую-то невероятно полезную вещь(коей она не является)
Полезной она являтся. Статистику использования я приводил. Раньше, каждый раз, когда мне надо было писать finally ... freeAndNil(x) ... end я ненавидел Дельфи, т.к. я знал, что в других языках без этого можно обойтись и знал, что нет никакой уважительной причины для отсутствия выделения объектов на стеке. Для разработчиков языка добавить такую поддержку - это раз плюнуть. Теперь я решил этот вопрос и спокойно работаю. Это польза, а Вы опять гоните и хочется ещё как-нибудь нелестно Вас назвать.

Скорее, эта фича не является настолько магической, как могло бы показаться. Ну и что? Полезной она от этого быть не перестаёт.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37876891
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenНо я буду сильно придираться, учитывая Ваше плохое поведение... даже в угол могу поставить
buddenКатегорически не рекомендуется менять стиль отступов.Это особый почерк Вашей конторы? Чтобы все боялись и не могли использовать Ваше "поделие" в своих программах?
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37877292
Esperito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenРаньше, каждый раз, когда мне надо было писать finally ... freeAndNil(x) ... end я ненавидел Дельфи, т.к. я знал, что в других языках без этого можно обойтись и знал, что нет никакой уважительной причины для отсутствия выделения объектов на стеке.Рекомендую срочно переходить на другой язык.
Польза от ваших изысканий на древней версии Делфи, честно говоря, весьма сомнительна...
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37877348
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esperito, что именно я упустил? Так уже можно? Я работаю в Delphi 2007 и не собираюсь ничего менять в обозримом будущем.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37877374
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenEsperito, что именно я упустил? Так уже можно? Я работаю в Delphi 2007 и не собираюсь ничего менять в обозримом будущем.Не поверишь, но придётся!
Новые платформы, новые железки etc заставят.
А с D2007 перейти на D2009+ ой как не просто. А забыть про VCL и влезть в FM... хех
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37877384
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator, у меня достаточно долгий и успешный опыт обороны от прогресса.
Может, и придётся когда-нибудь, но думаю, что не скоро :)
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37877393
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden, уж всем известно, что кирдыка сг не будет, а стагнация кончается регрессом :)
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37877480
Esperito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenEsperito, что именно я упустил? Так уже можно? Я работаю в Delphi 2007 и не собираюсь ничего менять в обозримом будущем.На дженериках реализации scoped objects выглядят изящнее. Пример , реализация . Обрати внимание, Scoped - это record.
Но стоит ли ради этого жертвовать производительностью и натыкаться на грабли?
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37881804
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsperitoНа дженериках реализации scoped objects выглядят изящнее. Пример , реализация . Обрати внимание, Scoped - это record.
Но стоит ли ради этого жертвовать производительностью и натыкаться на грабли?
Возможно, изящнее, но в моём языке их нет. Производительностью жертвовать ради выразительности стоит почти всегда, а грабель я тут особых не вижу.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37882418
Esperito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дженерики - это ещё и строгий контроль типов.
buddenВозможно, изящнее, но в моём языке их нет.И какой из этого следует вывод?
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37882841
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esperito, вывод? Я данную проблему для себя давно решил без дженериков, т.е. мотива переходить на что-то у меня нет. Мой код - это не "изыскания", как Вы изволили выразится, а рабочий инструмент, который я постоянно использую (статистику применения см. выше в теме). Буду и дальше пользоваться тем, что написал. Абсолютно уверен, что не все спешат перейти на каждую новую версию Delphi или других программ, которые только появляются в природе. Найдутся люди, которым мой код пригодится. Кому не нравится оформление - могут взять идею и сделать своё такое же. Если кому-то не пригодится - что ж, значит не пригодится, на вкус и цвет товарищей нет.

Касаемо дженериков. В Дельфи и без дженериков полиморфизм устроен достаточно хорошо благодаря дизайну и RTTI. Например,
вот функции, которыми я иногда пользуюсь.
Код: pascal
1.
2.
3.
4.
5.
6.
procedure SetPropValue(Instance: TObject; const PropName: string;
  const Value: Variant); overload;// только для published
function setIntPropByName(o:TPersistent;propertyName:string;value:integer):PPropInfo;
function setNotifyEventPropByName(o:TPersistent;propertyName:string;value:TNotifyEvent):PPropInfo;
procedure invokeNotifyEventByName(o:TObject;Name:string;Sender:TObject);
procedure ChangeClass(Obj: TObject; C: TClass);


Эти функции позволяют однородно обращаться к уже существующим классам, которые стали не родственными из-за ограничений наследования в Дельфи. Например, к классам VCL. Да, это медленное обращение, но это - 0.1% всех обращений к объектам, а в Питоне 100% обращений к объектам делаются так, и всё равно на Питоне пишут полезные программы. Может быть, то же самое можно сделать лучше с дженериками, но и без дженериков тоже можно.

Дженериков я наелся, когда пришлось программировать на С++. Я безконечно далёк от того, чтобы ими восхищаться. В С++ они порождают не меньше проблем, чем решают. Возможно, в Дельфи они сделаны менее криво, чем в С++, но этот вопрос для меня не имеет пока даже академического интереса, потому что мне интересен только один вид препроцессора - это defmacro.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37882862
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,
главное - не забрасывай PHP компилятор. А то, кроме тебя, кто еще их уделаеть сможет?
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37883167
Иванов Александр Александрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenИванов Александр Александрович,
> если очень хочется чтобы твой код смотрели, хоть модуль в порядок привел бы.
Я занят работой, и данный модуль мне в ней помогает. Меня он устраивает. Деструктор я поменял согласно комменатрию в примере, посмотрим, что будет. А так - я его приведу в порядок, когда перестанет устраивать. Мне умеренно хочется, чтобы Дельфи не умирал, поэтому я опубликовал этот код. Но не настолько, чтобы его менять, ведь я могу его сломать, а модуль ответственный и последствия могут быть серьёзными. "Оно работает? Да - не трогай его". Если хотите, можете в течение недели привести его в то, что Вы считаете порядком и, если мне понравится, я положу на Ваш телефон 500 рублей. Но я буду сильно придираться, учитывая Ваше плохое поведение. Категорически не рекомендуется менять стиль отступов.

> Но нет, надо строить из своего решения какую-то невероятно полезную вещь(коей она не является)
Полезной она являтся. Статистику использования я приводил. Раньше, каждый раз, когда мне надо было писать finally ... freeAndNil(x) ... end я ненавидел Дельфи, т.к. я знал, что в других языках без этого можно обойтись и знал, что нет никакой уважительной причины для отсутствия выделения объектов на стеке. Для разработчиков языка добавить такую поддержку - это раз плюнуть. Теперь я решил этот вопрос и спокойно работаю. Это польза, а Вы опять гоните и хочется ещё как-нибудь нелестно Вас назвать.

Скорее, эта фича не является настолько магической, как могло бы показаться. Ну и что? Полезной она от этого быть не перестаёт.
Польза этой фичи только для ленивых. Убрать try finally, который является стандартом, заменив на подсчет ссылок интерфейсов. Это есть использование интерфейсов не по назначению, так сказать сайд-эффект. Не спорю, кому-то покажется полезным, но сам я такое использовать не буду.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37883168
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenВозможно, в Дельфи они сделаны менее криво
такой же bloated ужас, а не криво они в принципе не умеют
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37883179
Иванов Александр Александрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одно замечание. OnStack - я так понимаю имеется в виду FILO. Неужели важность этой особенности больше, нежели указание, что будет объект автоматически уничтожен. Плюс OnStack может ввести в заблуждение, на счет стека, как части памяти.
По-моемому, проще функцию назвать типа как в С# - "В сборщик мусора". Так хоть понятней будет.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37883231
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
. Убрать try finally, который может использоваться не только для изничтожения созданных объектов, но и для обеспечения логической целостности.... с другой стороны - костылик для написания простыней? создал объект - добавил - не паришься прописывать его убийство в финализации.... с третьей - добавил его в обжект-лист, и только этот обжект-лист в финализации и сносишь. Со всем содержимым. В общем - не стал бы я в своих проектах в точности такой модуль использовать, но идея - в чем то здравая.... а еще - когда микрообъекты постоянно создаешь - удаляешь - их можно не удалять, а на потом оставлять. в кучке. Не нужен - вернул, нужен - взял. Крохоборская экономия такая.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37884694
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> OnStack - я так понимаю имеется в виду FILO.
Удивительно, конечно, что у народа возникают трудности с элементарными вещами, но FILO, или скорее LIFO - это не просто так,это фундаментальная особенность очень многих явлений жизни.

Деньги в кошельке,кошелёк в кармане. Смерть в игле, игла в яйце, яйцо в утке, и т.п. Компонент принадлежит форме, форма принадлежит приложению. Сначала подключись к серверу, потом открой запрос. Порядок уничтожения определяется порядком вложенности.

Соответственно, размещение именно на стеке это паттерн, к-рый зачастую делает алгоритм ясным.

> Убрать try finally, который является стандартом
Не стоит забывать, что Object Pascal вырос просто из Паскаля, к-рый является учебным языком, не самым удачным. То ли у Вирта не хватило ума, то ли сработали какие-то ограничения (по времени,бюджету, числу страниц стандарта). Выучите лисп, бейсик, bash и С++ для расширения кругозора, тогда станет ясно, что почти во всех языках не хватает каких-то важных концепций и их приходится реализовывать с помощью костылей. Лучше всего, конечно же, выучить лисп, потому что в нём больше всего концепций, незнакомых современным программистам и потому что в нём наиболее мощные способы создания костылей. Хотя потихонечку его и разворовывают, например, лямбда-функции, которые в лиспе были ещё в 80-х годах, (если не в 60-х) наконец-то появились и в С#, и в Дельфи, если мне память не изменяет. Я написал данный код, основываясь на практике работы в лиспе и используя концепции лиспа. Например, bindingVariable - это эмуляция понятия special variable лиспа, до которой дизайнеры "современных" языков, может быть, ещё не додумались, хотя она очень естественна.

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

> По-моемому, проще функцию назвать типа как в С# - "В сборщик мусора".
Это разные понятия. При сборке мусора момент уничтожения объекта неизвестен. Для типонебезопасных языков, в к-рых легко испортить память и к к-рым относится и Delphi, это слишком опасно. Размещение "на стеке" наиболее безопасно, т.к. момент уничтожения объекта точно определён. Более мощными и более опасными методами (подсчёт ссылок и сборка мусора в собственном смысле слова) в таких языках нужно пользоваться только тогда, когда они действительно необходимы. Ближайший аналог того, что я написал - это именно размещение на стеке, отсюда и название.

> но и для обеспечения логической целостности
Уничтожение объектов тоже может служить логической целостности, на этом основано finallydoo и объекты-стражи (guard). Всё это у меня реализовано, не считая того, что экспешен в "финализаторе" в текущей версии сломает механизм.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37884856
Иванов Александр Александрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да "размещение на стеке" не имеет отношения к сборке мусора. Такого общепринятого понятия вообще нет. Еще раз, для медленно вникающих: стек отношения к уничтожению объектов не имеет.
Любой вменяемый программист, когда говорит о стеке, он думает о "последнем пришел, первым у ушел", а не об уничтожении объектов. Неужели это не очевидно?

Стандарт - это не святое. Это то ,что выработано практикой и дает понимание, написанного одним программистом, другому программисту. Подход, яля "пишу вне стандартов", или "свой код смотрю только я" - подход истинного говнокодера.

Короче, подход понятен. Сэмулировал что-то встроенное из другого языка возможностями текущего и рад. Только во-первых, это всегда неэффективно, во-вторых заставляет на одном языке думать в терминах другого языка. Много программистов дельфи, которые программируют еще и на лиспе?
"Лучше всего, конечно же, выучить лисп, потому что в нём больше всего концепций, незнакомых современным программистам и потому что в нём наиболее мощные способы создания костылей" - спасибо поржал. Короче , давай, до свиданья!
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37884899
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стек отношения к уничтожению объектов не имеет.
я это понял как метафору того, что "локальные переменные ф-ции" "обычно в компилируемых языках живут на стеке цп". мдя....

если ограничивать "время жизни" пределами ф-ции - да, все хорошо. Если как в плюсах например иметь локальные переменные внутри блоков..... то опять - try - finally ? или это не нужно - внутри блока? например ограничивать время жизни объекта одной итерацией цикла? ну наверное - костыли гибкие, и можно создать еще 1 - локальный хранитель.... и его принудительно.... но прозрачность - теряется, контуры - размываются.

Если хочется как в лиспе, то и писать надо - на лиспе, где все как в лиспе.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37885190
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenСлава Богу, я веду свой проект сам и могу позволить себе роскошь устанавливать свои правила кодирования.Дай Бог, чтобы так оно оставалось до самой смерти проекта. Чтобы не пришлось этот проект поддерживать кому-нибудь другому
buddenБолее мощными и более опасными методами (подсчёт ссылок и сборка мусора в собственном смысле слова) в таких языках нужно пользоваться только тогда, когда они действительно необходимы.О как. Т.е. Вы типом string не пользуетесь? Опасно же. А вдруг, что-то произойдет?
buddenне считая того, что экспешен в "финализаторе" в текущей версии сломает механизм.Первое же многопоточное приложение даже воспоминаний от Вашей системы не оставит
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37885349
Esperito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЯ данную проблему для себя давно решил без дженериков, т.е. мотива переходить на что-то у меня нет. Мой код - это не "изыскания", как Вы изволили выразится, а рабочий инструмент, который я постоянно использую (статистику применения см. выше в теме). Буду и дальше пользоваться тем, что написал.Вы же вроде бы пришли в эту тему, чтобы узнать, а не появилось ли более удачное решение по автоматическому освобождению памяти.
Появилось. Но на основе более новой версии Делфи, на которую вы переходить не хотите.

buddenВ Дельфи и без дженериков полиморфизм устроен достаточно хорошо благодаря дизайну и RTTI.В D2010 RTTI значительно улучшили.

buddenДженериков я наелся, когда пришлось программировать на С++.Извините, в C++ нет дженериков, там шаблоны.
Это таки большая разница.

P.S. То, что у вас реализовано, - это не сборка мусора. Для полноценной сборки мусора нужен отдельный объект - сборщик мусора, для эффективности он должен быть интегрирован с менеджером памяти, он же должен решать, когда освобождать память (обычно это делается нечасто, но помногу, и вовсе не во время выхода каждый переменной из области видимости).
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37885406
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovесли ограничивать "время жизни" пределами ф-ции - да, все хорошо. Если как в плюсах например иметь локальные переменные внутри блоков..... то опять - try - finally ?
Да, есть такая неприятность. Два варианта:
1. try-finally и вторая переменная fr2, к-рая на finally явно присваивается unassigned.
2. локальная процедура и в ней локальная переменная fr. например ограничивать время жизни объекта одной итерацией цикла?
Если количество итераций не слишком велико и деструкто объекта просто освобождает память, я не парюсь
и размещаю объекты для всех итераций "на стеке",примерно так:
Код: pascal
1.
2.
3.
4.
5.
for i:=1 to N do
  begin
  x:=TSomeObject.Create(nil); onStack(x); 
  // делать что-то
  end

В итоге будет размещено N объектов и все они будут уничтожены при закрытии fr.
Если же объект является хранителем чего-то и его деструктор нужен не только для освобождения памяти,
но и является частью логики приложения, то остаётся try-finally или оформить тело цикла в виде процедуры.
_Vasilisk_...многопоточное приложение...Не помню, чтобы я это тестировал, но, по замыслу, должно работать. Переменная, содержащая текущий кадр стека - threadvar, не вижу других граблей.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37885420
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsperitoP.S. То, что у вас реализовано, - это не сборка мусора.
Я разве это утверждал? Перед тем, как я начал тему, мне показалось, что мне нужна для одного дела сборка мусора, но я уже давно без неё обошёлся и даже забыл повод. А всё обсуждение stackutil - это офтоп, вообще-то.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37885436
Esperito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЯ разве это утверждал?Я просто уточнил, на всякий случай.

Так что, тема исчерпана?
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37885754
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esperito, ну вообще, вопрос, который я поставил в своём первом комменте, по-моему, так и остался без ответа.
Касаемо моего кода, stackutil, видимо, нужно сделать более развёрнутый набор примеров, тестовые проекты, протестировать потокобезопасность, но у меня нет времени этим заниматься и не скоро появится.
...
Рейтинг: 0 / 0
25 сообщений из 78, страница 3 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / делфинист предлагает сборку мусора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]