Re[18]: Почему Delphi всё еще жив?!
От: Head Ache  
Дата: 22.10.10 01:31
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Здравствуйте, Head Ache, Вы писали:


HA>>К gc, не скрою, всегда относился с недоверием и вам не рекомендую считать его серебряной пулей.

HA>>Например, подсчет ссылок: как определить, что объект не нужен.
HA>>В общем случае, это эквивалентно задаче поиска циклов в ориентированном графе
HA>>и корректное решение имеет сложность далеко не O(N).
HA>>Тем не менее, полиномиального роста времени работы gc не наблюдается,
HA>>так что можно смело утверждать, что где-то есть "затычка", которая работает "почти правильно".

K>Если бы вы утрудили себя почитать, как устроен и работает GC в управляемых средах вообще и в .NET в частности, то такие групости писать бы перестали...


Где-то есть доказательство корректности алгоритма?
Этот аккаунт покинут.
Re[19]: Почему Delphi всё еще жив?!
От: Head Ache  
Дата: 22.10.10 03:30
Оценка:
Здесь я имею в виду, что в специальной литературе, вероятно, есть работы на эту тему.
То есть от мс было бы достаточно заявить, что именно реализовано и дать ссылки на первоисточники.
Имхо, это лучше, чем какие-то объяснения "на пальцах".
Этот аккаунт покинут.
Re[20]: Почему Delphi всё еще жив?!
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.10.10 06:13
Оценка:
Здравствуйте, Head Ache, Вы писали:


HA>Здесь я имею в виду, что в специальной литературе, вероятно, есть работы на эту тему.

HA>То есть от мс было бы достаточно заявить, что именно реализовано и дать ссылки на первоисточники.

Алгоритм называется mark-and-sweep garbage collection и применяется большинством GC, которые существуют. Никто это не скрывал.
Остальное — тюнинх алгоритма для получения максимальной производительности.

HA>Имхо, это лучше, чем какие-то объяснения "на пальцах".

Вот в псевдокоде: http://lambda.uta.edu/cse5317/notes/node47.html
Идея очень простая, эффективная реализация — далеко не простая. Там уже нужно знать детали, которые проще всего "на пальцах".
Можешь тут почтитать http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx
Re[17]: Почему Delphi всё еще жив?!
От: MxMsk Португалия  
Дата: 22.10.10 07:17
Оценка:
Здравствуйте, Head Ache, Вы писали:

HA>Здравствуйте, MxMsk, Вы писали:


MM>>Ну, хорошо. Ввели мы "нормальные" конструктор и деструктор. Что дальше? Каков usecase? Чем это лучше наличия конструктора и метода Dispose?


HA>Пример1. Была проблема, описанная в http://support.microsoft.com/default.aspx?scid=KB;EN-US;q326219

HA>Переводя на русский, при выходе из unmaged кода я должен гарантировать нужное состояние FPU.
HA>То есть controlfp() должна быть ровно последней инструкцией, выполненной внутри длл.
HA>Как видите, строгая гарантия обеспечена (и никакого отношения к управлению памятью эта проблема не имеет).
Так причем здесь "нормальные" конструктор и деструктор? Что в них "нормального"? Дело в вызове деструктора при выходе за пределы области видимости? Ну, а что делать, если ты этот объект куда-нибудь передашь?

HA>Пример2(классика). Критические секции, когда после Enter() следует гарантировать выполнение Leave()

HA>Для C# это настолько сложная проблема, что даже понадобилось вводить новое ключевое слово lock (SyncLock в VB) !
HA>(так же как и using для IDisposable)
Какие-то у тебя проблемы надуманные. Это все такие мелочи: написать lock или try/finally.

HA>............

