Re[10]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: landerhigh Пират  
Дата: 06.08.08 11:43
Оценка: +1
Здравствуйте, drol, Вы писали:

L>>
L>>void func()
L>>{
L>>     dosomethingwith(class_with_possible_ressource());
L>>}
L>>


D>Неэквивалентно, бо terminate() после исключений из деструкторов, тогда как в C# никаких проблем.


Исключения из деструкторов бывают только в случае кривого драйвера ruki.sys, придумай более жизненный аргумент, плиз.
Re[14]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: infusion  
Дата: 06.08.08 11:53
Оценка: +1 -3 :)
F>Например то, что байт-код перед исполнением компилируется в машинные коды, в отличии от интерпретируемых языков.

здрасть и вы туда же, все не можете смириться что результат вашей работы
суррогат?,
НА ВЫХОДЕ НЕТ ИСПОЛНЯЕМОГО ФАЙЛА,
ТЫ МОЖЕШЬ СКОЛЬКО УГОДНО ГОВОРИТЬ ... ПРО МАШИННЫЕ КОДЫ.

короче вы для меня лично теперь тоже входите в кагорту тех самых
которые так и не уловили смысл сказанного...
... что же там их явка делает на самом то деле ? ась

http://en.wikipedia.org/wiki/Java_(programming_language)
This is achieved by most Java compilers by compiling the Java language code halfway (to Java bytecode) – simplified machine instructions specific to the Java platform. The code is then run on a virtual machine (VM), a program written in native code on the host hardware that interprets and executes generic Java bytecode. (In some JVM versions, bytecode can also be compiled to native code, either before or during program execution, resulting in faster execution.)


Сообщение отредактировано модератором. ДХ
Re[15]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: WFrag США  
Дата: 06.08.08 11:58
Оценка:
Здравствуйте, infusion, Вы писали:

I>здрасть и вы туда же, все не можете смириться что результат вашей работы

I>суррогат?,
I>ДЛЯ ОСОБО "ОДАРЕННЫХ", НА ВЫХОДЕ НЕТ ИСПОЛНЯЕМОГО ФАЙЛА,
I>ТЫ МОЖЕШЬ СКОЛЬКО УГОДНО ГОВОРИТЬ ЧУШЬ ПРО МАШИННЫЕ КОДЫ.

Тебе выхлоп JIT в виде нативного кода показать? Самый настоящий нативный код, который выплёвывает JIT при запуске Java программы.

I>короче вы для меня лично теперь тоже входите в кагорту тех самых

I>которые так и не уловили смысл сказанного, и пытаются дро#ить на
I>тему, что же там их явка делает на самом то деле ? ась

I>http://en.wikipedia.org/wiki/Java_(programming_language)

I>

I>This is achieved by most Java compilers by compiling the Java language code halfway (to Java bytecode) – simplified machine instructions specific to the Java platform. The code is then run on a virtual machine (VM), a program written in native code on the host hardware that interprets and executes generic Java bytecode. (In some JVM versions, bytecode can also be compiled to native code, either before or during program execution, resulting in faster execution.)


Ну. А в скобках парой слов позже прочитать не судьба? Чтоб ты знал, в Sun-овская Java по умолчанию работае в mixed-режиме, когда байткод исполняеться N-раз, а после этого транслируется в нативный код и последующие разы уже выполняется нативный код.
Re[14]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: infusion  
Дата: 06.08.08 11:58
Оценка:
Здравствуйте, fmiracle, Вы писали:
F>Ух ты, какой замечательный ребенок. Еще ничего не знает, но энергия самомнение просто бьют через край.
F>Ознакомься с материалом, узнаешь много чего интересного.

F>Например то, что байт-код перед исполнением компилируется в машинные коды, в отличии от интерпретируемых языков.


надо бы выделить для тебя особенно
(In some JVM versions, bytecode can also be compiled to native code, either before or during program execution, resulting in faster execution.)

но подзреваю ты все равно ничего не понял
Re[15]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: Mamut Швеция http://dmitriid.com
Дата: 06.08.08 12:19
Оценка:
I>здрасть и вы туда же, все не можете смириться что результат вашей работы
I>суррогат?,
I>ДЛЯ ОСОБО "ОДАРЕННЫХ", НА ВЫХОДЕ НЕТ ИСПОЛНЯЕМОГО ФАЙЛА,

.so — это исполняемый файл?
список компиляторов, компилирующих Яву в нативный код


dmitriid.comGitHubLinkedIn
Re[16]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: infusion  
Дата: 06.08.08 12:39
Оценка:
Здравствуйте, Mamut, Вы писали:
M>.so — это исполняемый файл?
Представляешь.
это не означает что можно сделать
exec lib.so.

Но начинка в нем вполне себе исполняемая.
Re[15]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.08.08 12:40
Оценка:
Здравствуйте, infusion, Вы писали:


I>здрасть и вы туда же, все не можете смириться что результат вашей работы

