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

    У меня даже опера месяцами не закрывается на работе :)
      Цитата D_KEY @
      Как это? RAII успешно справляется. Я же уже неоднократно писал об этом. Питоновские менеджеры контекста, шарповые using'и, новый явовский "try с ресурсами". И зачем в таком случае finally?

      Синтаксический сахар над try-finally. Для удобства. Но сути это не меняет.

      Добавлено
      Цитата IL_Agent @
      http://msdn.microsoft.com/ru-ru/library/system.object.finalize.aspx
      Цитата
      Во время завершения работы домена приложения Finalize вызывается автоматически для объектов, которые не исключены из финализации, даже для тех, которые остаются доступными.

      Т.е. при закрытии приложения/выгрузке сборки оно таки будет вызвано.

      Майкрософтовский GC дергает каждый объект? О ужас...

      Добавлено
      D_KEY, т.е. ты придираешься к конкретному синтаксису try-finally, я же говорю о его назначении -- явным образом инициировать высвобождение конкретных ресурсов (в противовес автоматическому их высвобождению при уничтожении объекта).
        Цитата korvin @
        D_KEY, т.е. ты придираешься к конкретному синтаксису try-finally, я же говорю о его назначении -- явным образом инициировать высвобождение конкретных ресурсов (в противовес автоматическому их высвобождению при уничтожении объекта).

        А как тогда расценивать мой код? Это явное инициирование высвобождения, суть сахароза, или всё же автоматическое высвобождение при уничтожении, суть опора на детерминированный вызов деструкторов?
        Этот вопрос стал бы ещё важнее, будь в плюсах макросы по типу Nemerle - тогда было бы полное ощущение сахара.
          Цитата MyNameIsIgor @
          А как тогда расценивать мой код? Это явное инициирование высвобождения, суть сахароза, или всё же автоматическое высвобождение при уничтожении, суть опора на детерминированный вызов деструкторов?

          Так а почему ты не написал подобие locker'а, который уничтожался бы автоматически и освобождал ресурс?
            Цитата korvin @
            Так а почему ты не написал подобие locker'а, который уничтожался бы автоматически и освобождал ресурс?

            Чтобы показать аналог кода на Go.
              Цитата MyNameIsIgor @
              Чтобы показать аналог кода на Go.

              И только? Тогда это просто пример, что "так можно", не более. А так да, это ручная инициализация освобождения ресурсов и в C++ видимо не нужно. Или есть случаи, когда иначе никак?
                Цитата korvin @
                И только? Тогда это просто пример, что "так можно", не более.

                Это пример того, что так писать на плюсах можно - без написания локеров.
                Цитата korvin @
                Или есть случаи, когда иначе никак?

                Да вроде всегда можно написать владельца ресурса...
                  Ну дык... и нафик тогда? Не думаю, что реализация классов-владельцев будет занимать больше места, чем Defer'ов, зато код, где они используются будет меньше захламлен.
                    Цитата korvin @
                    Не думаю, что реализация классов-владельцев будет занимать больше места, чем Defer'ов

                    Как раз наоборот. Такой defer пишется один раз на все случаи жизни...
                      Цитата korvin @
                      D_KEY, т.е. ты придираешься к конкретному синтаксису try-finally, я же говорю о его назначении -- явным образом инициировать высвобождение конкретных ресурсов (в противовес автоматическому их высвобождению при уничтожении объекта).

                      Так это ты зациклился на синтаксисе. Вышеперечисленные средства не просто синтаксический сахар, это как раз смена "парадигмы" с "явного делания чего-то при выходе" на "захват ресурса и автоматическое его освобождение". И костыль в виде finally можно выпиливать.
                      А что он делает в Delphi без GC - вообще не понятно :crazy:
                        Цитата Flex Ferrum @
                        А ещё лучше - &str[0], и не надо никаких кастов.
                        Во-во-во. Чё-то меня в спешке взгючило.
                        Цитата Flex Ferrum @
                        Ага. В несознанке, видимо, писали. Потому что дальше операция [] также определяется через итераторы.
                        Та не. Это всё std::vector<bool> виноват. Скорее для вектора надо было бы через итераторы.

                        Добавлено
                        Цитата D_KEY @
                        У меня даже опера месяцами не закрывается на работе
                        На предмет "пары недель", а не "месяцев" у меня тоже есть опыт. Каждая активизация окна Оперы - минутные тормоза из-за свопа, а её в конце-концов завершение - ещё более длительные тормоза на очистку ресурсов и завершение процесса, хотя да, окошко пропадает сразу.
                          Цитата D_KEY @
                          Так это ты зациклился на синтаксисе. Вышеперечисленные средства не просто синтаксический сахар, это как раз смена "парадигмы" с "явного делания чего-то при выходе" на "захват ресурса и автоматическое его освобождение". И костыль в виде finally можно выпиливать.
                          А что он делает в Delphi без GC - вообще не понятно :crazy:

                          О! Синтаксический сахар у нас теперь называется парадигмой? Я тут на ЛОРе задал вопрос про переопределение методов, вот товарищ привел пример на Питоне:
                          ExpandedWrap disabled
                             from contextlib import contextmanager
                             
                            @contextmanager
                            def override(obj, **kwargs):
                                oldvalues = dict((attr, getattr(obj, attr)) for attr in kwargs)
                             
                                for attr, value in kwargs.iteritems():
                                    setattr(obj, attr, value)from contextlib import contextmanager
                             
                            @contextmanager
                            def override(obj, **kwargs):
                                oldvalues = dict((attr, getattr(obj, attr)) for attr in kwargs)
                             
                                for attr, value in kwargs.iteritems():
                                    setattr(obj, attr, value)
                             
                                try:
                                    yield
                                finally:
                                    for attr, value in oldvalues.iteritems():
                                        setattr(obj, attr, value)
                             
                             
                            class A(object):
                                def id(self):
                                    return 0
                             
                             
                            a1 = A()
                            a2 = A()
                             
                            with override(A, id=lambda self: 1):
                                assert (a1.id(), a2.id()) == (1, 1)
                             
                            assert (a1.id(), a2.id()) == (0, 0)
                             
                             
                            with override(a1, id=lambda: 2):
                                assert a1.id() == 2
                             
                            assert a1.id() == 0
                             
                                try:
                                    yield
                                finally:
                                    for attr, value in oldvalues.iteritems():
                                        setattr(obj, attr, value)
                             
                             
                            class A(object):
                                def id(self):
                                    return 0
                             
                             
                            a1 = A()
                            a2 = A()
                             
                            with override(A, id=lambda self: 1):
                                assert (a1.id(), a2.id()) == (1, 1)
                             
                            assert (a1.id(), a2.id()) == (0, 0)
                             
                             
                            with override(a1, id=lambda: 2):
                                assert a1.id() == 2
                             
                            assert a1.id() == 0

                          И что же мы видим? Оказывается, что Менеджер Контекста всего-навсего обычная обертка над try-finally, прям как в CL с 80-х годов...
                            Цитата korvin @
                            Менеджер Контекста всего-навсего обычная обертка над try-finally

                            Потому что был введён в язык, где уже был finally. А если бы finally не было?
                              Цитата korvin @
                              О! Синтаксический сахар у нас теперь называется парадигмой?

                              Синтаксический сахар - это один из способов обеспечения удобного использования парадигмы. То, что with в питоне сейчас реализован именно так, не является его семантическим свойством. Выпили finally из python 4, реализуй with иначе, но с сохранением той же семантики, и он перестанет быть синтаксическаим сахаром.
                                Цитата D_KEY @
                                Так это ты зациклился на синтаксисе. Вышеперечисленные средства не просто синтаксический сахар, это как раз смена "парадигмы" с "явного делания чего-то при выходе" на "захват ресурса и автоматическое его освобождение". И костыль в виде finally можно выпиливать.

                                Да?
                                А для нетривиальных ситуаций разве не нужно расставлять локальные блоки { ... } (а-ля try ... finally)? ;)
                                А на нетривиальную деинициализацию не нужно ничего биндить (а-ля finally ... end)? ;)
                                Те же уши только в профиль, ну и о каких костылях ты говоришь?

                                Добавлено
                                Если я правильно понял, то идиома Scope Guard из C++ - как раз тот костыль try-finally из Delphi.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 396 397 [398] 399 400 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5431 ]   [ 15 queries used ]   [ Generated: 30.07.26, 07:07 GMT ]