MM>>Если честно, то это ужасно. Ты превращаешь язык с GC в язык без GC. Лично мне хватает using.
HA>По коду ужасов нет, все довольно коротко и тривиально.
HA>К gc, не скрою, всегда относился с недоверием и вам не рекомендую считать его серебряной пулей.
Не считаю. Но раз уж работаем в среде с GC, то лучше уважать его и понимать, как жить в его мире, чем пытаться перестроить. Уж если много недоверия, не лучше ли взять unmanaged?
Re[21]: Почему Delphi всё еще жив?!
От: Head Ache  
Дата: 22.10.10 07:31
Оценка:
Здравствуйте, gandjustas, Вы писали:

HA>>Имхо, это лучше, чем какие-то объяснения "на пальцах".

G>Вот в псевдокоде: http://lambda.uta.edu/cse5317/notes/node47.html
G>Идея очень простая, эффективная реализация — далеко не простая. Там уже нужно знать детали, которые проще всего "на пальцах".
G>Можешь тут почтитать http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx

в ссылках как раз уровень "объяснения на пальцах"

Попробуем разобраться...

The depth-first-search is done using the function

DFS ( p ) =
{ if *p record is unmarked
then mark *p
for each pointer p->fi of the record *p do DFS(p->fi) // это вроде рекурсия?
}

which is called from every root:

for each p in roots
DFS(p) // это вроде O(N)?

gc работал бы часами по такому алгоритму
Этот аккаунт покинут.
Re[22]: Почему Delphi всё еще жив?!
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.10.10 08:23
Оценка:
Здравствуйте, Head Ache, Вы писали:

HA>Здравствуйте, gandjustas, Вы писали:


HA>>>Имхо, это лучше, чем какие-то объяснения "на пальцах".

G>>Вот в псевдокоде: http://lambda.uta.edu/cse5317/notes/node47.html
G>>Идея очень простая, эффективная реализация — далеко не простая. Там уже нужно знать детали, которые проще всего "на пальцах".
G>>Можешь тут почтитать http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx

HA>в ссылках как раз уровень "объяснения на пальцах"


HA>Попробуем разобраться...


HA>The depth-first-search is done using the function



HA>DFS ( p ) =
HA>{ if *p record is unmarked
HA>     then mark *p
HA>  for each pointer p->fi of the record *p do DFS(p->fi)  // это вроде рекурсия?
HA>}

Рекурсия, пока в объекте есть ссылки на другие объекты.

HA>which is called from every root:



HA>for each p in roots
HA>   DFS(p)  // это вроде O(N)?

конечно O(N)

HA>gc работал бы часами по такому алгоритму

С чего ты взял? А то что стандартные аллокаторы тоже O(N) причем на каждое выделение памяти, они же не часами работают.
Да и причем тут время работы, тебе нужна была корректность. Скорость, как я сказал, достигается конкретными оптимизациями.
например разделение на поколения, конкурентная сборка мусора итп.
Re[55]: Почему Delphi всё еще жив?!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.10.10 10:10
Оценка:
Здравствуйте, vladimir.vladimirovich, Вы писали:

I>>Смайлик это значит я смеялся когда был в процессе написания сообщения.


VV>Правда? А ты когда смайлик пишешь, голову не наклоняешь?


Нет, а ты наклоняешь когда читаешь ?
Re[22]: Почему Delphi всё еще жив?!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.10.10 10:14
Оценка:
Здравствуйте, Head Ache, Вы писали:

HA>for each p in roots

HA> DFS(p) // это вроде O(N)?

HA>gc работал бы часами по такому алгоритму


Если O(N) так сразу часами ? Когда нужно N элементов освободить, представь, это тоже O(N) и никаких часов не требуется.

Re[5]: Почему Delphi всё еще жив?!
От: slava_phirsov Россия  
Дата: 22.10.10 11:58
Оценка:
Здравствуйте, hattab, Вы писали:

H>Хорошо хоть, что огромная часть мудачья убежала на шарпы с формулировкой "дельфи мертв"


