Re[15]: оффтоп
От: Cyberax Марс  
Дата: 06.08.08 01:31
Оценка:
Здравствуйте, frogkiller, Вы писали:

C>>>Соберите объектник слинкуйте и запустите хоть где нибудь без Java интерпретатора в кучу мегов

C>>Excelsior JET. Минимальное приложение (в виде автономного exe-шника) на Java — около 500Кб. Минимальное приложение с GUI (SWT) — около мегабайта.
F>И это, по-твоему, маленький размер? А, ну да, в 640к помещается
Если учесть, что туда ещё упакован GC и достаточно много утиллитных классов — то совсем неплохо.

С Java/.NET проблема как раз в том, что для минимального приложения получается очень большой оверхед. На больших приложениях этот оверхед не заметен.

F>Печально, это на самом деле.

Не, нормально.
Sapienti sat!
Re[8]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: landerhigh Пират  
Дата: 06.08.08 01:54
Оценка: +2
Здравствуйте, drol, Вы писали:

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


L>>Безотносительно языка программирования, нужно писать юнит-тесты.


D>Относительно-относительно. Писать unit-тесты для C++ — тот ещё экстрим. Reflection'а нет, невозможен нормальный mock'инг, всё копи-пастом, да жуткими макросами всякими, с нулевым maintainability в результате.

(Смотрит в код). Слушайте, ну это просто праздник какой-то! В моем личном списке оправданий отстутсвия юнит-тестов конкретно это займет первое место надолго. Оказывается, отсутствие рефлектора мешает писать юнит-тесты! И правда, как же мы, бедные, мучаемся? У нас даже ни копи-паста, ни жутких макросов не получается, наверное, что-то делаем в корне неправильно.
На втором месте в списке оправданий навечно поселилось незабвенное "Нам код писать надо, некогда ерундой занматься". Кстати, услышано от одних жавистов. У них, видать, тоже рефлекшена не было.
Мы пишем юнит-тесты на С++. Отсутствие рефлекшена нам почему-то не мешает.
L>>Чтобы не уповать на среду, на синтаксис и скобки и чтобы ничего не лежало из-за того,
D>Уповать не надо ни на что. Однако все, всё и вся в разработке должны помогать избегать ошибок. И язык, и IDE, и unit-тесты, и своя голова, и коллеги, и QA. И чем больше таких возможностей предоставляют нижние уровни иерархии, тем меньше проблем всплывёт в "день "Ч".
Ну вот своя голова прошляпила приоритет. Как в этом случае поможет езыг или IDE?
D>Пример же с приоритетами показывает, что элементарное поведение позволяет полностью ликвидировать целый класс ошибок ещё на самом первом уровне. И, что не менее важно, с нулевыми затратами на "думанье".
Пример с приоритетами показывает, что человеку свойственно ошибаться. Ну подсказала среда в простом случае, но в сложном она умывает руки. Можно бесконечно обосновывать невозможность покрытия тестом сферического кода в вакууме, но опыт показывает, что простейшие тесты на проверку редко возникающих условий позволяют помочь найти ошибку задолго до того, как совершивший ее получит по башке.
Среда же лишь может подсказать в элементарных случаях, думать она не обучена. В сложных случаях оно не только не поможет, но еще и навредить может.
Вот у меня есть конструкции вида (эстетам просьба не беспокоиться, у нас все продумано и такое использование оправдано)
MyClass::MyClass():
myMember(this)
{}

На которые компилятор кричит-кричит, аж надрывается, бедный. Так это я и без него знаю, что это может быть опасно в определенных случаях, но я также знаю, что это вовсе не тот случай. А компилятор не знает. Приходится его успокаивать прагмой.
Re[8]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: landerhigh Пират  
Дата: 06.08.08 02:00
Оценка: 8 (1)
Здравствуйте, drol, Вы писали:

MZ>>НАДО ДУМАТЬ !

D>Да, думать надо. Думать об архитектуре, о дизайне, о usability и т.д. А вот о приоритетах операций думать не надо. Более того, надо стараться, чтобы не требовалось думать о как можно большем количестве вещей. Например, возвращаясь к теме топика, о костылях из smart pointer'ов...
Абсолютно верно. Вот я 80% времени при разработке думаю об архитектуре, дизайне и, самое главное, о юзабилити. А о приоритетах операций, равно как и о смарт поинтерах и "жутких проблемах, связанных с ручным управлением памятью" вообще никогда не думаю. Потому что этих проблем попросту не существует.

