Re[9]: преимущества неуправляемого С++
От: bugmaker  
Дата: 28.07.04 13:32
Оценка: -1
Здравствуйте, Kluev, Вы писали:

K>Здравствуйте, S.Yu.Gubanov, Вы писали:


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


K>>>Может их и можно проектировать, только зачем? Я еще не встречал ни одной системы имеющей сетевую (циклическую) архитектуру, которую вы тут проповедуете. Все что я видел, было древовидным (в крайнем случае), а обычно двух или трех уровневым. В такой архиетктуре проблеммы циклических ссылок просто нет. И такая архитектура вообщем всегда предпочтительнее сетевой. Чем проще тем лучше (проще не в смысле примитивнее).


SYG>>Архитектура — это одно, а ссылки между объектами — это другое. Архитектура — это то как модули друг друга импортируют.Модули всегда друг друга импортируют без циклов, стараются конечно — древовидно, но это не обязательно, главное что циклически модули не умеют импортироваться. А ссылки между объектами во время выполнения программы могут быть произвольные хоть циклические, хоть сами на себя — эти связи диктуются не архитектурой программы, а предметной областью для которой была написана программа. Если программа, например, написана для работы с графами, то понятно, что объекты этой программы ссылаются друг на друга так как в том графе нужно, к архитектуре же это отношения не имеет.


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


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


нужен жизненный пример?
пожалуйста, экосистема
живые организмы — модули
верхнее и нижнее звенья пищевой цепи — сборщики мусора
Re[12]: преимущества неуправляемого С++
От: degor Россия  
Дата: 28.07.04 13:43
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


D>>А циклические/перекрестные ссылки все-таки зло. И в системах c GC с ними можно огрести проблем.


AVK>Каких?


Хит, конечно, — порядок удаления зависимых объектов. Плюс недетерминированность времени удаления, как следствие — подвисание объектов и ресурсов. Такие вещи как Dispose Method от хорошей жизни не появляются.

А вот и пример: Re[10]: преимущества неуправляемого С++
Автор: degor
Дата: 28.07.04
... << RSDN@Home 1.1.3 stable >>
Re[10]: преимущества неуправляемого С++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.07.04 13:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Правда и в дотнете словить цикл можно. На событиях например. Забыл отписаться и приплыли тапочки к дивану.


И где там цикл?
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Там с сылочкой проблема
От: degor Россия  
Дата: 28.07.04 13:50
Оценка:
D>А вот и пример: Re[10]: преимущества неуправляемого С++
Автор: degor
Дата: 28.07.04

Надо читать Re[9]: преимущества неуправляемого С++
Автор: VladD2
Дата: 28.07.04
... << RSDN@Home 1.1.3 stable >>
Re[13]: преимущества неуправляемого С++
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.04 13:51
Оценка: -2
Здравствуйте, degor, Вы писали:

D>Согласен, но это никак не опровергает мое мнение, а дополняет его.


Ваш спор терминологический. Просто ты вкладваеш один смысл, а он другой.

D>Можно подумать, я не писал COM-объектов. С++ можно использовать на полную катушку, сделав всего две вещи — унаследоваться от IUnknown, и правильно его имплементировать.


А что такое сам IUnknown? Зачем он если язык поддерживает компонентность.

Вот чистый код на шарпе:
interface I1
{
    int Method();
}

interface I2
{
    int Method();
}

clas A : I1, I2
{
    int I1.Method() { return 1; }
    int I2.Method() { return 2; }
}

calss Test
{
    static void Main()
    {
        I1 i1 = new A();
        int i =   i1.Method(); // i == 1
        i = ((I2)i1).Method(); // i == 2
        I2 i2 = (I2)i1;
        i = i1.Method(); // i == 2
    }
}


Заметь, ничего лишнего. Код чист и красив. Попробуй изобразить тоже самое на С++ и сравни результат. Объем кода, его чистоту. Они несравнимы даже если отбросить все библиотеки (куча кода по регистрации, разные мапы и т.п.). А уж если сравнить со всей подноготной, то все будет просто смешно.

Особенно некрасиво выглядит приведение через QI. Вся типобезопасность языка идет лесом.

D> А то, что плюсы — это бесконечное поле засеянное граблями известно всем.


Похоже не всем. Тут постоянно идут споры о крутизне плюсов. Собственно я не против того, что язык мощный. И что для некоторых задач ему до сих пор нет равных. Но возведение его в ранг божественных явный перебор.

