Re[12]: Смотри шире
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 24.12.07 13:48
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Если на C++ пишешь использую любой высокоуровневый фреймворк то никаких отличий.


VD>Ну, ну. Вот тут еао197 жаловался как-то на то, что в одном проекте приходится увязвать разные библиотеки которые получаются совместимы как уж с ежом только потому, что там были приняты разные политики управления память.


Про управление памятью говорил, есть такое дело. Хуже всего с этим у GDI библиотек, но там, вероятно, своя специфика.
А вот высокоуровневых С++ библиотек, в которых бы утекали другие ресурсы (GDI хендлы, сокеты, мутексы и пр.) не видел. Хотя приходилось объединять, например, Qt и Crypto++, ACE с Qt, ACE с FOX Toolkit и пр.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Смотри шире
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 24.12.07 14:26
Оценка:
Здравствуйте, remark, Вы писали:


R>Что и требовалось доказать.


Что требовалось доказать?

R> От malloc/free никуда не ушли.


Ушли. Файлы и память — раные вещи. С файлами работают только части программы, ответственные за ввод/вывод, а с памятью так или иначе работает вся программа.

R>Соотв. и надёжность/утечки равны таковым при использовании malloc/free. Какие основания ожидать иного?


Не равны. Если есть GC, то надёжность сильно возрастает. За счёт того, что в 99% мест, где управление было бы ручным, оно станет автоматическим. А с файлами да, придётся по-преэнемы трахаться. Но это в десятки раз меньше траха, чем с памятью.

R>Далее самое интересное — если мы в управляемой среде можем реализовать надёжное управление некоторыми ресурсами с помощью close/Dispose/using (можем же, правильно?), то в чём проблема при использовании тех же средств, но в других языках и для других ресурсов?


Не можем мы организовать надёжное ручное управление ресурсами! И никто обратного не утверждал. Самое надёжное управление — это автоматическое.

В других языках зато либо вообще отсутсвует возможность автоматического управления ресурсами (C), либо это делается так, что хочется проклинать и язык, и ресурсы (C++). Д а и что тут "другие"? Языков, требующих GC немало, они не ограничиваются Java/C#. Так вот, при этом ручное управление ресурсами одинаково хорошо реализовано и в С, и в C++, и в C#. Значит, у языков с GC есть некоторое преимущество.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[17]: Смотри шире
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 24.12.07 14:26
Оценка:
Здравствуйте, FR, Вы писали:

FR>Конечно не нужно оставлять файл открытым, и поэтому если инструмент не предоставляет средств автоматизировать такие вещи то и приходится это делать по старинке ручками через close и т. п., и управляемые инстументы в таком контексте ничем не лучше неуправляемых (delphi) и хуже чем C++.


Чем это они хуже?
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[18]: Смотри шире
От: FR  
Дата: 24.12.07 14:33
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Чем это они хуже?


Тем что в них управлять ресурсами чуть сложнее чем в C++.
Re[18]: Смотри шире
От: remark Россия http://www.1024cores.net/
Дата: 24.12.07 14:41
Оценка: +1 -1
Здравствуйте, konsoletyper, Вы писали:

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


R>>Что и требовалось доказать.


K>Что требовалось доказать?


R>> От malloc/free никуда не ушли.


K>Ушли. Файлы и память — раные вещи. С файлами работают только части программы, ответственные за ввод/вывод, а с памятью так или иначе работает вся программа.


R>>Соотв. и надёжность/утечки равны таковым при использовании malloc/free. Какие основания ожидать иного?


K>Не равны. Если есть GC, то надёжность сильно возрастает. За счёт того, что в 99% мест, где управление было бы ручным, оно станет автоматическим. А с файлами да, придётся по-преэнемы трахаться. Но это в десятки раз меньше траха, чем с памятью.


R>>Далее самое интересное — если мы в управляемой среде можем реализовать надёжное управление некоторыми ресурсами с помощью close/Dispose/using (можем же, правильно?), то в чём проблема при использовании тех же средств, но в других языках и для других ресурсов?