I>суррогат?,
I>ДЛЯ ОСОБО "ОДАРЕННЫХ", НА ВЫХОДЕ НЕТ ИСПОЛНЯЕМОГО ФАЙЛА,
I>ТЫ МОЖЕШЬ СКОЛЬКО УГОДНО ГОВОРИТЬ ЧУШЬ ПРО МАШИННЫЕ КОДЫ.

.NET может генерировать .exe файлы, которые вполне исполняемые.
Re[17]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: Mamut Швеция http://dmitriid.com
Дата: 06.08.08 12:41
Оценка:
M>>.so — это исполняемый файл?
I>Представляешь.
I>это не означает что можно сделать
I>exec lib.so.

I>Но начинка в нем вполне себе исполняемая.


Это я знаю только, думаю, codelord не об этом говорил. В принципе, с этой целью и был задан вопрос


dmitriid.comGitHubLinkedIn
Re[9]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: Vamp Россия  
Дата: 06.08.08 13:10
Оценка:
MyClass::MyClass():
myMember(this)
{}

L>На которые компилятор кричит-кричит, аж надрывается, бедный.

А что тут такого? Совершенно нормальный код. Ты ведь, я надеюсь, в конструкторе myMember методы myClass не дергаешь? А сохранить указатель на обертывающую структуру — вполне нормально для определенного круга задач.
Да здравствует мыло душистое и веревка пушистая.
Re[15]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: fmiracle  
Дата: 06.08.08 13:35
Оценка: +4 -1
Здравствуйте, infusion, Вы писали:

I>здрасть и вы туда же, все не можете смириться что результат вашей работы

I>суррогат?,
I>ДЛЯ ОСОБО "ОДАРЕННЫХ", НА ВЫХОДЕ НЕТ ИСПОЛНЯЕМОГО ФАЙЛА,
I>ТЫ МОЖЕШЬ СКОЛЬКО УГОДНО ГОВОРИТЬ ЧУШЬ ПРО МАШИННЫЕ КОДЫ.

Что-то я не понял — это codelord размножился или в школе клонированных детей сегодня интернет подключили?
Само по себе наличие "исполняемого файла" именно на постоянном носителе может заинтересовать разве что фетишистов.
Обычно интересует работа программы, а не то, как и когда строится исполняемый файл.

Опять же — то что JVM может интерпретировать код, не значит, что она не может его компилировать. Промышленные JVM умеют компилировать код.
Re[13]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: SE Украина  
Дата: 06.08.08 15:45
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

N>>.NET не использует подсчет ссылок. Он строит граф достижимых объектов, остальные автоматически умирают при дефрагментации.


PM>Ну и что это не подсчет ссылок, если ссылок 1 (одна) то объект оставить — если 0, то finalize. Формально, очень даже подсчет ссылок.


На счет простого подсчета ссылок. Если два объекта ссылается друг на друга, то сколько тут ссылок? Правильно, две. А если три объекта ссылаются друг на друга по кругу? Правильно, три.
Но дотнет такие ситуации разруливает очень даже просто. Именно с помошью построения графа достижимых объектов.
Re[11]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: drol  
Дата: 06.08.08 18:13
Оценка:
Здравствуйте, landerhigh, Вы писали:

D>>Неэквивалентно, бо terminate() после исключений из деструкторов, тогда как в C# никаких проблем.


L>Исключения из деструкторов бывают только в случае кривого драйвера ruki.sys,


Про то и речь. А вот Dispose() в C# может их кидать без каких-либо проблем. И поэтому Ваш C++ код не является эквивалентом моего на C#. Ваш код гораздо "глупее".

Если до сих пор не догоняете, то читайте http://www.rsdn.ru/forum/message/3047254.aspx
Автор: drol
Дата: 04.08.08
, http://www.rsdn.ru/forum/message/3047345.aspx
Автор: drol
Дата: 04.08.08
, http://www.rsdn.ru/forum/message/3048703.aspx
Автор: drol
Дата: 05.08.08

и их окрестности.

*Я уже устал n раз одно и то же объяснять...
Re[12]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: Cyberax Марс  
Дата: 06.08.08 18:21
Оценка:
Здравствуйте, drol, Вы писали:

L>>Исключения из деструкторов бывают только в случае кривого драйвера ruki.sys,

D>Про то и речь. А вот Dispose() в C# может их кидать без каких-либо проблем. И поэтому Ваш C++ код не является эквивалентом моего на C#. Ваш код гораздо "глупее".
Ну кинешь ты исключение из финализатора. И что дальше-то? Какой в этом смысл?
Sapienti sat!
Re[13]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: SE Украина  
Дата: 06.08.08 18:36
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


L>>>Исключения из деструкторов бывают только в случае кривого драйвера ruki.sys,

D>>Про то и речь. А вот Dispose() в C# может их кидать без каких-либо проблем. И поэтому Ваш C++ код не является эквивалентом моего на C#. Ваш код гораздо "глупее".
C>Ну кинешь ты исключение из финализатора. И что дальше-то? Какой в этом смысл?

