|
|
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
тыц ну и насколько обоснованна детерминированная сборка мелких объектов? конечно если их на стеке располагать. а так потеря проиводительности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2009, 14:32 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Ынтырпрайзз, Что-то тебя давненько видно не было ) Он не предлагает сборку мусора, он предлагает подобие сишарпового using. К потере производительности это не ведет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2009, 14:59 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Ничего, что я поднял такую старую тему? вот мой вариант реализации данной фичи. "На стеке" можно разместить любой потомок TOBject, но можно сделать и для других типов. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Здесь это кажется не слишком лаконичным по сравнению с Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. однако в менее тривиальных случаях выигрываем из-за того, что уменьшается вложенность кода, а действия по уничтожению объекта не отрываются от места его создания, что увеличивает ясность кода. Кроме того, если объектов больше одного, то обрамление пишется один раз: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Соответственно, можно писать разного рода хранители ресурсов, например: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. код прилагается. Я постоянно пользуюсь им в D2007 и уже давно не пишу для таких случаев try...finally Собственно, я сюда зашёл посмотреть, нет ли где-нибудь реализованной полноценной сборки мусора для Delphi. Видимо, нет? Можно ли, интересно, сделать её в таком же стиле? Что-нибудь вроде: Код: pascal 1. 2. 3. 4. 5. я думаю, что можно. А Вы как думаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 13:55 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
сорри, в последнем примере процедуру test читать так: Код: pascal 1. 2. 3. 4. 5. 6. 7. на счастье, в реальной жизни компилятор выдаст предупреждение, если забыть эту строчку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 14:00 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenя думаю, что можно. А Вы как думаете?Вместо этого Код: pascal 1. 2. 3. 4. 5. 6. Можно использовать TObjectList. С той же функциональностью. Или я Вас не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 14:19 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, про TObjectList я узнал две недели назад, а приложенному коду - два года примерно. Меня отчасти оправдывает то, что я писал ещё на первой версии Delphi, а TObjectList появился не сразу, когда я уже умел без него обходиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 14:25 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, а кстати, даже, если бы и знал, всё равно написал бы так же. Во-первых, TObjectList разве гарантирует порядок удаления объектов? Во-вторых, в моём коде можно поставить брекпойнт или сделать вывод в лог, если что-то пойдёт не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 14:28 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenTObjectList разве гарантирует порядок удаления объектов?Да, но это никому не нужно buddenв моём коде можно поставить брекпойнт или сделать вывод в лог, если что-то пойдёт не такАналогично с TObjectList И еще, из того, что процедура называется OnStack не следует автоматически, что она работает со стеком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 15:53 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, > Аналогично с TObjectList Я, честно сказать, не в курсе. Мне всегда казалось, что нельзя так просто взять и поменять класс, входящий в VCL, может быть, я не в курсе. Т.е., лог только через установку брекпойнта с условием, а это - недостаточно гибко и удобно меня. >Да, но это никому не нужно А вот здесь Вы меня не поняли. >OnStack не следует автоматически, что она работает со стеком. Она с ним и не работает, Вы ж исходник читали, как я понял? Кроме того, слова "на стеке" я недаром заключил в кавычки. Смысл Вашего высказывания в чём? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 16:01 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. А почему х там будет уничтожен? ЧТо его на выходе из процедуры уничтожит? OnStack посмотрел, там как я понял добавление в "стэк" и чо? Пока не видать чего-то такого, за что "нужно брать деньги за стажеровку у нас". "однако в менее тривиальных случаях выигрываем из-за того, что уменьшается вложенность кода, а действия по уничтожению объекта не отрываются от места его создания, что увеличивает ясность кода. Кроме того, если объектов больше одного, то обрамление пишется один раз:" Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. мне вот интересно, да ушли от одной(!) вложенности, а как будут высвобождаться ресурсы в случае ошибок в x:=TExampleObject.Create или x.example? Да и ясность кода нестандартные решения НИКОГДА не повышают. Посмотрел код, деструкторы в цепочку вызываются, а что будет если в среднем деструкторе ексепшен высыпится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 18:33 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Иванов Александр Александрович, > А почему х там будет уничтожен? То, что Вы посмотрели исходник, где всё написано, и не поняли, как раз и означает, что с Вас вполне уместно > брать деньги за стажировку у нас ;) > Посмотрел код, деструкторы в цепочку вызываются, а что будет если в среднем деструкторе ексепшен высыпится? Вы правы в том, что поведение в этом случае отличается от try..finally. Я думаю, эксепшн в деструкторе - это в любом случае нехорошо и такого быть не должно. Здесь последующие деструкторы не вызовутся, но я не думаю, что это большая беда по сравнению с самим фактом экспешена в деструкторе. Наверное, можно поменять логику так, чтобы исключения в деструкторе не препятствовали вызову последующих деструкторов. В моей практике пока эта особенность не вызывала проблем, т.к. эксепшн в деструкторе для меня означает плохой код, который нужно исправлять. Хотя тут действительно есть о чём подумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 20:25 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenЯ, честно сказать, не в курсе. Мне всегда казалось, что нельзя так просто взять и поменять класс, входящий в VCL,Наследование запретили? buddenА вот здесь Вы меня не поняли.Попробуйте привести пример когда важен порядок уничтожения объектов buddenслова "на стеке" я недаром заключил в кавычки.Тогда вопросов больше не имею buddenТо, что Вы посмотрели исходник, где всё написано, и не поняли, как раз и означает, что с Вас вполне уместноЭто означает, что лучше бы Вам быть как можно дальше от того, кто возьмется сопровождать Ваш код. И лучше всего - в бетонном бункере. Сам стиль кода не плохой. Он ужасен Хотите сборку мусора - используйте интерфейсы. Все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 20:43 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, в целом, я понял, что Вы сегодня ещё ни об кого не вытирали ноги, и именно в этом состоит цель Вашего пребывания в данной теме. Но у Вас плохо получилось, потому что вот этот вопрос > Попробуйте привести пример когда важен порядок уничтожения объектов - просто идиотский. Думаю, Вам стоит подумать о смене профессии. В качестве прикола, предлагаю Вам привести пример того же кода с интерфейсами и мы посмотрим, какой код выглядит страшнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 21:00 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
На всякий случай, чтобы никто не был сбит с толку кавычками, повторяю: несмотря на то, что объекты не размещаются на стеке, они, тем не менее, уничтожаются при выходе переменной fr из области видимости, в порядке, обратном порядку вызова для них функции onStack и это является достаточно точной аналогией размещения на стеке в С с точки зрения времени жизни объекта. С точки зрения работы с памятью ситуация, конечно, другая, объекты размещаются в куче, как и обычно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 21:08 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenДумаю, Вам стоит подумать о смене профессии. Обязательно подумаю. Спасибо за идею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 21:28 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Может я чего не догоняю, но зачем так сложно? Разве то, что у вас там понаписано чем то отличается от подобного: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ? Если порядок уничтожения важен - можно перекрыть деструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 22:15 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Только я бы еще сделал так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2012, 22:17 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
В JCL ( JclSysUtils.pas (см. секцию Guards) есть попытка реализовать автоосвобождение объектов. В виде таких методов: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. http://wiki.delphi-jedi.org/wiki/JCL_Help:Guard@Pointer@IMultiSafeGuard]Описание методов в Jedi Wiki . Интерфейсы выглядят так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 01:56 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenИванов Александр Александрович, > А почему х там будет уничтожен? То, что Вы посмотрели исходник, где всё написано, и не поняли, как раз и означает, что с Вас вполне уместно > брать деньги за стажировку у нас ;) > Посмотрел код, деструкторы в цепочку вызываются, а что будет если в среднем деструкторе ексепшен высыпится? Вы правы в том, что поведение в этом случае отличается от try..finally. Я думаю, эксепшн в деструкторе - это в любом случае нехорошо и такого быть не должно. Здесь последующие деструкторы не вызовутся, но я не думаю, что это большая беда по сравнению с самим фактом экспешена в деструкторе. Наверное, можно поменять логику так, чтобы исключения в деструкторе не препятствовали вызову последующих деструкторов. В моей практике пока эта особенность не вызывала проблем, т.к. эксепшн в деструкторе для меня означает плохой код, который нужно исправлять. Хотя тут действительно есть о чём подумать... Твой говнокод c помощью блокнота разобрать практически невозможно. Это короче не важно, важно другое. П моемому мнению, применять нестандартные решения в стандартных ситуациях, к добру не приведет. Да и зачем использовать подсчет ссылок на интерфейсы когда куда более естественным решением является try finally. Добавлять неясности в коде, ради того, чтобы уйти от одной вложенности - к надежности не приведет. Есть же правило, что достижение качества кода идет через снижение сложности. Мне куда понятней try finaly, нежели ковыряние в каком-то модуле на дредмет того, что делает OnStack. А вто тут: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. mkStackFr - глобальная переменная? Тогда если например три подобных процедуры будут вызваны, освобождение первых двух будет когда только третья закончится? Или еще какие-то подводные камни я не учел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 10:12 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
А, понял, mkStackFr оказывается функция. Последний вопрос снимается с повестки, но вопрос про стиль еще больше возникает. Смешались люди, интерфейсы, ООП, процедурное программирование...=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 10:21 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
А я думаю, что в Delphi механизм уборки мусора появится в "базе", в скором времени, так что не надо бежать впереди паровоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 10:24 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
[quot budden]однако в менее тривиальных случаях выигрываем из-за того, что уменьшается вложенность кода, а действия по уничтожению объекта не отрываются от места его создания, что увеличивает ясность кода. Кроме того, если объектов больше одного, то обрамление пишется один раз: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 10:33 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Херней занимаетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 10:35 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
чччДХерней занимаетесь. Вынужден с прискорбием согласиться ))) Надо руками - finally. Надо автоматом - interface. Надо потрахаться на пустом месте - ну выдумывайте чё хотите, только покуда нет внятного результата и бонуса - лучше не публиковаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 11:36 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
чччДХерней занимаетесь.+мульён ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 11:43 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
P.S. в понедельник с утра этот код не поддается осмыслению )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 11:44 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
боян, было на дженериках http://blog.barrkel.com/2008/09/smart-pointers-in-delphi.html http://www.delphiplus.org/articles/delphi/smart_pointers_in_object_pascal/index.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 11:46 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov, от первого варианта по сути не отличается. Однако, у меня есть разные дополнительные вещи, например, bindingVariable (связывает переменную в области видимости fr), finallyDoo( выполнить функцию с аргументом Tobject при закрытии fr). Все "кадры стека" данного треда связаны между собой, так что можно получить какую-то информацию о вышележащих кадрах. Правда, я этим не пользуюсь и быстро про это забыл. Есть минимальная защита от того, что мы попытаемся написать onStack без создания объекта. x := F.Add(TExampleObject.Create); - это вроде не прокатит, придётся писать x := F.Add(TExampleObject.Create) as TExampleObject; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:24 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
debose, в JCL по сути, то же самое, что и у меня, только у меня применение лаконичнее, поэтому буду и дальше пользоваться своим. В любом случае, будет хорошо, если народ начнёт пользоваться подобными вещами, в этом случае намного удобнее писать и читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:36 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Квейд, вообще-то идея разместить объекты на стеке ясно не нова. Я не пользуюсь дженериками, в моей версии Delphi их попросту нет. Кроме того, мой код в использовании намного лаконичнее и мне не нужны лишние типы. Видимо, можно и код по Вашей ссылке сделать настолько же лаконичным. Но вопрос не в том, есть этот код или нет, а пользуются этим подходом или нет. Я пользуюсь и нахожу удобным. Если сравнивать Delphi и С++, возможность совершать действия по факту выхода из функции без написания конструкции try.., а лишь за счёт создания объекта-сторожа на стеке даёт С++ гигантское преимущество в выразительности и надёжности. Мне удалось перенести эти возможности в Delphi, чему я весьма рад. Если говорить о лиспе, то там вовсю применяются конструкции типа with-open-file, которые ещё намного мощнее. Без нормального препроцессора их не получится реализовать в Delphi, но хотя бы не занимать для сторожа имя переменной вполне получается. Т.е., я могу просто написать withUpdateTransaction; // и транзакция будет закрыта при выходе из функции мне не нужно придумывать под это имя переменной. В моём текущем проекте onStack встречается 362 раза, finallyDo - 20 раз, bindingVariable - 26 раз, разного рода конструкции with, построенные на том же механизме (кстати, для этого требуется, чтобы была threadvar для хранения текущего "кадра стека") - примерно 100 раз. Среди конструкций with есть такие: withDefaultTransaction withUpdateTransaction withMessages withMutex withSavedForegroundWindow Это к ответу на замечание про профит, который кто-то задал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:46 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenx := F.Add(TExampleObject.Create); - это вроде не прокатит, придётся писать x := F.Add(TExampleObject.Create) as TExampleObject; Прокатит, если объявить: function Add(AObject: TObject) :Pointer; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:50 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddendebose, в JCL по сути, то же самое, что и у меня, только у меня применение лаконичнее, поэтому буду и дальше пользоваться своим. В любом случае, будет хорошо, если народ начнёт пользоваться подобными вещами, в этом случае намного удобнее писать и читать. Вот что-то не заметил ни какого удобства. А изобретать велосипед ради экономии пары строчек, как-то не тянет. Кроме того, с try finally любому нормальному программеру всё ясно и очевидно, кусок можно скопипастить из одного проекта (примера кода) в другой, а тут въезжай еще что это за методы вызываются где их реализация закопана и т.п. Т.е. нужны какие-то очень веские основания, которых не заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:52 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenЯ пользуюсь и нахожу удобным. Если сравнивать Delphi и С++, возможность совершать действия по факту выхода из функции без написания конструкции try.., а лишь за счёт создания объекта-сторожа на стеке даёт С++ гигантское преимущество в выразительности и надёжности. ...и огромный проигрыш в производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:52 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusovогромный проигрыш в производительности кроме доисторического bcc с его унылым кодогеном есть и "более оптимальные" плюсовые компайлеры, к-е умело заинлайнив все что можно минимизируют проигрыш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:16 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov, > ...и огромный проигрыш в производительности. Вы о чём? С++ вообще-то производит весьма быстрый код, а выделение объектов на стеке - быстрее, чем в куче. Если Вы имеете в виду, что интерфейсы работают намного медленнее try..finally, то я на это Вам так отвечу: популярность Delphi падает, а популярность Python растёт. При этом Python работает примерно в 30-100 раз медленнее Delphi. Я думаю, компромиссные подходы, при которых снижается быстродействие (но всё равно остаётся быстрее Python), при этом сохраняется статическая проверка типов, способствуют продлению жизни Delphi больше, чем верность традиции написания пусть и быстрых, но слишком многословных "правильных" программ. > Прокатит, если объявить: > function Add(AObject: TObject) :Pointer; Это ещё хуже, т.к. отключает статическую проверку типов при создании объекта varOfSomeClass:=x.Add(TIncompatibleClass.Create); с непредсказуемыми последствиями. Кстати, у меня есть один класс nod, который я очень часто использую и для которого есть специальная версия выделения на стеке: Код: pascal 1. И мы можем составлять выражения из объектов, размещённых на стеке. Код: pascal 1. 2. 3. 4. т.е., объекты могут быть анонимными. Здесь print - это метод класса nod. Если Вы сделаете onStack указателем, то нельзя будет вызвать print без явного приведения типа (с отсутствием статической проверки), а если Вы сделаете как Вы предлагаете x.add, то функция nodOnStack будет принимать лишний параметр - сам объект-хранитель. У меня объект-хранитель неявен (определяется текущим тредом), поэтому сама конструкция onStack имеет один параметр, можно написать функцию nodOnStack с одним параметром и функцию with... с нулём параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:17 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden> ...и огромный проигрыш в производительности. Вы о чём? С++ вообще-то производит весьма быстрый код, а выделение объектов на стеке - быстрее, чем в куче. Я про Ваш подход vs try-finally, а не про C++. Вы выделяете объекты в куче + добавляете дополнительный оверхеад при работе со списками и интерфейсами. На стеке, возможно, и быстрее - но то, что Вы предлагаете это и близко не лежало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:18 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov, я ответил про Python. Когда питонистов спрашивают "что вы делаете, когда ваша программа тормозит слишком сильно", они говорят "мы переписываем это на С". Соответственно, в нашем случае можно переписать на try..finally. Но даже если этого не делать, будет всё равно на порядок быстрее, чем на питоне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:22 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenКогда питонистов спрашивают "что вы делаете, когда ваша программа тормозит слишком сильно", они говорят "мы переписываем это на С" hiphop туда же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:41 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
vavan, не понял, что Вы имеете в виду, но они переписывают на С не всю программу, а только узкие места по производительности. Я сам не сторонник Python, однако, тот факт, что Delphi тихонько умирает, а Python идёт в гору, я не взялся бы оспаривать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:56 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Соответственно, как человек, не желающий ни в какой перспективе переходить ни на Python, ни на С++, предпочитаю взять из других языков то, что можно, и использовать это в Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:57 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenне понял, что Вы имеете в виду почитай про "facebook php c++ hiphop" а рулит у них александреску, если ты в плюсах ориентируешься тож не пустой звук должен быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:59 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
vavan, нда, была у меня пара лет назад идея сделать компилятор PHP в нативный код. Хм, может ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:58 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenбыла у меня пара лет назад идея сделать компилятор PHP в нативный код "все уже украдено до нас" (С) buddenможет ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятноалександреску нервно закурил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 09:51 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
vavanbuddenбыла у меня пара лет назад идея сделать компилятор PHP в нативный код "все уже украдено до нас" (С) buddenможет ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятноалександреску нервно закурил +1 Вот уделает их, вообще ЧСВ зашкалит, будет деньги не за стажировку брать, а за чтение его мыслей на форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 09:58 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden... предпочитаю взять из других языков то, что можно, и использовать это в Delphi. А не пробовали из нескольких блюд взять всё самое вкусное и смешать? С бутерброда икру, из супа кусок мяса, из мартини вишенку, с торта кремовую розочку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 12:33 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Иванов Александр Александрович, У меня ЧСВ адекватно достижениям. А Вы, милочек - баран (извините). Потому что, вместо того, чтобы попытаться понять код или, допустим, написать консольный проект из 10 строк и запустить его, Вы просмотрели код в блокноте (sic!) и после этого на форуме (на весь интернет!) стали сомневаться в работоспособности кода. Почему, Вы думаете, я должен был Вам отвечать в теме, где я искал сотрудников? Ведь это было своего рода тестовое задание на собеседовании, и Вы, кстати говоря, его не решили. Более того, Вы его не решили, даже когда Вам дали подсказку в виде работоспособного исходника. Вы думаете, мне больше нечем заняться, кроме как делать Вашу работу? С Вас нужно только брать деньги и никак иначе - это побудит Вас внимательнее читать исходники и пользоваться для этого адекватными средствами. Хотя... потраченное на Вас время Вы отработали, указав на проблему с исключениями, за что Вам объявляется ещё и благодарность с занесением в исходник. Чтобы впредь больше никто не смотрел проект в блокноте, а имел возможность его запустить и убедиться в том, что всё работает, прилагается тестовый проект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 12:16 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden,тьфу,ошибся в комментах. Всё переделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 12:23 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden, и ещё одна правка, пожалуй, не помешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 12:26 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenИванов Александр Александрович, У меня ЧСВ адекватно достижениям. А Вы, милочек - баран (извините). Потому что, вместо того, чтобы попытаться понять код или, допустим, написать консольный проект из 10 строк и запустить его, Вы просмотрели код в блокноте (sic!) и после этого на форуме (на весь интернет!) стали сомневаться в работоспособности кода. Почему, Вы думаете, я должен был Вам отвечать в теме, где я искал сотрудников? Ведь это было своего рода тестовое задание на собеседовании, и Вы, кстати говоря, его не решили. Более того, Вы его не решили, даже когда Вам дали подсказку в виде работоспособного исходника. Вы думаете, мне больше нечем заняться, кроме как делать Вашу работу? С Вас нужно только брать деньги и никак иначе - это побудит Вас внимательнее читать исходники и пользоваться для этого адекватными средствами. Хотя... потраченное на Вас время Вы отработали, указав на проблему с исключениями, за что Вам объявляется ещё и благодарность с занесением в исходник. Чтобы впредь больше никто не смотрел проект в блокноте, а имел возможность его запустить и убедиться в том, что всё работает, прилагается тестовый проект. На Вы и баран - вместе не совмещаются. Я спросил как работает, ответ - думайте сами. Еще деньги брать за стажировку. Это все говорит о безкрайнем ЧСВ, и только. Одна фраза - "используются интерфейсы" решила бы проблемы. Но нет, надо строить из своего решения какую-то невероятно полезную вещь(коей она не является) и заставлять копошится в говномодуле. Ну не знаю, я бы перед демонстрацией на весь интернет!! :), если очень хочется чтобы твой код смотрели, хоть модуль в порядок привел бы. З.Ы. Заставлять придумывать нестандартные решения там, где есть стандартные, на собеседовании - простой способ никого не нанять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:49 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Во-мне интересно, вы писали что взяли кого-то. Он что, написал подобное решение на собеседовании? Только честно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:52 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Иванов Александр Александрович, > если очень хочется чтобы твой код смотрели, хоть модуль в порядок привел бы. Я занят работой, и данный модуль мне в ней помогает. Меня он устраивает. Деструктор я поменял согласно комменатрию в примере, посмотрим, что будет. А так - я его приведу в порядок, когда перестанет устраивать. Мне умеренно хочется, чтобы Дельфи не умирал, поэтому я опубликовал этот код. Но не настолько, чтобы его менять, ведь я могу его сломать, а модуль ответственный и последствия могут быть серьёзными. "Оно работает? Да - не трогай его". Если хотите, можете в течение недели привести его в то, что Вы считаете порядком и, если мне понравится, я положу на Ваш телефон 500 рублей. Но я буду сильно придираться, учитывая Ваше плохое поведение. Категорически не рекомендуется менять стиль отступов. > Но нет, надо строить из своего решения какую-то невероятно полезную вещь(коей она не является) Полезной она являтся. Статистику использования я приводил. Раньше, каждый раз, когда мне надо было писать finally ... freeAndNil(x) ... end я ненавидел Дельфи, т.к. я знал, что в других языках без этого можно обойтись и знал, что нет никакой уважительной причины для отсутствия выделения объектов на стеке. Для разработчиков языка добавить такую поддержку - это раз плюнуть. Теперь я решил этот вопрос и спокойно работаю. Это польза, а Вы опять гоните и хочется ещё как-нибудь нелестно Вас назвать. Скорее, эта фича не является настолько магической, как могло бы показаться. Ну и что? Полезной она от этого быть не перестаёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 15:21 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenНо я буду сильно придираться, учитывая Ваше плохое поведение... даже в угол могу поставить buddenКатегорически не рекомендуется менять стиль отступов.Это особый почерк Вашей конторы? Чтобы все боялись и не могли использовать Ваше "поделие" в своих программах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 16:13 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenРаньше, каждый раз, когда мне надо было писать finally ... freeAndNil(x) ... end я ненавидел Дельфи, т.к. я знал, что в других языках без этого можно обойтись и знал, что нет никакой уважительной причины для отсутствия выделения объектов на стеке.Рекомендую срочно переходить на другой язык. Польза от ваших изысканий на древней версии Делфи, честно говоря, весьма сомнительна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 20:27 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Esperito, что именно я упустил? Так уже можно? Я работаю в Delphi 2007 и не собираюсь ничего менять в обозримом будущем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 21:33 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenEsperito, что именно я упустил? Так уже можно? Я работаю в Delphi 2007 и не собираюсь ничего менять в обозримом будущем.Не поверишь, но придётся! Новые платформы, новые железки etc заставят. А с D2007 перейти на D2009+ ой как не просто. А забыть про VCL и влезть в FM... хех ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 22:07 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Gator, у меня достаточно долгий и успешный опыт обороны от прогресса. Может, и придётся когда-нибудь, но думаю, что не скоро :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 22:22 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden, уж всем известно, что кирдыка сг не будет, а стагнация кончается регрессом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 22:32 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenEsperito, что именно я упустил? Так уже можно? Я работаю в Delphi 2007 и не собираюсь ничего менять в обозримом будущем.На дженериках реализации scoped objects выглядят изящнее. Пример , реализация . Обрати внимание, Scoped - это record. Но стоит ли ради этого жертвовать производительностью и натыкаться на грабли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 02:11 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
EsperitoНа дженериках реализации scoped objects выглядят изящнее. Пример , реализация . Обрати внимание, Scoped - это record. Но стоит ли ради этого жертвовать производительностью и натыкаться на грабли? Возможно, изящнее, но в моём языке их нет. Производительностью жертвовать ради выразительности стоит почти всегда, а грабель я тут особых не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 10:53 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Дженерики - это ещё и строгий контроль типов. buddenВозможно, изящнее, но в моём языке их нет.И какой из этого следует вывод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 15:44 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Esperito, вывод? Я данную проблему для себя давно решил без дженериков, т.е. мотива переходить на что-то у меня нет. Мой код - это не "изыскания", как Вы изволили выразится, а рабочий инструмент, который я постоянно использую (статистику применения см. выше в теме). Буду и дальше пользоваться тем, что написал. Абсолютно уверен, что не все спешат перейти на каждую новую версию Delphi или других программ, которые только появляются в природе. Найдутся люди, которым мой код пригодится. Кому не нравится оформление - могут взять идею и сделать своё такое же. Если кому-то не пригодится - что ж, значит не пригодится, на вкус и цвет товарищей нет. Касаемо дженериков. В Дельфи и без дженериков полиморфизм устроен достаточно хорошо благодаря дизайну и RTTI. Например, вот функции, которыми я иногда пользуюсь. Код: pascal 1. 2. 3. 4. 5. 6. Эти функции позволяют однородно обращаться к уже существующим классам, которые стали не родственными из-за ограничений наследования в Дельфи. Например, к классам VCL. Да, это медленное обращение, но это - 0.1% всех обращений к объектам, а в Питоне 100% обращений к объектам делаются так, и всё равно на Питоне пишут полезные программы. Может быть, то же самое можно сделать лучше с дженериками, но и без дженериков тоже можно. Дженериков я наелся, когда пришлось программировать на С++. Я безконечно далёк от того, чтобы ими восхищаться. В С++ они порождают не меньше проблем, чем решают. Возможно, в Дельфи они сделаны менее криво, чем в С++, но этот вопрос для меня не имеет пока даже академического интереса, потому что мне интересен только один вид препроцессора - это defmacro. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 20:45 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden, главное - не забрасывай PHP компилятор. А то, кроме тебя, кто еще их уделаеть сможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 21:16 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenИванов Александр Александрович, > если очень хочется чтобы твой код смотрели, хоть модуль в порядок привел бы. Я занят работой, и данный модуль мне в ней помогает. Меня он устраивает. Деструктор я поменял согласно комменатрию в примере, посмотрим, что будет. А так - я его приведу в порядок, когда перестанет устраивать. Мне умеренно хочется, чтобы Дельфи не умирал, поэтому я опубликовал этот код. Но не настолько, чтобы его менять, ведь я могу его сломать, а модуль ответственный и последствия могут быть серьёзными. "Оно работает? Да - не трогай его". Если хотите, можете в течение недели привести его в то, что Вы считаете порядком и, если мне понравится, я положу на Ваш телефон 500 рублей. Но я буду сильно придираться, учитывая Ваше плохое поведение. Категорически не рекомендуется менять стиль отступов. > Но нет, надо строить из своего решения какую-то невероятно полезную вещь(коей она не является) Полезной она являтся. Статистику использования я приводил. Раньше, каждый раз, когда мне надо было писать finally ... freeAndNil(x) ... end я ненавидел Дельфи, т.к. я знал, что в других языках без этого можно обойтись и знал, что нет никакой уважительной причины для отсутствия выделения объектов на стеке. Для разработчиков языка добавить такую поддержку - это раз плюнуть. Теперь я решил этот вопрос и спокойно работаю. Это польза, а Вы опять гоните и хочется ещё как-нибудь нелестно Вас назвать. Скорее, эта фича не является настолько магической, как могло бы показаться. Ну и что? Полезной она от этого быть не перестаёт. Польза этой фичи только для ленивых. Убрать try finally, который является стандартом, заменив на подсчет ссылок интерфейсов. Это есть использование интерфейсов не по назначению, так сказать сайд-эффект. Не спорю, кому-то покажется полезным, но сам я такое использовать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2012, 09:55 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenВозможно, в Дельфи они сделаны менее криво такой же bloated ужас, а не криво они в принципе не умеют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2012, 09:56 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Еще одно замечание. OnStack - я так понимаю имеется в виду FILO. Неужели важность этой особенности больше, нежели указание, что будет объект автоматически уничтожен. Плюс OnStack может ввести в заблуждение, на счет стека, как части памяти. По-моемому, проще функцию назвать типа как в С# - "В сборщик мусора". Так хоть понятней будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2012, 10:05 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
. Убрать try finally, который может использоваться не только для изничтожения созданных объектов, но и для обеспечения логической целостности.... с другой стороны - костылик для написания простыней? создал объект - добавил - не паришься прописывать его убийство в финализации.... с третьей - добавил его в обжект-лист, и только этот обжект-лист в финализации и сносишь. Со всем содержимым. В общем - не стал бы я в своих проектах в точности такой модуль использовать, но идея - в чем то здравая.... а еще - когда микрообъекты постоянно создаешь - удаляешь - их можно не удалять, а на потом оставлять. в кучке. Не нужен - вернул, нужен - взял. Крохоборская экономия такая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2012, 10:36 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
> OnStack - я так понимаю имеется в виду FILO. Удивительно, конечно, что у народа возникают трудности с элементарными вещами, но FILO, или скорее LIFO - это не просто так,это фундаментальная особенность очень многих явлений жизни. Деньги в кошельке,кошелёк в кармане. Смерть в игле, игла в яйце, яйцо в утке, и т.п. Компонент принадлежит форме, форма принадлежит приложению. Сначала подключись к серверу, потом открой запрос. Порядок уничтожения определяется порядком вложенности. Соответственно, размещение именно на стеке это паттерн, к-рый зачастую делает алгоритм ясным. > Убрать try finally, который является стандартом Не стоит забывать, что Object Pascal вырос просто из Паскаля, к-рый является учебным языком, не самым удачным. То ли у Вирта не хватило ума, то ли сработали какие-то ограничения (по времени,бюджету, числу страниц стандарта). Выучите лисп, бейсик, bash и С++ для расширения кругозора, тогда станет ясно, что почти во всех языках не хватает каких-то важных концепций и их приходится реализовывать с помощью костылей. Лучше всего, конечно же, выучить лисп, потому что в нём больше всего концепций, незнакомых современным программистам и потому что в нём наиболее мощные способы создания костылей. Хотя потихонечку его и разворовывают, например, лямбда-функции, которые в лиспе были ещё в 80-х годах, (если не в 60-х) наконец-то появились и в С#, и в Дельфи, если мне память не изменяет. Я написал данный код, основываясь на практике работы в лиспе и используя концепции лиспа. Например, bindingVariable - это эмуляция понятия special variable лиспа, до которой дизайнеры "современных" языков, может быть, ещё не додумались, хотя она очень естественна. Короче говоря, для Вас стандарт - это, может быть, что-то святое, а я отношусь к нему лишь как к инструменту. Слава Богу, я веду свой проект сам и могу позволить себе роскошь устанавливать свои правила кодирования. > По-моемому, проще функцию назвать типа как в С# - "В сборщик мусора". Это разные понятия. При сборке мусора момент уничтожения объекта неизвестен. Для типонебезопасных языков, в к-рых легко испортить память и к к-рым относится и Delphi, это слишком опасно. Размещение "на стеке" наиболее безопасно, т.к. момент уничтожения объекта точно определён. Более мощными и более опасными методами (подсчёт ссылок и сборка мусора в собственном смысле слова) в таких языках нужно пользоваться только тогда, когда они действительно необходимы. Ближайший аналог того, что я написал - это именно размещение на стеке, отсюда и название. > но и для обеспечения логической целостности Уничтожение объектов тоже может служить логической целостности, на этом основано finallydoo и объекты-стражи (guard). Всё это у меня реализовано, не считая того, что экспешен в "финализаторе" в текущей версии сломает механизм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 03:00 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Да "размещение на стеке" не имеет отношения к сборке мусора. Такого общепринятого понятия вообще нет. Еще раз, для медленно вникающих: стек отношения к уничтожению объектов не имеет. Любой вменяемый программист, когда говорит о стеке, он думает о "последнем пришел, первым у ушел", а не об уничтожении объектов. Неужели это не очевидно? Стандарт - это не святое. Это то ,что выработано практикой и дает понимание, написанного одним программистом, другому программисту. Подход, яля "пишу вне стандартов", или "свой код смотрю только я" - подход истинного говнокодера. Короче, подход понятен. Сэмулировал что-то встроенное из другого языка возможностями текущего и рад. Только во-первых, это всегда неэффективно, во-вторых заставляет на одном языке думать в терминах другого языка. Много программистов дельфи, которые программируют еще и на лиспе? "Лучше всего, конечно же, выучить лисп, потому что в нём больше всего концепций, незнакомых современным программистам и потому что в нём наиболее мощные способы создания костылей" - спасибо поржал. Короче , давай, до свиданья! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 09:57 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
стек отношения к уничтожению объектов не имеет. я это понял как метафору того, что "локальные переменные ф-ции" "обычно в компилируемых языках живут на стеке цп". мдя.... если ограничивать "время жизни" пределами ф-ции - да, все хорошо. Если как в плюсах например иметь локальные переменные внутри блоков..... то опять - try - finally ? или это не нужно - внутри блока? например ограничивать время жизни объекта одной итерацией цикла? ну наверное - костыли гибкие, и можно создать еще 1 - локальный хранитель.... и его принудительно.... но прозрачность - теряется, контуры - размываются. Если хочется как в лиспе, то и писать надо - на лиспе, где все как в лиспе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 10:24 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenСлава Богу, я веду свой проект сам и могу позволить себе роскошь устанавливать свои правила кодирования.Дай Бог, чтобы так оно оставалось до самой смерти проекта. Чтобы не пришлось этот проект поддерживать кому-нибудь другому buddenБолее мощными и более опасными методами (подсчёт ссылок и сборка мусора в собственном смысле слова) в таких языках нужно пользоваться только тогда, когда они действительно необходимы.О как. Т.е. Вы типом string не пользуетесь? Опасно же. А вдруг, что-то произойдет? buddenне считая того, что экспешен в "финализаторе" в текущей версии сломает механизм.Первое же многопоточное приложение даже воспоминаний от Вашей системы не оставит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 12:45 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenЯ данную проблему для себя давно решил без дженериков, т.е. мотива переходить на что-то у меня нет. Мой код - это не "изыскания", как Вы изволили выразится, а рабочий инструмент, который я постоянно использую (статистику применения см. выше в теме). Буду и дальше пользоваться тем, что написал.Вы же вроде бы пришли в эту тему, чтобы узнать, а не появилось ли более удачное решение по автоматическому освобождению памяти. Появилось. Но на основе более новой версии Делфи, на которую вы переходить не хотите. buddenВ Дельфи и без дженериков полиморфизм устроен достаточно хорошо благодаря дизайну и RTTI.В D2010 RTTI значительно улучшили. buddenДженериков я наелся, когда пришлось программировать на С++.Извините, в C++ нет дженериков, там шаблоны. Это таки большая разница. P.S. То, что у вас реализовано, - это не сборка мусора. Для полноценной сборки мусора нужен отдельный объект - сборщик мусора, для эффективности он должен быть интегрирован с менеджером памяти, он же должен решать, когда освобождать память (обычно это делается нечасто, но помногу, и вовсе не во время выхода каждый переменной из области видимости). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 14:09 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakovесли ограничивать "время жизни" пределами ф-ции - да, все хорошо. Если как в плюсах например иметь локальные переменные внутри блоков..... то опять - try - finally ? Да, есть такая неприятность. Два варианта: 1. try-finally и вторая переменная fr2, к-рая на finally явно присваивается unassigned. 2. локальная процедура и в ней локальная переменная fr. например ограничивать время жизни объекта одной итерацией цикла? Если количество итераций не слишком велико и деструкто объекта просто освобождает память, я не парюсь и размещаю объекты для всех итераций "на стеке",примерно так: Код: pascal 1. 2. 3. 4. 5. В итоге будет размещено N объектов и все они будут уничтожены при закрытии fr. Если же объект является хранителем чего-то и его деструктор нужен не только для освобождения памяти, но и является частью логики приложения, то остаётся try-finally или оформить тело цикла в виде процедуры. _Vasilisk_...многопоточное приложение...Не помню, чтобы я это тестировал, но, по замыслу, должно работать. Переменная, содержащая текущий кадр стека - threadvar, не вижу других граблей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 14:33 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
EsperitoP.S. То, что у вас реализовано, - это не сборка мусора. Я разве это утверждал? Перед тем, как я начал тему, мне показалось, что мне нужна для одного дела сборка мусора, но я уже давно без неё обошёлся и даже забыл повод. А всё обсуждение stackutil - это офтоп, вообще-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 14:37 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenЯ разве это утверждал?Я просто уточнил, на всякий случай. Так что, тема исчерпана? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 14:42 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Esperito, ну вообще, вопрос, который я поставил в своём первом комменте, по-моему, так и остался без ответа. Касаемо моего кода, stackutil, видимо, нужно сделать более развёрнутый набор примеров, тестовые проекты, протестировать потокобезопасность, но у меня нет времени этим заниматься и не скоро появится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 16:36 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
интересно, а вроде вот это никто не приводил ещё: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1292 я, правда, пока не понял, как работает. Блин, сколько ж времени ушло зря... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 17:25 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
В общем-то, применив code splicing к функциям из модуля system, можно сделать так, чтобы декларирование переменной определённого типа приводило к вызову нужного кода в момент входа и выхода из функции. Т.е., сделать так, чтобы было достаточно писать Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Накладные расходы были бы относительно малы - ещё одно ветвление в коде инициализации и деинициализации переменной (их там уже и так штук 5). При этом стали бы не нужны интерфейсы для реализации "размещения на стеке". Но, по правде говоря, писать один раз "fr:=mkStackFr;" меня не настолько обременяет, чтобы возиться с этим и порождать проблемы при переходе к другим версиям Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 20:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038816]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 489ms |

| 0 / 0 |