K>Не можем мы организовать надёжное ручное управление ресурсами! И никто обратного не утверждал. Самое надёжное управление — это автоматическое.


K>В других языках зато либо вообще отсутсвует возможность автоматического управления ресурсами (C), либо это делается так, что хочется проклинать и язык, и ресурсы (C++). Д а и что тут "другие"? Языков, требующих GC немало, они не ограничиваются Java/C#. Так вот, при этом ручное управление ресурсами одинаково хорошо реализовано и в С, и в C++, и в C#. Значит, у языков с GC есть некоторое преимущество.



Забудем на время про память, и рассмотрим все остальные ресурсы — файла, сокеты, соединения с БД, графические хэндлы и всевозможные хэндлы различных библиотек. Программисты на управляемых языках умеют писать программы безопасные по отношению к этим ресурсам?


з.ы. не знаю как ты пишешь на С++, но я пишу так и ничего не проклинаю:
file f ("data");
//...

Этот фрагмент не менее надёжен, чем аналог на управляемом языке.
з.з.ы. Аналогично работаю с памятью. Это аналогично не менее надёжно. Никаких утечек не помню на протяжении лет...



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[19]: Смотри шире
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 24.12.07 16:49
Оценка: -2
Здравствуйте, FR, Вы писали:

K>>Чем это они хуже?


FR>Тем что в них управлять ресурсами чуть сложнее чем в C++.


В 99% случаев ими вообще не нужно управлять. Зато в этих 99% случаев, когда в C#/Java всё просто и логично, в C++ — кошмар.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[19]: Смотри шире
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 24.12.07 16:49
Оценка:
Здравствуйте, remark, Вы писали:

R>Забудем на время про память, и рассмотрим все остальные ресурсы — файла, сокеты, соединения с БД, графические хэндлы и всевозможные хэндлы различных библиотек.


Я же говорю — с памятью обычно работы гораздо больше. К тому же, с памятью попадаются гораздо более изощрённые ситуации, чем со всем остальным. Хэндлы — это от лукавого, если бы ОС изначально проектировалась в расчёте на managed-среду, то таких проблем не возникало бы в принципе. В соединении с БД аналогично: всякие кэши и прочее мог бы собирать GC, а явно управлять нужно управлять сокетом/файлом/расшаренной памятью. Т.е. вручную есть смысл управлять теми ресурсами, к которым имеет доступ несколько процессов. В данном случае вообще, мы вынуждены управлять не временем жизни, а лишь временем эксклюзивного доступа к ресурсу.

R> Программисты на управляемых языках умеют писать программы безопасные по отношению к этим ресурсам?


Ага. А что им должно мешать?

R>з.ы. не знаю как ты пишешь на С++, но я пишу так и ничего не проклинаю:

R>
R>file f ("data");
R>//...
R>

R>Этот фрагмент не менее надёжен, чем аналог на управляемом языке.
R>з.з.ы. Аналогично работаю с памятью. Это аналогично не менее надёжно. Никаких утечек не помню на протяжении лет...

Это тривиальный случай. Вообще, в случае с файлами как правило не приходится сильно извращаться. С памятью бывает полный ППЦ. Например, те же вещи связанные с генерацией ДКА по регулярному выражению. Или задача на ICFP 2007 (интерпретатор генов), которая _оптимально_ в случае с GC решается легко и естественно, а без GC приходится извращаться. Или та, задача, которую я решаю сейчас — выделение из прайс-листов полезной информации и запихивание её в БД. Вот сижу, смотрю на свой код на C#, и думаю: до чего же надо иметь извращённый мозг, чтобы во всей этой трёхэтажной алгоритмике, вовсю нашпигованной эвристикой, ещё и памятью управлять?

