Re[19]: За что я не люблю С++
От: neFormal Россия  
Дата: 27.05.09 12:37
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>В итоге всё и кончается

S>
S>  BEGIN_PROPERTY_LIST(Test)
S>  END_PROPERTY_LIST(Test)
S>


хе, примерно о подобном тоже думал..

F>>единственное что — неэстетично выгдядит обёртка.. но с этим ещё можно подумать..

S>Ну так это и есть костыль — неэстетично выглядящая подробность реализации.

-1.. "костыльность" — это вопрос не эстетики, а общепринятости..

F>>по сути это что то схожее с property от микрософта..

S>Да-да, я в курсе про многообразные костыли.

так можно дойти до идеи, что не встроенный ORM — жуткий костыль..
...coding for chaos...
Re[20]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.09 12:50
Оценка: 2 (1) +1
Здравствуйте, COFF, Вы писали:

COF>Предположим, что у меня есть некий ресурс, пусть битмап, есть произвольное количество векторов std::vector< boost::shared_ptr<bitmap> > которые содержат пересекающиеся множества битмапов. Например, я делаю какие-то сложные вычисления над графическими примитивами. Теперь, мне нужно очистить один из векторов, я делаю v.clear(), при этом все битмапы, на которые нет ссылок в других векторах тут же должны быть тут же освобождены, так как битмапов много и я не могу их держать в памяти произвольное время. Как это сделать на C#?

GC.Collect();
GC.WaitForPendingFinalizers();


Все недоступные битмапы будут освобождены. Хотя ты явно преувеличиваешь про "не могу держать в памяти произвольное время" — пока память тебе реально не потребуется, повода паниковать нет.

Но, конечно же, если хочется такого же секса, как в С++, то можно сделать и вектора с подсчётом ссылок. Объем кода будет сравним с shared_ptr.

Секс — это в смысле возможность сохранить указатель на битмэп мимо вектора, и после освобождения получить InvalidOperationException.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[20]: За что я не люблю С++
От: MxKazan Португалия  
Дата: 27.05.09 12:50
Оценка:
Здравствуйте, COFF, Вы писали:

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


S>>Там достаточно сделать опечатку типа int& в декларации проперти типа — и упс! Будешь потом неделю бороду чесать, разбираясь что куда девалось.

F>>>по сути это что то схожее с property от микрософта..
S>>Да-да, я в курсе про многообразные костыли.

COF>По моему, свойства прекрасно заменяются get и set функциями, но если считается, что любая возможность которая есть в одном языке, но которой нет в другом языке однозначно свидетельствует о превосходстве первого над вторым, сколь ни натянутой и бесполезной эта возможность на самом деле является, то повторите на C# вот такое вот поведение.

Не гони а. Тут уже привели плюсы свойств против функций. Если тебе они не понятны, то это не значит, что всё это "натянуто и бесполезно". Вообще, "борцам за правду" не мешало бы признавать и недостатки.

COF>Предположим, что у меня есть некий ресурс, пусть битмап, есть произвольное количество векторов std::vector< boost::shared_ptr<bitmap> > которые содержат пересекающиеся множества битмапов. Например, я делаю какие-то сложные вычисления над графическими примитивами. Теперь, мне нужно очистить один из векторов, я делаю v.clear(), при этом все битмапы, на которые нет ссылок в других векторах тут же должны быть тут же освобождены, так как битмапов много и я не могу их держать в памяти произвольное время. Как это сделать на C#?

GC.Collect
Re[21]: За что я не люблю С++
От: COFF  
Дата: 27.05.09 13:01
Оценка: +2
Здравствуйте, Sinclair, Вы писали:

S>Все недоступные битмапы будут освобождены. Хотя ты явно преувеличиваешь про "не могу держать в памяти произвольное время" — пока память тебе реально не потребуется, повода паниковать нет.


Я так и думал, что единственным решением будет вызывать сборщик мусора на каждый чих, но вообще-то часто его вызывать это нехорошо, нет?