VD>>1. Наличие не виртуального публичного интерфейса.

D>Это проблема?

Да. Как минимум производительность страдает.

D>И как COM должен получать адреса функций без vtlb?


Это его проблемы. В дотнете эта проблема решена.

VD>>2. Множественное наследование.

D>Во-первых, это общепризнанный источник неприятностей .

И тем не мнее это одна из ключевых фич языка. Без нее фиг бы ты получил все прелисти того же АТЛ. Ну, и многие боготворят ее.

D> Во-вторых, я не вижу применимости множественного наследования от _чужих_ компонентов. Для компонентов/объектов в одном проекте никто не мешает им пользоваться.


Есть язык мощный своими фичами. И есть их невилирование когда речь заходит о компонентности. Факт?

VD>>3. Приведение типов.

VD>>4. Создание объектов.
VD>>5. Импорт типов.
D>Вот эти пункты я совсем не понял.

QI подменяет стандартные способы приведения типов. CI заменяет оператор new. Тлб и их импорт заменяет хэадеры. На лицо издевательство над славным языком. От языка камня на камне не осталось. Все положено на алтарь компонентности. Ну, и как результат отключение проверок типов языка (в QI и CI можно подсунуть любой указатель, один фиг к воиду приводить).

VD>>В общем, пол языка заменяется сурогатами. В том же дотнете компонентность встроена в языки и выглядт так как будтно это часть языка.

D>Так за это и боролись.

Ну, вот о том и речь. Поддержки компонентности в С++ просто нет по сравнению с тем же Шарпом.

D>Я совершенно не собираюсь доказывать, что C++ — идеальный язык для компонентно-ориентированного программирования. Это не так. Но и в обиду его не дам.


Я в доволь натрахался делая КОМ-объекты на АТЛ. И перйдя на дотнет я имею намного больше с практически нулевыми усилями. Теперь чтобы заставить мнея сделать КОМ-объект на плюсах нужно очень постараться. Вот об это и речь. Думаю твоей аппонент как раз и пытался донести эту мысль. Ну, чутка пергнул палку.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: преимущества неуправляемого С++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.07.04 13:54
Оценка:
Здравствуйте, degor, Вы писали:

D>Хит, конечно, — порядок удаления зависимых объектов.


И что порядок? Объекты без финализатора могут удалятся в любом порядке, объекты с финализатором до вызова финализатора не удаляются. Где проблема, вызванная циклическими ссылками?

D> Плюс недетерминированность времени удаления,


При чем тут циклические ссылки?

D> как следствие — подвисание объектов и ресурсов.


Это следствие неумелого обращения с неуправляемыми ресурсами.

D>А вот и пример: Re[10]: преимущества неуправляемого С++
Автор: degor
Дата: 28.07.04


Пример чего?
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[10]: преимущества неуправляемого С++
От: Kluev  
Дата: 28.07.04 13:56
Оценка: +1
Здравствуйте, bugmaker, Вы писали:

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


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


B>нужен жизненный пример?

B>пожалуйста, экосистема
B>живые организмы — модули
B>верхнее и нижнее звенья пищевой цепи — сборщики мусора

Ага, лев содержит ссылку на зайца, а заяц ссылку на почку волка. И все это чудно работает.

И где в этом примере циклические ссылки? и проблемма с ними?
Re[11]: преимущества неуправляемого С++
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.04 14:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Правда и в дотнете словить цикл можно. На событиях например. Забыл отписаться и приплыли тапочки к дивану.


AVK>И где там цикл?


Что в упор не видишь? Один объект держит другой. Тот подписывается на событие и первый схватывает второй. Ну, а так как один из них синглтон, то на лицо полный аналог проблемы циклической ссылки. Так что цигл то том всегда. Просто проблемы прявляются только при некоторых обстоятельствах.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: преимущества неуправляемого С++
От: bugmaker  
Дата: 28.07.04 14:02
Оценка:
Здравствуйте, Kluev, Вы писали:

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


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


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


B>>нужен жизненный пример?

B>>пожалуйста, экосистема
B>>живые организмы — модули
B>>верхнее и нижнее звенья пищевой цепи — сборщики мусора

K>Ага, лев содержит ссылку на зайца, а заяц ссылку на почку волка. И все это чудно работает.


