На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 401 402 [403] 404 405 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    D_KEY, я то читал, и ещё раньше.
    Только эти слова в ступор вводят - нах... finally? Ну, и да
    Цитата D_KEY @
    не ясно, зачем это делать встроенным средством, а не через RAII + лямбды + "макросы".
      Цитата MyNameIsIgor @
      Только эти слова в ступор вводят - нах... finally?

      Возможно, что для понижения порога вхождения. Вот Delphi'ец захочет на D посмотреть, не найдет там своих finally и уйдет, хлопнув дверью :) А тут начнет писать с finally, а постепенно проникнется идеями RAII и scope.
      Сообщение отредактировано: D_KEY -
        У меня вопрос к программистам, в основном, на языках с GC и на Delphi(который хоть и без GC, но часто ведет себя так, как будь-то у него этот самый GC есть). Как вы обычно работаете с ресурсами, у которых может быть несколько владельцев? Скажем, есть у вас сетевое соединение, которое используется несколькими объектами и которое должно быть закрыто тогда, когда ни одному из объектов оно больше не нужно. Тут даже with/using/try-with-resources будет недостаточно.
          Логично предположить, что счётчиком. :jokingly:
            Цитата D_KEY @
            У меня вопрос к программистам, в основном, на языках с GC и на Delphi(который хоть и без GC, но часто ведет себя так, как будь-то у него этот самый GC есть). Как вы обычно работаете с ресурсами, у которых может быть несколько владельцев? Скажем, есть у вас сетевое соединение, которое используется несколькими объектами и которое должно быть закрыто тогда, когда ни одному из объектов оно больше не нужно.

            Почему они владельцы, а не клиенты?
              Цитата korvin @
              Цитата D_KEY @
              У меня вопрос к программистам, в основном, на языках с GC и на Delphi(который хоть и без GC, но часто ведет себя так, как будь-то у него этот самый GC есть). Как вы обычно работаете с ресурсами, у которых может быть несколько владельцев? Скажем, есть у вас сетевое соединение, которое используется несколькими объектами и которое должно быть закрыто тогда, когда ни одному из объектов оно больше не нужно.

              Почему они владельцы, а не клиенты?

              Называй как хочешь :) Главное, что соединение должно быть живо, пока к нему обращается хоть один "клиент" и оно должно умереть, как только оно больше никем не востребовано.
                Для этого делается целое специальное устройство-библиотека пуля, прикрытое обычно фабрикой.
                  Цитата Машина @
                  Для этого делается целое специальное устройство-библиотека пуля, прикрытое обычно фабрикой.

                  Можно пример?
                  Если имеется в виду пул соединений, то это, во-первых, другая задача, а во-вторых, кто и когда "возвращает" соединение в пул?
                    Если другая задача, то я не понимаю, о чем вообще речь...
                      Цитата Машина @
                      Если другая задача, то я не понимаю, о чем вообще речь...

                      Ну мог бы тогда ответить на "во-вторых" ;)
                      А речь о том, что делать, если речь идет об освобождении ресурса, доступ к которому осуществляется из нескольких объектов. Некоторое сетевое соединение - лишь пример.
                      Вот как это будет на С++ без GC:
                      ExpandedWrap disabled
                        class Network_connection
                        {
                            /*...*/
                            ~Network_connection()
                            {
                                // закрывает соединение при уничтожении объекта
                            }
                        };
                         
                        class Some_class1
                        {
                            /*...*/
                        private:
                            shared_ptr<Network_connection> connection;
                        };
                         
                        class Some_class2
                        {
                            /*...*/
                        private:
                            shared_ptr<Network_connection> connection;
                        };
                         
                        // ...
                         
                        // Множество объектов классов Some_class1 и Some_class2,
                        // а также другие классы и обычные функции,
                        // могут использовать один объект Network_connection,
                        // как только таких пользователей не останется, объект будет удален
                        // и соединение будет закрыто


                      Т.е. подсчет ссылок, конечно, хуже GC, но он позволяет грамотно управлять ресурсами(не только памятью). Мне интересно, есть ли какой-то прием, который обычно используют в языках с GC? with/using/try-with-resources/etc. позволяют автоматически управлять ресурсами в пределах одного метода/функции, но что делать в более общем случае?
                        Цитата D_KEY @
                        А речь о том, что делать, если речь идет об освобождении ресурса, доступ к которому осуществляется из нескольких объектов.
                        Дык тоже чего нить с подсчётом соединений. Правда какой нить join и detach руками придётся дёргать, в detach при обнулении счётчика рвать соединение. Хотя хз, может есть чего и получше.
                          Цитата D_KEY @
                          Вот как это будет на С++ без GC:

                          Я совсем не понял приведенного примера... Покажи как ты будешь использовать Some_class1 и Some_class2(я догадываюсь как, но там возникают тоже некоторые вопросы)?

                          Добавлено
                          Кстати с Новым Годом всех !!! :)
                            Цитата Повстанець @
                            Цитата D_KEY @
                            А речь о том, что делать, если речь идет об освобождении ресурса, доступ к которому осуществляется из нескольких объектов.
                            Дык тоже чего нить с подсчётом соединений. Правда какой нить join и detach руками придётся дёргать, в detach при обнулении счётчика рвать соединение. Хотя хз, может есть чего и получше.

                            Вот и спрашивается, есть ли. А если нет, то есть ли стандартные/пользовательские средства, вроде C++'ных shared_ptr? И насколько их просто сделать? И насколько просто будет использовать?
                            В Delphi, как я понимаю, заюзают интерфейсы, т.к. у них подсчет ссылок встроенный.

                            Добавлено
                            Цитата KILLER @
                            Цитата D_KEY @
                            Вот как это будет на С++ без GC:

                            Я совсем не понял приведенного примера... Покажи как ты будешь использовать Some_class1 и Some_class2(я догадываюсь как, но там возникают тоже некоторые вопросы)?

                            Да как угодно. Может им в конструкторе connection передается или через метод специальный - это не имеет значения.
                            А использовать так, например:
                            ExpandedWrap disabled
                              Some_class1 obj(my_connection);
                               
                              // ...
                               
                              shared_ptr<Some_class2> obj2 = make_shared<Some_class2>(my_connection);
                               
                              // ...
                               
                              Some_class2 obj3(obj.get_connection());
                               
                              // Или просто:
                               
                              shared_ptr<Network_connection> connection = my_connection;


                            В общем, это уже не важно...
                              Цитата D_KEY @
                              А использовать так, например:

                              ааа, я просто подумал что у тебя на каждое соединение свой Some_classN, что и ввело меня в ступор...

                              Добавлено
                              Цитата D_KEY @
                              Вот и спрашивается, есть ли. А если нет, то есть ли стандартные/пользовательские средства, вроде C++'ных shared_ptr?

                              Да есть конечно, Deswer на предыдущих страницах продемонстрировал вроде как для делфи, или не? :scratch:
                              Сообщение отредактировано: KILLER -
                                Цитата KILLER @
                                Цитата D_KEY @
                                А использовать так, например:

                                ааа, я просто подумал что у тебя на каждое соединение свой Some_classN, что и ввело меня в ступор...

                                Добавлено
                                Цитата D_KEY @
                                Вот и спрашивается, есть ли. А если нет, то есть ли стандартные/пользовательские средства, вроде C++'ных shared_ptr?

                                Да есть конечно, Deswer на предыдущих страницах продемонстрировал вроде как для делфи, или не? :scratch:

                                Он демонстрировал как-то на интерфейсах, о чем я упомянул. Интересно, что там в Java/C#.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 401 402 [403] 404 405 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5247 ]   [ 14 queries used ]   [ Generated: 30.07.26, 05:09 GMT ]