S>Но, конечно же, если хочется такого же секса, как в С++, то можно сделать и вектора с подсчётом ссылок. Объем кода будет сравним с shared_ptr.


А каком сексе вы говорите уважаемый? секс это оба ваших решения, а в C++ все просто и прозрачно.

S>Секс — это в смысле возможность сохранить указатель на битмэп мимо вектора, и после освобождения получить InvalidOperationException.


В общем, в очередной раз, если чего-то нет в C++ — это секс, а если чего-то нет в C# — это так и надо :)
Re[20]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.09 13:07
Оценка:
Здравствуйте, neFormal, Вы писали:
F>-1.. "костыльность" — это вопрос не эстетики, а общепринятости..
Общепринятые костыли не становятся менее костыльными. См.напр. MFC.

F>так можно дойти до идеи, что не встроенный ORM — жуткий костыль..

В правильную сторону мыслишь. Но дело не во встроенности, а именно в эстетике. К примеру, ни в С# 3.0, ни в Java 6 ORM не встроены.
Но при этом в шарп можно встроить офигительный ORM, а в джаве один хрен будут костыли.

Впрочем, по сравнению с джавой ORM для C++ будут вообще инвалидной коляской.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[21]: За что я не люблю С++
От: COFF  
Дата: 27.05.09 13:07
Оценка:
Здравствуйте, MxKazan, Вы писали:

COF>>Предположим, что у меня есть некий ресурс, пусть битмап, есть произвольное количество векторов std::vector< boost::shared_ptr<bitmap> > которые содержат пересекающиеся множества битмапов. Например, я делаю какие-то сложные вычисления над графическими примитивами. Теперь, мне нужно очистить один из векторов, я делаю v.clear(), при этом все битмапы, на которые нет ссылок в других векторах тут же должны быть тут же освобождены, так как битмапов много и я не могу их держать в памяти произвольное время. Как это сделать на C#?

MK>GC.Collect

Хорошо, усложним задачу, предположим, что обработка ведется несколькими потоками, битмапы передаются из потока в поток во время обработки, тоже будете GC.Collect звать?
Re[22]: За что я не люблю С++
От: MxKazan Португалия  
Дата: 27.05.09 13:12
Оценка:
Здравствуйте, COFF, Вы писали:

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


S>>Все недоступные битмапы будут освобождены. Хотя ты явно преувеличиваешь про "не могу держать в памяти произвольное время" — пока память тебе реально не потребуется, повода паниковать нет.

COF>Я так и думал, что единственным решением будет вызывать сборщик мусора на каждый чих, но вообще-то часто его вызывать это нехорошо, нет?
На каждый чих? Это видать, что ни программа на C#, то сплошь воротилка произвольного числа векторов битмапов
Re[23]: За что я не люблю С++
От: COFF  
Дата: 27.05.09 13:15
Оценка:
Здравствуйте, MxKazan, Вы писали:

COF>>Я так и думал, что единственным решением будет вызывать сборщик мусора на каждый чих, но вообще-то часто его вызывать это нехорошо, нет?

MK>На каждый чих? Это видать, что ни программа на C#, то сплошь воротилка произвольного числа векторов битмапов :)))

А почему нет? Для тебя вот важным является свойства чтоб были, а для меня — нет, зато для меня важно не думать когда GC.Collect звать и как это повлияет на всю остальную систему. Кому, как говорится, арбуз, а кому свиной хрящик :)
Re[21]: За что я не люблю С++
От: NikeByNike Россия  
Дата: 27.05.09 13:17
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Все недоступные битмапы будут освобождены. Хотя ты явно преувеличиваешь про "не могу держать в памяти произвольное время" — пока память тебе реально не потребуется, повода паниковать нет.