K>И где в этом примере циклические ссылки? и проблемма с ними?



родственные особи содержат днк с частично совпадающей информацией, некоторые днк — бракованные, особи носящие их имеют низкую жизнеспособность
эти особи с низкой жизнеспособностью первыми подчищаются GC в виде хищников, вирусов и стихийных бедствий

аналог ссылки — днк
Re: Там с сылочкой проблема
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.07.04 14:04
Оценка:
Здравствуйте, degor, Вы писали:

D>Надо читать Re[9]: преимущества неуправляемого С++
Автор: VladD2
Дата: 28.07.04


Не было там никаких циклов, гонит он.
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[11]: преимущества неуправляемого С++
От: bugmaker  
Дата: 28.07.04 14:09
Оценка: -1
Здравствуйте, Kluev, Вы писали:

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


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


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


B>>нужен жизненный пример?

B>>пожалуйста, экосистема
B>>живые организмы — модули
B>>верхнее и нижнее звенья пищевой цепи — сборщики мусора

K>Ага, лев содержит ссылку на зайца, а заяц ссылку на почку волка. И все это чудно работает.


K>И где в этом примере циклические ссылки? и проблемма с ними?


дополнение
ссылка=днк передается другой особи при спаривании и что произойдет в дальнейшем с твоей личной наследственной информацией неизвестно, она тебе неподконтрольна
Re[2]: Там с сылочкой проблема
От: degor Россия  
Дата: 28.07.04 14:10
Оценка:
D>>Надо читать Re[9]: преимущества неуправляемого С++
Автор: VladD2
Дата: 28.07.04


AVK>Не было там никаких циклов, гонит он.


Циклов, скорей всего нет, но проблема есть. Если объект забыл отписаться от ивента, то он таки должен подвиснуть, пока источник событий не сдохнет. Или я не прав?

PS Мне действительно интресно это знать.
... << RSDN@Home 1.1.3 stable >>
Re[3]: Там с сылочкой проблема
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.07.04 14:24
Оценка:
Здравствуйте, degor, Вы писали:

AVK>>Не было там никаких циклов, гонит он.


D>Циклов, скорей всего нет, но проблема есть.


Ты еще помнишь первоначальный вопрос?

D>А циклические/перекрестные ссылки все-таки зло. И в системах c GC с ними можно огрести проблем.

Каких?


Итак, я по прежнему хочу услышать какие проблемы можно огрести в системах с GC от циклических/перекрестных ссылок.

D> Если объект забыл отписаться от ивента, то он таки должен подвиснуть, пока источник событий не сдохнет. Или я не прав?


D>PS Мне действительно интресно это знать.


Именно так. А где здесь проблема? Если ты записываешь объект в контейнер то он не сдохнет пока не сдохнет контейнер. Делегат это тот же контейнер. В том примере проблема была из-за того что событие было у синглтона, а на него подписывались регулярно обновляемые сущности. И проблема там была не совсем с GC, а с неконтролируемым ростом числа подписчиков. С GC как раз проблему решить можно.
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[3]: Там с сылочкой проблема
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.04 14:27
Оценка:
Здравствуйте, degor, Вы писали:

D>Циклов, скорей всего нет, но проблема есть. Если объект забыл отписаться от ивента, то он таки должен подвиснуть, пока источник событий не сдохнет. Или я не прав?


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

D>PS Мне действительно интресно это знать.


Знай.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: преимущества неуправляемого С++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.07.04 14:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>Правда и в дотнете словить цикл можно. На событиях например. Забыл отписаться и приплыли тапочки к дивану.


AVK>>И где там цикл?


VD>Что в упор не видишь? Один объект держит другой. Тот подписывается на событие и первый схватывает второй.

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

Там связь была только в одну сторону — от сингтона к форуму. Связи от форума к синглтону нет. Следовательно нет никакой циклической ссылки.

Если непонятно то вот примерная модель того что там происходит:
public class Test
{
    public event EventHandler SomeEvent;
    
    ...
    private ArrayList _items = new ArrayList();
    
    public void Refresh()
    {
        _items.Clear();
        foreach (Data d in SomeDataSource)
        {
            Item i = new Item();
            SomeEvent += new EventHandler(i.Handler);
        }
    }
}

public class Item
{
    public void Handler(object sender, EventArgs e)
    {
        ...
    }
}