Года полтора назад был на собеседовании в одной конторке... Ребята писали (в 2009-м!!!) на D7 (хорошо хоть, не на D5), изобретали библиотеку компонентов GUI Ну, типа, свой свечной заводик... (цитата) "с поддержкой юникода" (и при этом не могли толком объяснить, что же именно они там поддерживают: UTF8? UCS2? Whatever?) А еще в этом GUI была — я не шучу — утиная типизация, основанная на интерфейсах. То есть перед использованием нужно под try/except попытаться привести экземпляр TComponent к ожидаемому интерфейсному типу, и, если получилось — работать с ним, а нет — ну, типа, не судьба. Так что, как у классика

Пессимист(мрачно): Всё. Хуже уже не будет.
Оптимист(радостно): Да будет еще! Будет!!!

Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re[6]: Почему Delphi всё еще жив?!
От: hattab  
Дата: 22.10.10 12:23
Оценка: +1 :)
Здравствуйте, slava_phirsov, Вы писали:

s> H>Хорошо хоть, что огромная часть мудачья убежала на шарпы с формулировкой "дельфи мертв"


s> Года полтора назад был на собеседовании в одной конторке... Ребята писали (в 2009-м!!!) на D7 (хорошо хоть, не на D5), изобретали библиотеку компонентов GUI Ну, типа, свой свечной заводик... (цитата) "с поддержкой юникода" (и при этом не могли толком объяснить, что же именно они там поддерживают: UTF8? UCS2? Whatever?) А еще в этом GUI была — я не шучу — утиная типизация, основанная на интерфейсах. То есть перед использованием нужно под try/except попытаться привести экземпляр TComponent к ожидаемому интерфейсному типу, и, если получилось — работать с ним, а нет — ну, типа, не судьба. Так что, как у классика


s>

s> Пессимист(мрачно): Всё. Хуже уже не будет.
s> Оптимист(радостно): Да будет еще! Будет!!!


Убежали не все мудаки, это очевидно
avalon 1.0rc3 rev 363, zlib 1.2.3
Re[16]: Почему Delphi всё еще жив?!
От: Ночной Смотрящий Россия  
Дата: 22.10.10 12:36
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Я тоже это помню — в 1.0 реально было так, уже в 1.1 это переделали на мультикаст во всех случаях.


Плохо ты помнишь, не было такого в релизных версиях.
Re[44]: Почему Delphi всё еще жив?!
От: vladimir.vladimirovich США  
Дата: 22.10.10 14:20
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

I>"... стоять раком" — привычно отозвалось эхо


Какой интересный случай. А твой доктор об этом знает?
Re[56]: Почему Delphi всё еще жив?!
От: vladimir.vladimirovich США  
Дата: 22.10.10 14:21
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Нет, а ты наклоняешь когда читаешь ?


Откуда у тебя взялась такая мысль? Тебе доктор ничего не выписывал?
Re[23]: Почему Delphi всё еще жив?!
От: CreatorCray  
Дата: 22.10.10 20:52
Оценка:
Здравствуйте, gandjustas, Вы писали:

HA>>gc работал бы часами по такому алгоритму

G>С чего ты взял? А то что стандартные аллокаторы тоже O(N) причем на каждое выделение памяти, они же не часами работают.
Как же ты утомил!
Хоть раз ты изволишь объяснить что ж это за "стандартные" аллокаторы такие?
Да ещё и O(N).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Почему Delphi всё еще жив?!
От: CreatorCray  
Дата: 22.10.10 20:52
Оценка:
Здравствуйте, slava_phirsov, Вы писали:

_>(цитата) "с поддержкой юникода" (и при этом не могли толком объяснить, что же именно они там поддерживают: UTF8? UCS2? Whatever?)

Ну может они оччччень сильно напряглись и реализовали ваще весь Unicode стандарт, с блекждеком и всем что к нему полагается
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[44]: Почему Delphi всё еще жив?!
От: CreatorCray  
Дата: 22.10.10 20:52
Оценка:
Здравствуйте, Ikemefula, Вы писали:

VV>>А у тебя какой пол?

I>"... стоять раком" — привычно отозвалось эхо
Шикарно!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[45]: Почему Delphi всё еще жив?!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.10.10 21:02
Оценка:
Здравствуйте, CreatorCray, Вы писали:

VV>>>А у тебя какой пол?

I>>"... стоять раком" — привычно отозвалось эхо
CC>Шикарно!

Ничего шикарного. Один и тот же человек пользуется яблоками и считает что это "стоять раком".
Re[45]: Почему Delphi всё еще жив?!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.10.10 21:40
Оценка:
Здравствуйте, vladimir.vladimirovich, Вы писали:

I>>"... стоять раком" — привычно отозвалось эхо


VV>Какой интересный случай. А твой доктор об этом знает?


Да, случай интересный, ты представляешь меня секретаршей, рассказываешь про юзеров с одной сиской и одним яйцом, спрашиваешь у меня про пол...
Re[18]: Почему Delphi всё еще жив?!
От: Head Ache  
Дата: 23.10.10 08:01
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Здравствуйте, Head Ache, Вы писали:


HA>>Здравствуйте, MxMsk, Вы писали:


MM>>>Ну, хорошо. Ввели мы "нормальные" конструктор и деструктор. Что дальше? Каков usecase? Чем это лучше наличия конструктора и метода Dispose?


HA>>Пример1. Была проблема, описанная в http://support.microsoft.com/default.aspx?scid=KB;EN-US;q326219

HA>>Переводя на русский, при выходе из unmaged кода я должен гарантировать нужное состояние FPU.
HA>>То есть controlfp() должна быть ровно последней инструкцией, выполненной внутри длл.
HA>>Как видите, строгая гарантия обеспечена (и никакого отношения к управлению памятью эта проблема не имеет).
MM>Так причем здесь "нормальные" конструктор и деструктор? Что в них "нормального"? Дело в вызове деструктора при выходе за пределы области видимости? Ну, а что делать, если ты этот объект куда-нибудь передашь?

Зачем спрашиваешь, наверно и так ответ заранее знаешь
Если ссылка будет жить дольше объекта — будет плохо и никто такой код не пишет.
Если надо контролировать время жизни — использовать интеллектуальные указатели.
Обратите внимание, подход "не плати за то, чем не пользуешься": четко обозначить проблему и решать именно ее.
То есть если не нужны именно интеллектуальные указатели, они и не будут применяться.
Также есть варианты со статической памятью, глубоким копированием, специализированные аллокаторы.
Никто не мешает и сборщик мусора применять, только почему-то непопулярен этот подход.
Ни с gc, ни с каким-либо другим.

HA>>Пример2(классика). Критические секции, когда после Enter() следует гарантировать выполнение Leave()

HA>>Для C# это настолько сложная проблема, что даже понадобилось вводить новое ключевое слово lock (SyncLock в VB) !
HA>>(так же как и using для IDisposable)
MM>Какие-то у тебя проблемы надуманные. Это все такие мелочи: написать lock или try/finally.
Не мелочи, когда надо обеспечивать строгие гарантии самому.
try/finally в этом плане хуже, т.к. заставляет хоть как-то выставлять наружу внутреннюю реализацию.
Собственно, поэтому в cpp применение try/finally нежелательно.

HA>>............

MM>>>Если честно, то это ужасно. Ты превращаешь язык с GC в язык без GC. Лично мне хватает using.
HA>>По коду ужасов нет, все довольно коротко и тривиально.
HA>>К gc, не скрою, всегда относился с недоверием и вам не рекомендую считать его серебряной пулей.
MM>Не считаю. Но раз уж работаем в среде с GC, то лучше уважать его и понимать, как жить в его мире, чем пытаться перестроить. Уж если много недоверия, не лучше ли взять unmanaged?
Предпочитаю. Но не всегда есть возможность выбирать.
Этот аккаунт покинут.
Re[23]: Почему Delphi всё еще жив?!
От: Head Ache  
Дата: 23.10.10 08:08
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>Рекурсия, пока в объекте есть ссылки на другие объекты.


Боюсь, что в сложных вариантах с циклами, (т.е. когда собственно и нужен полный dfs),
число итераций может расти с факториальной скоростью.
Этот аккаунт покинут.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.