Даже подумалось — если для кого-то "приоритет операций" вырастает в проблему, то может, этому "кому-то" следует задуматься о смене рода деятельности?

ЗЫ — пишу на C++ и C#. Устриц тоже ем регулярно.
Re[8]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: landerhigh Пират  
Дата: 06.08.08 02:05
Оценка:
Здравствуйте, drol, Вы писали:

D>Ну и напоследок, я всё-таки соглашусь с koch'ом: в Java сделано неудобно И посему C# рулит


D>
D>void func() 
D>{
D>  using(var cwpr = new class_with_possible_ressource()) 
D>    dosomethingwith(cwpr);
D>}
D>


С++

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


Re[12]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: PaulMinelly  
Дата: 06.08.08 05:30
Оценка:
Здравствуйте, nikov, Вы писали:

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


D>>Что то я сомневаюсь что managed языки не используют подсчет ссылок для определения свободен ли обьект или нет для освобождения через GC. Есть другие мнения?


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


Ну и что это не подсчет ссылок, если ссылок 1 (одна) то объект оставить — если 0, то finalize. Формально, очень даже подсчет ссылок.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.08.08 07:04
Оценка: +4 -1
Здравствуйте, PaulMinelly, Вы писали:

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


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


И все таки, обычно подсчетом ссылок называется другой механизм.
Re[12]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: codelord  
Дата: 06.08.08 07:21
Оценка: -10 :))
Для таких как ты любителей передергивать, я написал что имел ввиду получение исполняемого файла,
и если серьезно когда человек за словами не видит смысла, это признак дебильности, честно посмотри в литературу.
А то что ты называешь компиляцией является только способом получения суррогата в виде байт-кода, который твоя
... машина берется интерпретировать и исполнять.

F>З.Ы. А если серьезно — изучи вопрос. Джава — компилируемый язык, только окончательная компиляция в машкоды происходит в процессе работы приложения.


Сообщение отредактировано модератором. ДХ
Re[14]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: codelord  
Дата: 06.08.08 07:22
Оценка:
Ты видимо собираешь некоторый огрызок. который ни то ни другое
Здравствуйте, Cyberax, Вы писали:

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


C>>Да ну нах, что за чушь.

C>>Соберите объектник слинкуйте и запустите хоть где нибудь без Java интерпретатора в кучу мегов
C>Excelsior JET. Минимальное приложение (в виде автономного exe-шника) на Java — около 500Кб. Минимальное приложение с GUI (SWT) — около мегабайта.

C>Что я делаю не так?
Re[16]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: shrecher  
Дата: 06.08.08 07:23
Оценка: -2
Здравствуйте, WolfHound, Вы писали:

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


S>>Это к вопросу не относится. На самом деле, я хотел сказать, что overhead от memory barrier и подщета счетчика ссылок минимальный.

WH>Сотня тактов. Подумаешь фигня какая...

Ты имел ввиду эти четыре ассемблерные инструкции на инеремент или декремент счетчика?! Это действительно фигня. Вызов функуции с парой агрументов занимает больще времени. Смысла нет экономить на этих "спичках".
Re[14]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: CreatorCray  
Дата: 06.08.08 08:53
Оценка:
Здравствуйте, Mamut, Вы писали:

M>соберите объектник и запустите его где-нибдь без mcvcrt*.dll, crt.dll и прочих

хехе.
мои почти все будут работать
им из DLL тока kernel + gdi надо.
все остальное: static linking
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[16]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: CreatorCray  
Дата: 06.08.08 08:53
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


S>>Это к вопросу не относится. На самом деле, я хотел сказать, что overhead от memory barrier и подщета счетчика ссылок минимальный.

WH>Сотня тактов. Подумаешь фигня какая...
в среднем бывает около трех сотен
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[17]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: CreatorCray  
Дата: 06.08.08 08:53
Оценка:
Здравствуйте, shrecher, Вы писали:

S>Ты имел ввиду эти четыре ассемблерные инструкции на инеремент или декремент счетчика?! Это действительно фигня.

не. Если убрать lock то они будут летать шо дурные.
время жрет именно синхронизация кэшей по lockу

S>Вызов функуции с парой агрументов занимает больще времени. Смысла нет экономить на этих "спичках".

да ну?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[14]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: codelord  
Дата: 06.08.08 09:55
Оценка: -2
M>соберите объектник и запустите его где-нибдь без mcvcrt*.dll, crt.dll и прочих