И никаких циклических ссылок.
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[4]: Там с сылочкой проблема
От: degor Россия  
Дата: 28.07.04 14:37
Оценка:
AVK>Ты еще помнишь первоначальный вопрос?
AVK>

D>>А циклические/перекрестные ссылки все-таки зло. И в системах c GC с ними можно огрести проблем.

AVK>Каких?


AVK>Итак, я по прежнему хочу услышать какие проблемы можно огрести в системах с GC от циклических/перекрестных ссылок.


Строго говоря, все проблемы с ссылками, в том числе перекрестными, возникают от неаккуратного проектирования/программирования.

Проблема перекрестных ссылок в том, что неопределен порядок удаления объектов. Если они захотят сделать что-то друг с другом перед смертью не факт, что это не окончится exception'ом. Но это больше теоретическая возможность, чем практическая.

D>> Если объект забыл отписаться от ивента, то он таки должен подвиснуть, пока источник событий не сдохнет. Или я не прав?


D>>PS Мне действительно интресно это знать.


AVK>Именно так. А где здесь проблема? Если ты записываешь объект в контейнер то он не сдохнет пока не сдохнет контейнер. Делегат это тот же контейнер. В том примере проблема была из-за того что событие было у синглтона, а на него подписывались регулярно обновляемые сущности. И проблема там была не совсем с GC, а с неконтролируемым ростом числа подписчиков. С GC как раз проблему решить можно.


А, я так и думал.
... << RSDN@Home 1.1.3 stable >>
Re[13]: преимущества неуправляемого С++
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.04 14:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Там связь была только в одну сторону — от сингтона к форуму. Связи от форума к синглтону нет. Следовательно нет никакой циклической ссылки.


Привет. Сингл-тон постоянно доступен через статическое свойство, так что считай что связь есть постоянно. Да и не в этом дело. Дело и менно в том, что грабли похожие. Просто встречаются намного реже. Забавно, что именно приколы с синглтонами нас допекали три года назда на КОМ-е. Тоже вроде бы все хокей, но про бессмертность синглтона забываешь.

Тут тоже самое. Глядишь... в объекте никаких анменеджед-ресурсов. Что ему за зня диспоз городить? Ан нет тебе. С неявными ссылками нужно боросться. Я грешным делом думл, что события по умолчанию на виках сделаны.

Кстати, вики сами по себе средство борьбы с "проблемой которой нет".

AVK>Если непонятно то вот примерная модель того что там происходит:

Спасибо. Я эту багу сам делал.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Там с сылочкой проблема
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.04 14:48
Оценка:
Здравствуйте, degor, Вы писали:

D>Проблема перекрестных ссылок в том, что неопределен порядок удаления объектов. Если они захотят сделать что-то друг с другом перед смертью не факт, что это не окончится exception'ом. Но это больше теоретическая возможность, чем практическая.


На практике с этим проблем нет. Да и с те ми же событиями один раз за два года вылезло. Сколько бы я такого на КОМ-е за тоже время словил бы?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Там с сылочкой проблема
От: degor Россия  
Дата: 28.07.04 14:53
Оценка:
D>>Проблема перекрестных ссылок в том, что неопределен порядок удаления объектов. Если они захотят сделать что-то друг с другом перед смертью не факт, что это не окончится exception'ом. Но это больше теоретическая возможность, чем практическая.

VD>На практике с этим проблем нет. Да и с те ми же событиями один раз за два года вылезло.

У опытных практиков, конечно.

VD>Сколько бы я такого на КОМ-е за тоже время словил бы?

Надо было больше практиковаться.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Там с сылочкой проблема
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.07.04 15:13
Оценка: +1
Здравствуйте, degor, Вы писали:

AVK>>Итак, я по прежнему хочу услышать какие проблемы можно огрести в системах с GC от циклических/перекрестных ссылок.


D>Строго говоря, все проблемы с ссылками, в том числе перекрестными, возникают от неаккуратного проектирования/программирования.


А при чем тут GC?

D>Проблема перекрестных ссылок в том, что неопределен порядок удаления объектов. Если они захотят сделать что-то друг с другом перед смертью не факт, что это не окончится exception'ом.


Нет такой проблемы. Все объекты с финализаторами не убираются сразу, а помещаются в finalization queue. После они отрабатывают (заметь, никто не убран) и лишь затем они уничтожаются, притом порядок уже абсолютно не важен.
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.