А если память нужна кому-то ещё?
Нужно разобрать угил.
Re[22]: За что я не люблю С++
От: MxKazan Португалия  
Дата: 27.05.09 13:18
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Хорошо, усложним задачу, предположим, что обработка ведется несколькими потоками, битмапы передаются из потока в поток во время обработки, тоже будете GC.Collect звать?

Ты знаешь, я честно говоря, не силен в вызове GC.Collect, т.к. не использую этого метода вообще. И в многопоточных приложениях в том числе.
Re[23]: За что я не люблю С++
От: NikeByNike Россия  
Дата: 27.05.09 13:21
Оценка:
Здравствуйте, MxKazan, Вы писали:

S>>>Все недоступные битмапы будут освобождены. Хотя ты явно преувеличиваешь про "не могу держать в памяти произвольное время" — пока память тебе реально не потребуется, повода паниковать нет.

COF>>Я так и думал, что единственным решением будет вызывать сборщик мусора на каждый чих, но вообще-то часто его вызывать это нехорошо, нет?
MK>На каждый чих? Это видать, что ни программа на C#, то сплошь воротилка произвольного числа векторов битмапов

Моя последняя именно такой и являлась Мне смешно становится, когда я представляю что было бы если бы я затеял её на шарпе

P.S.
Хотя конечно с удовольствием перешёл бы на шарп — если бы была такая техническая возможность. Но жизнь сурова и ради хорошей зп приходится мучиться
Нужно разобрать угил.
Re[23]: За что я не люблю С++
От: COFF  
Дата: 27.05.09 13:22
Оценка:
Здравствуйте, MxKazan, Вы писали:

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


COF>>Хорошо, усложним задачу, предположим, что обработка ведется несколькими потоками, битмапы передаются из потока в поток во время обработки, тоже будете GC.Collect звать?

MK>Ты знаешь, я честно говоря, не силен в вызове GC.Collect, т.к. не использую этого метода вообще. И в многопоточных приложениях в том числе.

Но ты же сам его предложил? Теперь оказывается, что ты в нем не силен, зачем предлагал? ;) Я понимаю, что можно сказать, что много программ написано (и тобой в том числе) на C# где такие проблемы не возникают, соответственно это все не актуально. Но ведь на C++ написано еще больше программ безо всяких лямбд и свойств, так ведь?
Re[22]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.09 13:24
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Я так и думал, что единственным решением будет вызывать сборщик мусора на каждый чих, но вообще-то часто его вызывать это нехорошо, нет?

Ну конечно нехорошо. Как и поспешно дестроить объекты в условиях избытка памяти. Но это же ты попросил это сделать — я поверил тебе на слово, что тебе действительно нужно срочно отпустить битмэпы.

COF>А каком сексе вы говорите уважаемый? секс это оба ваших решения, а в C++ все просто и прозрачно.

Я написал детали секса строчкой ниже. На С++ ничего прозрачного нету — просто есть "типа указатели" с семантикой владения. И есть все остальные указатели, которые приводят к undefined behavior в случае чего.

Эмулировать требуемое задачей поведение на C# не слишком сложно — с точки зрения пользователя коллекций всё будет выглядеть практически так же. Ну, кроме того, что вместо UB будет таки InvalidOperationException.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[23]: За что я не люблю С++
От: COFF  
Дата: 27.05.09 13:26
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Эмулировать требуемое задачей поведение на C# не слишком сложно — с точки зрения пользователя коллекций всё будет выглядеть практически так же. Ну, кроме того, что вместо UB будет таки InvalidOperationException.


Ну так и на C++ эмулировать свойства не слишком сложно, и с точки зрения пользователей все будет выглядеть практически так же с той же степенью достоверности, так в чем вопрос?
Re[21]: За что я не люблю С++
От: neFormal Россия  
Дата: 27.05.09 13:28
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

F>>-1.. "костыльность" — это вопрос не эстетики, а общепринятости..
S>Общепринятые костыли не становятся менее костыльными. См.напр. MFC.

не знаю, не успел её распробовать..