во первых таких либ у меня нет я пишу под Linux,
во вторых если вы имеете ввиду системные либы, то без них никто не работает
в т/ч и ваша ява. И еще если очень хочется то можно, вам знакомо понятие статическая линковка?
( хотя с явой врятли )

Сообщение отредактировано модератором. ДХ
Re[15]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: Mamut Швеция http://dmitriid.com
Дата: 06.08.08 10:07
Оценка: -1
C>Вот еще один умник, во первых таких либ у меня нет
C>я пишу под Linux, во вторых если вы имеете ввиду системные либы, то без них никто не работает
C>в т/ч и ваша ява. И еще если очень хочется то можно, вам знакомо понятие статическая линковка?
C>( хотя с явой врятли )

JVM — это системные либы для приложений на Яве

ЗЫ. Мне всегда интересно наблюдать, как делаются далекоидущие выводы на основе только одного сообщения собеседника.


dmitriid.comGitHubLinkedIn
Re[11]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: Mamut Швеция http://dmitriid.com
Дата: 06.08.08 10:10
Оценка:
M>>А разве в Яве не так же? И вообще приведенный код не равнозначен, имхо.
V>В Яве разве вообще есть понятие автоматически вызываемого деструктора?

Хз

Насчет того, что код неравнозначен я имею в виду, что:
— для Явы почему-то понадобилось проверять, инициализировался ли объект. С++ же не дает такую гарантию
— для С++ почему-то считается, что dosomethingwith(cwpr) не выкинет нигде никаких исключений

Код будет равнозхначен только с приведенным кодом dosomethingwith и class_with_possible_ressource


dmitriid.comGitHubLinkedIn
Re[9]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: Mamut Швеция http://dmitriid.com
Дата: 06.08.08 10:11
Оценка:
M>>А что, при инициализации r1, r2, r3 в С++ не может возникнуть исключений? Если приводить код, то, может, будем его одинаковым приводить?

E>Если в С++ при вызове r2.open() возникнет исключение, то деструктор r1 выполнит все действия по очистке, т.е. r1.close() вызывать не нужно. Так что код выглядит одинаковым.


Мде. Позабыл я С++, оказывается


dmitriid.comGitHubLinkedIn
Re[16]: оффтоп
От: frogkiller Россия  
Дата: 06.08.08 10:22
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>С Java/.NET проблема как раз в том, что для минимального приложения получается очень большой оверхед. На больших приложениях этот оверхед не заметен.


Именно поэтому, я и печалюсь Получается, что индустрия подталкивает (даже не подталкивает, а тащит с громадной силой) к написанию больших приложений — даже там, где можно обойтись гораздо меньшими усилиями.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[7]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: WolfHound  
Дата: 06.08.08 10:48
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>НАДО ДУМАТЬ ! И надо иметь красивый сложный и мощный язык.

Вот и подумай зачем языку быть сложным?
И если ты любишь сложность то эти языки для тебя. Уверен тебе понравится.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Зачем нужен сборщик мусора? Как жить без деструкторов
От: drol  
Дата: 06.08.08 11:17
Оценка:
Здравствуйте, landerhigh, Вы писали:

D>>
D>>void func() 
D>>{
D>>  using(var cwpr = new class_with_possible_ressource()) 
D>>    dosomethingwith(cwpr);
D>>}
D>>


L>С++


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


Неэквивалентно, бо terminate() после исключений из деструкторов, тогда как в C# никаких проблем.
Re[13]: Зачем нужен сборщик мусора? Как жить без деструкторо
От: fmiracle  
Дата: 06.08.08 11:34
Оценка: +2 -1
Здравствуйте, codelord, Вы писали:

C>Для таких как ты любителей передергивать, я написал что имел ввиду получение исполняемого файла,

C>и если серьезно когда человек за словами не видит смысла, это признак дебильности, честно посмотри в литературу.
C>А то что ты называешь компиляцией является только способом получения суррогата в виде байт-кода, который твоя
C>... машина берется интерпретировать и исполнять.
C>как и предыдущему товарищу советую не позориться и не писать ахинею.

Ух ты, какой замечательный ребенок. Еще ничего не знает, но энергия самомнение просто бьют через край.
Ознакомься с материалом, узнаешь много чего интересного.

Например то, что байт-код перед исполнением компилируется в машинные коды, в отличии от интерпретируемых языков.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.