На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (245) « Первая ... 242 243 [244] 245   ( Перейти к последнему сообщению )  
> Есть ли будущее у DELPHI?
    Цитата Shaggy @
    мне сказали, что конструкция
    make_shared<int>(42);
    выдаёт объект со счётчиком=1
    далее следует присвоение, и следовательно...

    ...счётчик равен 2, но потом временный объект, созданный функцией make_shared, умирает и тем самым уменьшает счётчик на 1, и остаётся только объект x со счётчиком 1.
    Цитата Shaggy @
    а без последней фразы ты не мог, это да... молодец чё

    Ну, вы бы тоже не смогли, если бы попрограммировали на других языках с подсчётом ссылок.
    Сообщение отредактировано: MyNameIsIgor -
      Цитата Shaggy @
      тогда не понял. т.е. не может существовать двух ссылок(сырая и shared), указывающих на один объект?

      Может, только обычно они являются внешними по отношению к объекту и его типу, а не встроены каким-либо образом в него. Мухи отдельно, котлеты отдельно.

      Цитата Shaggy @
      разжовываю: если ты используешь фреймворк, зачем лезть в обход?

      Фреймворки бывают разные и зачастую недостаточно гибкие. И тебе не кажется, что вопрос "зачем это делать?" --- это не ответ на вопрос "почему так делать --- дурной тон?" и уж тем более никак не катит на "разжевывание". Я бы еще понял, если бы ты привел пример, когда ручной доступ к БД параллельно с фреймворком, скажем, нарушает целостность данных в БД.

      Цитата Shaggy @
      а если фреймворк - моветон, зачем ты его используешь?

      Я и не использую фреймворки.

      Цитата Shaggy @
      вот про это я и говорю: со своим уставом в чужой монастырь...

      С этим никто не спорит, но из-за такого устава монастыря ходить в него совсем не хочется, а приходится иногда.

      Да и самому монастырю следовало бы понять, что он таки не один на Земле и далеко не ее пуп. Конкуренция, да.

      Цитата Shaggy @
      если ты учишь phyton, ты будешь возмущаться, что там не так как в С++?

      Большинство языков не подменяют чужие понятия своими. Если им хочется что-то сделать "не как у всех", они придумывают новые понятия, дабы не создавать путаницу.

      Например, делфисты любят рассказывать, какое Делфи "компонентно-ориентированное", вот и использовали бы вместо слова "interface" слово "component", хотя оно не совсем точно отражало бы суть, но зато без путаницы.
      Сообщение отредактировано: korvin -
        Цитата korvin @
        Указатели совсем вышли из моды? =)

        шикарное решение :lol:
        а если переписать так?
        ExpandedWrap disabled
          function Main:ICyclic;
          begin
           Result := TCyclic.Create('Foo');
           Result.SetLink(@Result);  // оопс!
           Result.GetLink^.PrintLn;
          end;

        т.е. корректность работы зависит от того где вызван SetLink, в или за Main
        Цитата MyNameIsIgor @
        ...счётчик равен 2, но потом временный объект, созданный функцией make_shared, умирает и тем самым уменьшает счётчик на 1, и остаётся только объект x со счётчиком 1.

        ээ... а с чего вдруг он умирает? за ов он ещё не вышел...

        и ещё(просто интересно), зачем нужна ещё одна прокладка(make_shared)? конструктора shared_ptr недостаточно?
          Цитата Shaggy @
          т.е. корректность работы зависит от того где вызван SetLink, в или за Main

          Как будто со слабыми ссылками будет по-другому...

          Добавлено
          Цитата Shaggy @

          т.е. корректность работы зависит от того где вызван SetLink, в или за Main

          Кстати говоря, ты можешь убрать вызов SetLink и посмотреть, что будет.

          Добавлено
          И еще можешь сделать так:

          ExpandedWrap disabled
            function Main: ICyclic;
            begin
              Result := TCyclic.Create('Foo');
              Result.SetLink(@Result);
              Result.PrintLn;
            end;
             
            procedure RealMain;
            begin
              Main;
            end;
             
            begin
              RealMain;
              ReadLn;
            end.


          Т.е. указатель тут как бы совсем не причем.
            korvin, да вроде ничего криминального.
            Напоминает
            ExpandedWrap disabled
              auto v = 1;
              auto r = new int(v);


            Добавлено
            Это я про limbo.
            Сообщение отредактировано: D_KEY -
              Цитата Shaggy @
              Qraizer, тебе я вижу, не понравилось? так может оставишь этот снисходительный, менторский тон и поговорим нормально, как взрослые люди?
              Троль не может нравится по определению. Тон у меня деловой, резкий, но не оскорбительный. Так что у нас разное представление определения "как взрослые люди".
              Цитата Shaggy @
              Цитата Qraizer @
              На предмет порога вхождения в Дельфи ответ будет?

              а какого ответа ты ждёшь? в чём этот порог измеряется? %, попугаи?
              От же ж. Порог не определяется количественно, он определяется прилагательными.
              Цитата Shaggy @
              Цитата Qraizer @
              У korvin-а пока получается лихо пороги переступать везде, кроме Дельфей

              ты считаешь это аргументом?
              Я считаю это пояснением к вопросу о пороге. Аргументом это можно рассматривать, если относиться к нему как факту. Но один факт ещё не статистика. Собственно за неимением оной вопрос о пороге и был задан, иначе было бы утверждение, а не вопрос. А вот дельфисты утверждают, а не спрашивают о, высокий уровень порога вхождения в Плюсы, и не только я вижу тут противоречие.
              Shaggy, мне в целом коллинеарно, что там хотел написать korvin, что вместо этого написал, и где в результате словил грабли. Поднятый мною вопрос поначалу касался только счётчика ссылок с бредовым начальным значением, затем бредового факта отсутствия владельца для этого счётчика, затем бреда о нормальности подхода к ручному допиливанию функционала, для избавления от которого этот функционал вообще-то и вводился, и только наконец -- воспринятия горы проблем из-за всего этого за нормальное проектное решение уровня архитектуры языка.
              Мне вот интересно, ну создала фабрика мне объект по интерфейсу на него, счётчик 0, тут бац! эксепшн. Никакого перехода 1→0 в принципе никогда не состоится. И как теперь? Но это ещё мелочи. Что говорят архитекторы самой COM не интересно почитать?
              Сообщение отредактировано: Qraizer -
                Цитата Shaggy @
                ээ... а с чего вдруг он умирает? за ов он ещё не вышел...

                "ов" - это область видимости? Она тут ни при чём (точнее, при чём, но распространяется на объект x), временные объекты живут до конца statement.
                Напомню, код мы обсуждаем вот такой
                ExpandedWrap disabled
                  auto x = make_shared<int>(42);

                Для пример, есть у нас функция, возвращающая экземпляр некоего типа T
                ExpandedWrap disabled
                  T foo() { return T(); }

                Если вызвать её вот так
                ExpandedWrap disabled
                  foo();

                то возвращённый объект сразу умрёт. Если так
                ExpandedWrap disabled
                  T t = foo();

                то возвращённый объект будет использован при создании объекта t, а потом так же умрёт.
                Цитата Shaggy @
                и ещё(просто интересно), зачем нужна ещё одна прокладка(make_shared)? конструктора shared_ptr недостаточно?

                Во-первых, это некоторый сахар - не надо два раза писать тип
                ExpandedWrap disabled
                  shared_ptr<MyType> p(new MyType(arg1, arg2, arg3));
                  auto p = make_shared<MyType>(arg1, arg2, arg3);

                Во-вторых, делает более лаконичными некоторые случаи при обеспечении безопасности относительно исключений.
                В-третьих, это небольшая оптимизация - память под счётчик и объект выделяется одним куском.
                  Цитата Shaggy @
                  а с чего вдруг он умирает? за ов он ещё не вышел...
                  Он временный. Безымянный. Время жизни таковых простирается (грубо говоря) до ближайшей ;.
                  Цитата Shaggy @
                  зачем нужна ещё одна прокладка(make_shared)? конструктора shared_ptr недостаточно?
                  Достаточно. Просто так удобнее.

                  Добавлено
                  А, ну вот MyNameIsIgor решил описать не грубо говоря.
                    Цитата korvin @
                    Может, только обычно они являются внешними по отношению к объекту и его типу, а не встроены каким-либо образом в него. Мухи отдельно, котлеты отдельно.

                    ???
                    Цитата korvin @
                    Я бы еще понял, если бы ты привел пример, когда ручной доступ к БД параллельно с фреймворком, скажем, нарушает целостность данных в БД.

                    достаточно того, что может нарушить
                    Цитата korvin @
                    Я и не использую фреймворки.

                    слишком конкретное мышление - болезнь программистов и юристов да :)
                    это была аналогия
                    Цитата korvin @
                    Да и самому монастырю следовало бы понять, что он таки не один на Земле и далеко не ее пуп. Конкуренция, да.

                    да, конкуренция. не используй, победи в конкурентной борьбе :)
                    такое впечаетление, что тебя заставляют писать на delphi. из-за него от тебя девушка ушла и вообще, жизнь под откос покатилась :)
                    Цитата korvin @
                    Большинство языков не подменяют чужие понятия своими.

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

                    код будет чище, без @ и ^
                    а так да
                    Цитата korvin @
                    Кстати говоря, ты можешь убрать вызов SetLink и посмотреть, что будет.

                    Цитата korvin @
                    Т.е. указатель тут как бы совсем не причем

                    для чистоты эксперимента замени writeln на OutputDebugString и смотри окно Event Log
                      Цитата D_KEY @
                      да вроде ничего криминального.

                      Ничего, только (внешне) это напоминает как раз
                      ExpandedWrap disabled
                        auto v = 1;
                        auto r = &v;


                      Цитата Shaggy @
                      ???

                      Что тут непонятного? Ссылка на объект в тех же плюсах, хоть сырая (сырой указатель), хоть умная --- это отдельный от основного объект. Ты не наследуешься от shared_ptr или любого другого *_ptr, а строишь свою иерархию как тебе удобно, хоть с интерфейсами, хоть без. А уже потом, когда дело доходит до создания, управления временем жизни объекта и использования, ты сам выбираешь где и как тебе поступить. Явным образом.

                      Цитата Shaggy @
                      что может нарушить

                      Да, таких фреймворков стоит избегать.

                      Цитата Shaggy @
                      слишком конкретное мышление - болезнь программистов

                      Здрасте, приехали. Вот так сюрприз. Значит зря в той же SICP рассказывается об абстракциях? Значит зря мы используем объектно-ориентированный, обобщенный и другие подходы к программированию? Да и вообще зря программируем, ведь это ничто иное как абстрагирование деталей реального мира в компьютерную модель.

                      Цитата Shaggy @
                      да, конкуренция. не используй, победи в конкурентной борьбе

                      Так практически никто и не использует, кроме ситуаций, указанных чуть ниже.

                      Цитата Shaggy @
                      такое впечаетление, что тебя заставляют писать на delphi

                      Отчасти так и есть. Legacy-софт, legacy-DBFки, тоже еще одно порождение воспаленного мозга.

                      Цитата Shaggy @
                      пример был взят с СОМ, чъё он порождение?

                      Майкрософт? И?

                      Цитата Shaggy @
                      ну и в качестве бонуса - хоть какой-то, но стандарт

                      Стандарт чего и где? Как это все связано с ЯП?
                        Цитата MyNameIsIgor @
                        временные объекты живут до конца statement.

                        вот. этого я незнал. спасибо
                        в delphi это не так(я про интерфейсы естественно)
                        объект будет жить до конца ов

                        Цитата Qraizer @
                        Троль не может нравится по определению.

                        спасибо доктор

                        Цитата Qraizer @
                        Тон у меня деловой, резкий, но не оскорбительный

                        намеренное коверканье названия компании-производителя, вероятно, является признаком деловитости
                        как и цель этого действа

                        Цитата Qraizer @
                        Так что у нас разное представление определения "как взрослые люди".

                        очевидно

                        Цитата Qraizer @
                        От же ж. Порог не определяется количественно, он определяется прилагательными

                        т.е. объективно не измеряется, а следовательно ценность ответа стремится к 0

                        Цитата Qraizer @
                        Мне вот интересно, ну создала фабрика мне объект по интерфейсу на него, счётчик 0, тут бац! эксепшн. Никакого перехода 1→0 в принципе никогда не состоится. И как теперь? Но это ещё мелочи. Что говорят архитекторы самой COM не интересно почитать?

                        вот об этом я и говорил, пишешь о том чего не понимаешь

                        Цитата Qraizer @
                        Мне вот интересно, ну создала фабрика мне объект по интерфейсу на него, счётчик 0, тут бац! эксепшн. Никакого перехода 1→0 в принципе никогда не состоится. И как теперь?

                        какая фабрика? по какому интерфейсу? что за ересь?
                        объект создаёт конструктор. всегда!
                        и не важно, реализует объект какие-либо интерфейсы или нет, есть у него счётчик или нет
                        пока это просто объект с ручным управлением временем жизни и работать с ним можно как с обычным объектом delphi, а в конце удалить, ручками
                        если эксепшн в конструкторе, вызовется деструктор
                        если после, то может быть утечка, если исключение не обработать
                        если объект реализует интерфейсы, у него есть служебные методы
                        если собирается вести подсчёт ссылок у него есть поле под счётчик =0(после того, как отработает конструктор), а служебные методы соответсвенно изменяют этот счётчик в ту или иную сторону
                        можно подёргать эти методы ручками(они в public), ни к какому автоматизму это не приведёт
                        и объекту насрать, есть переход 1->0 или нет
                        (это нормальное поведение, так и задумано!)

                        автоматизм начинается, когда мы запрашиваем у объекта интерфейс
                        появляется интерфейстная ссылка, а следовательно компилятор автоматически вызывает _addref, который в свою очередь увеличивает счётчик(но может делать что угодно, что напишете то и будет)
                        после этого про объектные ссылки нужно забыть и работать только через интерфейс(ниже дополнено)
                        т.е. по сути весь автоматизм заключается только в этом:
                        присваивание, передача параметром(при выходе из подпрограммы _release) - вызов _addref
                        присваивание nil, выход за ов - _release
                        т.е. не компилятор вызывает деструктор и следит за счётчиком, а в этих методах это реализовано(повторюсь, стандартная реализация, вы можете написать любую другую)

                        если подсчёт ссылок не реализован - > объект не будет удалён автоматически -> можно использовать разные ссылки
                        если реализован и вы пользуетесь объектной ссылкой при наличии интерфейсной - вы ходите по полю с граблями(надеюсь не надо пояснять почему?)

                        Цитата Qraizer @
                        Но это ещё мелочи. Что говорят архитекторы самой COM не интересно почитать?

                        читал
                        а ты? и понял? или нужны пояснения?
                          Цитата Shaggy @
                          для чистоты эксперимента замени writeln на OutputDebugString и смотри окно Event Log

                          Заменил, посмотрел. Что с указателем, что без, поведение одинаковое.
                            Цитата korvin @
                            Здрасте, приехали. Вот так сюрприз. Значит зря в той же SICP рассказывается об абстракциях? Значит зря мы используем объектно-ориентированный, обобщенный и другие подходы к программированию? Да и вообще зря программируем, ведь это ничто иное как абстрагирование деталей реального мира в компьютерную модель.

                            ну всё, тушите свет :lol:
                            ты подтвердил высказывание

                            пишу конкретно( :) ): фреймворк был аналогом интерфейсной ссылки, а действие в обход аналог объектной
                            Цитата korvin @
                            Майкрософт? И?

                            Имелось в виду: какой язык?
                              Цитата Shaggy @
                              фреймворк был аналогом интерфейсной ссылки, а действие в обход аналог объектной

                              Аналогии такие аналогии. Тогда тоже пишу конкретно: ни в одном нормальном фреймворке действие в обход него не приводит ни к каким граблям. А кривые фреймворки так и называют кривыми без выдавания граблей за фичи.

                              Цитата Shaggy @
                              какой язык?

                              C++? Еще раз: и? Как COM-интерфейсы связаны с ЯП-интерфейсами, которые существовали еще до COM, и в том же C++ ими назывались классы, имеющие только абстрактные методы (т.к. отдельное ключевое слово вводить не стали)?
                              Сообщение отредактировано: korvin -
                                Цитата korvin @
                                тут непонятного? Ссылка на объект в тех же плюсах, хоть сырая (сырой указатель), хоть умная --- это отдельный от основного объект.

                                так и у нас также
                                объект может узнать количество сслылок(если реализован подсчёт) и всё

                                Цитата korvin @
                                Ты не наследуешься от shared_ptr или любого другого *_ptr, а строишь свою иерархию как тебе удобно, хоть с интерфейсами, хоть без. А уже потом, когда дело доходит до создания, управления временем жизни объекта и использования, ты сам выбираешь где и как тебе поступить. Явным образом.

                                если ты про объекты, то интерфейс может быть реализован на любом уровне иерархии
                                привязки к TInterfacedObject нет(это просто готовая заготовка)

                                или ты про обязательную реализацию IInterface?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (245) « Первая ... 242 243 [244] 245 


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,2705 ]   [ 15 queries used ]   [ Generated: 1.06.25, 10:09 GMT ]