ЗЫ: А что если надо открыть файл, и вернуть кортеж, содержащий в том числе и хэндл, а потом этот кортеж учавтствует в формировании множеств элеметов (которые так же содержат хэндл), которые помещаются в узлы некого дерева, причём эти множества могут дублироваться в разных узлах? А что если потом это дерево несколько раз хитро обходится и на каждом обходе строится некая модификация дерева? И как потом всё это удалить, затрагивая лишь то, на что не осталось ссылок?
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[20]: Смотри шире
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 24.12.07 17:02
Оценка: +1
Здравствуйте, konsoletyper, Вы писали:

FR>>Тем что в них управлять ресурсами чуть сложнее чем в C++.


K>В 99% случаев ими вообще не нужно управлять. Зато в этих 99% случаев, когда в C#/Java всё просто и логично, в C++ — кошмар.


Ваши страхи по поводу C++ сильно преувеличены.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Смотри шире
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 24.12.07 17:06
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>ЗЫ: А что если надо открыть файл, и вернуть кортеж, содержащий в том числе и хэндл, а потом этот кортеж учавтствует в формировании множеств элеметов (которые так же содержат хэндл), которые помещаются в узлы некого дерева, причём эти множества могут дублироваться в разных узлах? А что если потом это дерево несколько раз хитро обходится и на каждом обходе строится некая модификация дерева? И как потом всё это удалить, затрагивая лишь то, на что не осталось ссылок?


А как вы будете все это делать с GC, если все это нужно будет действительно _удалить_, а не оставить в мусоре до следующего прихода GC?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Смотри шире
От: minorlogic Украина  
Дата: 24.12.07 18:07
Оценка: +1 -1
Здравствуйте, konsoletyper, Вы писали:

K>Это тривиальный случай. Вообще, в случае с файлами как правило не приходится сильно извращаться. С памятью бывает полный ППЦ. Например, те же вещи связанные с генерацией ДКА по регулярному выражению. Или задача на ICFP 2007 (интерпретатор генов), которая _оптимально_ в случае с GC решается легко и естественно, а без GC приходится извращаться. Или та, задача, которую я решаю сейчас — выделение из прайс-листов полезной информации и запихивание её в БД. Вот сижу, смотрю на свой код на C#, и думаю: до чего же надо иметь извращённый мозг, чтобы во всей этой трёхэтажной алгоритмике, вовсю нашпигованной эвристикой, ещё и памятью управлять?


Мне кажется у тебя неверная предросылка, о том что С++ програмист управляет памятью. На самом деле опытный профи совершенно не будет тратить на это время и переложит все управление на обертки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[21]: Смотри шире
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 24.12.07 18:30
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Мне кажется у тебя неверная предросылка, о том что С++ програмист управляет памятью. На самом деле опытный профи совершенно не будет тратить на это время и переложит все управление на обертки.


Я знаю про всякие мутации смартпоинтеров и про способы прикручивания GC к C++. Но тут есть одна штука. В C++ по умолчанию ресурсами надо управлять вручную, потому есть определённая вероятность ошибиться и заюзать небезопасные указатели и т.п.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[19]: Смотри шире
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.12.07 20:11
Оценка: +1
Здравствуйте, remark, Вы писали:

R>Забудем на время про память, и рассмотрим все остальные ресурсы — файла, сокеты, соединения с БД, графические хэндлы и всевозможные хэндлы различных библиотек. Программисты на управляемых языках умеют писать программы безопасные по отношению к этим ресурсам?


На безопасных языках возможно реализовать автоматику для любых ресурсов, которые не требуют детерминированного завершения и не являются сверхценными. В твоем примере "графические хэндлы и всевозможные хэндлы различных библиотек" таковыми могут и не являться. Штатно в дотнете подобное управление реализовано для хендлов GDI и USER, причем первые реально никто почти никогда не чистит руками. Тем не менее к проблемам это не приводит.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[21]: Смотри шире
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.12.07 20:11
Оценка: +3
Здравствуйте, minorlogic, Вы писали:

M>Мне кажется у тебя неверная предросылка, о том что С++ програмист управляет памятью.