Не подменяйте понятия.
Dispose() и Finalize() очень даже разные методы. В общем случае они даже выполняются в разных потоках: Dispose в том потоке, где собственно ресурсы захватывались, а Finalize в потоке GC.
В кидании исключения из финализатора действительно смысла не много. А вот в кидании исключения из Dispose очень даже смысл есть.
Re[13]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: drol  
Дата: 06.08.08 18:36
Оценка:
Здравствуйте, Cyberax, Вы писали:

L>>>Исключения из деструкторов бывают только в случае кривого драйвера ruki.sys,

D>>Про то и речь. А вот Dispose() в C# может их кидать без каких-либо проблем. И поэтому Ваш C++ код не является эквивалентом моего на C#. Ваш код гораздо "глупее".
C>Ну кинешь ты исключение из финализатора.

Причём здесь finalizer-то ??? Dispose() это обычный метод, и вызывается в обычном контексте исполнения.

C>И что дальше-то? Какой в этом смысл?


См. http://www.rsdn.ru/forum/message/3047423.aspx
Автор: drol
Дата: 05.08.08
Re[14]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: Cyberax Марс  
Дата: 06.08.08 21:03
Оценка:
Здравствуйте, drol, Вы писали:

C>>Ну кинешь ты исключение из финализатора.

D>Причём здесь finalizer-то ??? Dispose() это обычный метод, и вызывается в обычном контексте исполнения.
Ну ладно. Кинешь исключение из Dispose(). Какой в этом смысл?

C>>И что дальше-то? Какой в этом смысл?

D>См. http://www.rsdn.ru/forum/message/3047423.aspx
Автор: drol
Дата: 05.08.08

И? Что мне мешает сделать то же самое из деструктора С++?

Просто единственное ограничение — это не выбрасывать другое исключение за пределы дестркуктора.
Sapienti sat!
Re[15]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: SE Украина  
Дата: 06.08.08 21:34
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


C>>>Ну кинешь ты исключение из финализатора.

D>>Причём здесь finalizer-то ??? Dispose() это обычный метод, и вызывается в обычном контексте исполнения.
C>Ну ладно. Кинешь исключение из Dispose(). Какой в этом смысл?

Да такой же как в выбрасывании любого другого исключения с любом другом месте. Сообщить вызывающему коду об исключительной ситуации.

C>И? Что мне мешает сделать то же самое из деструктора С++?

C>Просто единственное ограничение — это не выбрасывать другое исключение за пределы дестркуктора.

Т.е. внятно сообщить вызывающему коду о невозможности/ощибке освобождения ресурса не получится? Или я неверно понял?
Re[10]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: landerhigh Пират  
Дата: 07.08.08 00:07
Оценка:
Здравствуйте, Vamp, Вы писали:

L>>На которые компилятор кричит-кричит, аж надрывается, бедный.

V>А что тут такого? Совершенно нормальный код. Ты ведь, я надеюсь, в конструкторе myMember методы myClass не дергаешь? А сохранить указатель на обертывающую структуру — вполне нормально для определенного круга задач.
В том-то и дело, что ничего такого нет. Только компилятор норовит ворнинг кинуть. Что усугубляется, когда warnings are threated as errors
Re[11]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.08.08 01:07
Оценка:
Здравствуйте, shrecher, Вы писали:

S>В итоге, операции со счетчиком ссылок занимают пару ассемблерных инструкций.


Эта пара инструкций на SMP-системе займет целую вечность из-за необходимости синхронизации кешей процессоров.
Re[7]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: Пацак Россия  
Дата: 07.08.08 05:19
Оценка: 1 (1) +1 -1
Здравствуйте, Аноним, Вы писали:

А>c++

А>
А>{
А>  r1.open();
А>  r2.open();
А>  r3.open();
А>  //делаем то, что хотим!!!
А>  ............
А>  //метод close автоматически вызовется в деструкторах
А>}
А>


А>В с++ в случаях удовлетворяющих идиоме RAII можно использовать деструкторы, в более сложных случах обработчики завершения, блоки try catch


Вообще-то, насколько я понимаю, приведенный выше код RAII как раз не соответствует, т.к. вызов open() происходит явно, а не в конструкторе. А значит (сюрпрайз!) если, например, r2.open() вызван не был, а исключение вылетело где-то на этапе r1.open(), то при выходе из блока в деструкторе r2 все равно будет произведена попытка освобождение никогда не занимавшегося им ресурса. Такая вот "красота" и "читабельность".

Но сейчас даже немного не об этом, а вот о чем: уверен ли ты, что в случае, если r1, r2, r3 станут указателями на кучу этот код будет выглядеть так же красиво, как в случае автоматических переменных? В частности ведь в точке "делаем то, что хотим" они могут, например, тупо передаваться ожидающему какого-то события объекту с более широкой областью видимости, которых должен с ними сделать что-то полезное уже сильно опосля того, как завершится данная функция. И как в этом случае будет выглядеть вся эта автоматика с деструкторами?
Ку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.