F>>так можно дойти до идеи, что не встроенный ORM — жуткий костыль..

S>В правильную сторону мыслишь. Но дело не во встроенности, а именно в эстетике. К примеру, ни в С# 3.0, ни в Java 6 ORM не встроены.
S>Но при этом в шарп можно встроить офигительный ORM, а в джаве один хрен будут костыли.

а в чём принципиальное преимущество шарпа в этом плане?. какое нибудь дополнительное указание мета-информации?.
...coding for chaos...
Re[20]: За что я не люблю С++
От: Mamut Швеция http://dmitriid.com
Дата: 27.05.09 13:29
Оценка: +1
ГВ>
ГВ> class Test
ГВ> {
ГВ>   public:
ГВ>     PROPERTY(Test, int, a, get_a, set_a);
ГВ>     PROPERTY(Test, int, b, get_b);

ГВ>   protected:
ГВ>     void set_a(int v){ ... }
ГВ>     int get_a() const {  ... }
ГВ> }
ГВ>


ГВ> F>>единственное что — неэстетично выгдядит обёртка.. но с этим ещё можно подумать..


Угу. Вспоминатся Qt, где подобное реализовано для событий. Приходится препроцессор отдельный прогонять. А как только где-то что-то навернется, ни один дебаггер не спасет
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[24]: За что я не люблю С++
От: MxKazan Португалия  
Дата: 27.05.09 13:33
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Но ты же сам его предложил? Теперь оказывается, что ты в нем не силен, зачем предлагал?

Затем что ты просил.

COF>Я понимаю, что можно сказать, что много программ написано (и тобой в том числе) на C# где такие проблемы не возникают, соответственно это все не актуально. Но ведь на C++ написано еще больше программ безо всяких лямбд и свойств, так ведь?

Ты по-моему влез в спор, не удосужившись глянуть о чем он. Никто ведь не говорит, что свойства — абсолютная необходимость. Где такое написано? Я не писал по крайней мере. Хотя на мой взгляд — это очень удобная фича во многих отношениях. И то, что порой методы в С++ маскируют под свойства только доказывает это. Однако, изначально спор пошел на тему, что эмуляция свойств на С++ не является полноценной и уступает C#. Есть что возразить на это?
Re[9]: За что я не люблю С++
От: March_rabbit  
Дата: 27.05.09 13:36
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Ведь аналога метаданных, понимаемых дебаггером, не будет.

а что, дебаггер не люди пишут? И они не могут с компиляторописателями утрясти формат?
Дебажную инфу вроде как утрясли.
Re[25]: За что я не люблю С++
От: COFF  
Дата: 27.05.09 13:41
Оценка:
Здравствуйте, MxKazan, Вы писали:

COF>>Я понимаю, что можно сказать, что много программ написано (и тобой в том числе) на C# где такие проблемы не возникают, соответственно это все не актуально. Но ведь на C++ написано еще больше программ безо всяких лямбд и свойств, так ведь?

MK>Ты по-моему влез в спор, не удосужившись глянуть о чем он. Никто ведь не говорит, что свойства — абсолютная необходимость.

Посмотрел начало ветки:
>А некоторые языки (а именно С++) не имеют таких базовых понятий как: свойства, атрибуты, события, делегаты, лямбда-выражения, замыкания, duck typing, интерфейсы, covariance и contravariance, и много другого.

Логично предположить, что свойства как базовые понятия таки необходимость.

Первый ответ:
>свойства — синтезируется;

Выяснили, что действительно синтезируется, не совсем так как в C#, но есть. Галочку можно поставить :) Особенно, если они не абсолютная необходимость. Но изначально-то вопрос стоял о том, что свойства — это базовое понятие, только потом был умело повернут на соответствие свойств в C++ и C#.
Re[22]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.09 13:41
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:
NBN>А если память нужна кому-то ещё?
Это то же самое. Когда память становится нужна кому-то еще, GC это замечает и начинает уборку.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.