Ну да, в шарпе проблема явно юзинг указать для детерминированного завершения, а явно использовать смартпоинтеры для любого класса и руками разруливать циклы, это конечно не проблема .
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[18]: Смотри шире
От: Стэн http://stanonwork.blogspot.com/
Дата: 24.12.07 22:36
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>В других языках зато либо вообще отсутсвует возможность автоматического управления ресурсами (C), либо это делается так, что хочется проклинать и язык, и ресурсы (C++). Д а и что тут "другие"? Языков, требующих GC немало, они не ограничиваются Java/C#. Так вот, при этом ручное управление ресурсами одинаково хорошо реализовано и в С, и в C++, и в C#. Значит, у языков с GC есть некоторое преимущество.


Кстати, есть, на мой взгляд, как минимум одна область, где GC дает явное преимущество, а возможно и просто является необходимостью — многопоточные и асинхронные приложения. В свое время я набросал кое-что в блоге по этому поводу. А в библиотеке acto мне пришлось двухфазное удаление делать (так как в С++ нет GC). А все потому, что ссылки на объект могут находиться в другом потоке, или в какой-нибудь очереди сообщений и явное удаление просто обрушит программу...
Re[20]: Смотри шире
От: Cyberax Марс  
Дата: 24.12.07 22:54
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Это тривиальный случай. Вообще, в случае с файлами как правило не приходится сильно извращаться. С памятью бывает полный ППЦ. Например, те же вещи связанные с генерацией ДКА по регулярному выражению. Или задача на ICFP 2007 (интерпретатор генов), которая _оптимально_ в случае с GC решается легко и естественно, а без GC приходится извращаться.

Это не совсем так — там просто нужна структура типа "веревка". На чистом С++ она тоже неплохо делается, причем даже работает вполне быстро

K>Или та, задача, которую я решаю сейчас — выделение из прайс-листов полезной информации и запихивание её в БД. Вот сижу, смотрю на свой код на C#, и думаю: до чего же надо иметь извращённый мозг, чтобы во всей этой трёхэтажной алгоритмике, вовсю нашпигованной эвристикой, ещё и памятью управлять?

В таких задачах, действительно, сборщик мусора вполне нормально подходит.
Sapienti sat!
Re[21]: Смотри шире
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.12.07 05:17
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>А как вы будете все это делать с GC, если все это нужно будет действительно _удалить_, а не оставить в мусоре до следующего прихода GC?

GC.Collect() ?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[21]: Смотри шире
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 25.12.07 10:16
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Это не совсем так — там просто нужна структура типа "веревка". На чистом С++ она тоже неплохо делается, причем даже работает вполне быстро


Что это за структура?

C>В таких задачах, действительно, сборщик мусора вполне нормально подходит.


Ну вот, всё правильно
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[22]: Смотри шире
От: Delight  
Дата: 25.12.07 11:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>GC.Collect() ?


Тяжеловато, да и, скажем, не гарантируется в Java. ИМХО подход с возможностью и явного, и неявного освобождения логичнее (привет, D), хотя и не без своих проблем.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re[23]: Смотри шире
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.12.07 11:49
Оценка:
Здравствуйте, Delight, Вы писали:
D>Тяжеловато, да и, скажем, не гарантируется в Java. ИМХО подход с возможностью и явного, и неявного освобождения логичнее (привет, D), хотя и не без своих проблем.
Как правило, явное освобождение памяти (кроме вырожденных случаев) приносит больше проблем, чем решает.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[22]: Смотри шире
От: minorlogic Украина  
Дата: 25.12.07 12:24
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Я знаю про всякие мутации смартпоинтеров и про способы прикручивания GC к C++. Но тут есть одна штука. В C++ по умолчанию ресурсами надо управлять вручную, потому есть определённая вероятность ошибиться и заюзать небезопасные указатели и т.п.


Возможность для ошибки существует всегда (с этим странно спорить) . Я коментировал высказывание о том что програмируя на С++ програмист тратит время на управление ресурсами.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.