На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (56) « Первая ... 40 41 [42] 43 44 ...  55 56  ( Перейти к последнему сообщению )  
> D vs C++ , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
    Цитата OpenGL @
    А если у тебя в захвате переменная, содержащая данные в куче - она не скопируется что ли?
    У них же классы представлены ссылочной семантикой. Бред, конечно, но они привыкли. Пусть порадуются, чё.
      Цитата D_KEY @
      Показывай тесты производительности и расхода памяти. Чего зря болтаешь? :D
      Ну разве что синтетику какую-нибудь попробовать.
      Цитата OpenGL @
      Не понял. А если у тебя в захвате переменная, содержащая данные в куче - она не скопируется что ли?
      Скопируется при создании лямбды, а при копировании этой лямбды (например при передаче в функцию или сохранении в переменной) замыкания копироваться не будут. А разве должны?
      Цитата JoeUser @
      Я вот задумался :-? Рано или поздно "новый" GCC (с поддержкой DLang) перекочует в mingw32. Сейчас в библиотеках runtime и phobos есть ошибки, приводящие к невозможности кросс-компиляции. На сколько я правильно разобрался - ошибки из-за неверно расставленных условий компиляции (нет понятия "целевой платформы", есть понятие используемой платформы, т.е. где компилируем/собираем - та и цель). Вопрос ... ну и кто будет (и вообще будет ли) разбираться с этой проблемой?
      Вероятнее всего мейнтейнер GDC. Ты можешь попробовать спросить у него самого по поводу этой проблемы, а то и помочь с ней. Кстати, можно под линем компилять код для вянды через wine, говорят все работаэ. :crazy:
      Цитата Qraizer @
      У них же классы представлены ссылочной семантикой. Бред, конечно, но они привыкли.
      Не забывай, что "у них" есть еще структуры, которые имеют семантику по значению.
      А в передаче классов по ссылке есть некий смысл. Не могу точно утверждать, но лично у меня создалось впечатление, что большая часть объектов в плюсах обычно передается при помощи указателей/ссылок или же сами являются обертками вокруг указателей.
      Но это немного не имеет отношения к обсуждаемой теме, так как лямбды в D это не класс, это встроенный в язык тип. Встроенность еще дает возможность компилятору проводить некоторые оптимизации, например в случае если время жизни переменных замыкания гарантированно больше, чем время жизни самой лямбды, то память не аллоцируется вообще, а просто передается указатель на стековый фрейм содержащий переменные замыкания.
      Сообщение отредактировано: applegame -
        Цитата applegame @
        А в передаче классов по ссылке есть некий смысл.
        Та не, речь не об этом. Речь о том, что переменная-объект всегда является ссылкой, так что любые присваивания просто копирую ссылку. При необходимости получить копию объекта это нужно заказать явно.
        Я не имею ничего против ссылочной семантики как таковой, но я категорически не приемлю смешанную семантику, когда в языке одни типы ссылочные, другие значения.
          Цитата Qraizer @
          Я не имею ничего против ссылочной семантики как таковой, но я категорически не приемлю смешанную семантику, когда в языке одни типы ссылочные, другие значения.
          Ну это тема отдельного холивора. Хотя как раз вот тут-то лично я склонен с тобой согласиться. Конечно не столь категорично, но таки мне не нравится эта особенность D. Но как показывает практика - не мешает. То есть раздражение чисто академическое.
          Сообщение отредактировано: applegame -
            Это мешает обобщённого коду, заставляя применять метакод с ветвлениями по свойствам типа. Кроме того, винегрет в Дельфи со строками заставляет серьёзно задуматься о том, чтобы категоричность-таки была, просто во избежание прецедентов.
              Цитата Qraizer @
              Это мешает обобщённого коду, заставляя применять метакод с ветвлениями по свойствам типа.
              Как именно? Я не наблюдал никаких помех. Пример если можно.
              Цитата Qraizer @
              Кроме того, винегрет в Дельфи со строками заставляет серьёзно задуматься о том, чтобы категоричность-таки была, просто во избежание прецедентов.
              Не готов говорить о Дельфи. D - не Дельфи.
                Та обсуждалось уже мульён раз. Типичный пример: тебе нужна локальная копия объекта, и толи = писать, то ли .clone() заранее ты знать не можешь. Для объектов классов = не сделает тебе копию, в результате модификации будут отражены на оригинале, для объектов неклассов .clone() просто провалится.

                Добавлено
                Цитата applegame @
                Не готов говорить о Дельфи. D - не Дельфи.
                За D я тут и не говорю. Говорю за Дельфи. У них там хренова туча типов строк, какие-то объекты, какие-то не объекты, кто-то по сути POD, кто-то объект с состоянием, кто-то сам собой владеет и подсчитывает свои экземпляры, за кем-то надо следить самому, иначе утекут ресурсы, кому-то явно нужно командовать подсчитывать, кому-то если скомандуешь, расфигачишь пол-программы неопределённым поведением. Та ну их нахрен.
                  Цитата Qraizer @
                  Та обсуждалось уже мульён раз. Типичный пример: тебе нужна локальная копия объекта, и толи = писать, то ли .clone() заранее ты знать не можешь. Для объектов классов = не сделает тебе копию, в результате модификации будут отражены на оригинале, для объектов неклассов .clone() просто провалится.
                  Дак в плюсах тоже самое: для указателей нужно вызывать clone, а для неуказателей =. Можно представить, что класс D это что-то вроде shared_ptr.
                  Сообщение отредактировано: applegame -
                    Цитата applegame @
                    Дак в плюсах тоже самое: для указателей нужно вызывать clone, а для неуказателей =.

                    Зачем? :)

                    ExpandedWrap disabled
                      template<typename T>
                      void foo(const T & x)
                      {
                          T a = x;
                      }


                    В случае указателей ты получишь копию указателя. Все одинаково, какой бы тип не был.

                    Единственное, что не совсем логично в плюсах в плане типов - это ссылки.

                    Добавлено
                    Неужели в D нельзя написать аналог такого кода?
                      Цитата D_KEY @
                      Зачем?
                      В твоем примере не указатель, а ссылка.

                      Добавлено
                      Цитата D_KEY @
                      Неужели в D нельзя написать аналог такого кода?
                      Для классов нет. Для структур можно.
                        Цитата applegame @
                        Цитата D_KEY @
                        Зачем?
                        В твоем примере не указатель, а ссылка.

                        Мой пример будет работать для любого T, даже если этот T будет указателем.
                          Код аналогичный твоему:
                          ExpandedWrap disabled
                            void foo(T)(const ref T x) {
                              T t = x;
                            }

                          В случае указатели или класса будет сделана копия указателя / указателя на класс, в остальных случаях копия самого объекта.

                          Добавлено
                          Цитата D_KEY @
                          Мой пример будет работать для любого T, даже если этот T будет указателем.
                          Неправильно он будет работать, читай пост Qraizerа, он хочет именно копию объекта, а не копию укпзателя на него.
                          Сообщение отредактировано: applegame -
                            Цитата applegame @
                            Код аналогичный твоему:
                            ExpandedWrap disabled
                              void foo(T)(const ref T x) {
                                T t = x;
                              }

                            В случае указатели или класса будет сделана копия указателя / указателя на класс, в остальных случаях копия самого объекта.

                            Вот и появляются исключения на ровном месте. Для обобщенного кода куда проще, когда поведение одинаковое(концептуально).

                            Добавлено
                            Цитата applegame @
                            Непрпвильно он будет работать, читай пост Qraizerа, он хочет именно копию объекта, а не копию укпзателя на него.

                            Указатель - самостоятельный тип. И его значение будет скопировано. Как и для любого другого типа.
                              Цитата D_KEY @
                              Вот и появляются исключения на ровном месте. Для обобщенного кода куда проще, когда поведение одинаковое(концептуально).
                              Какие исключения? Мой код делает ровно тоже самое, что и твой.
                              Цитата D_KEY @
                              Указатель - самостоятельный тип. И его значение будет скопировано. Как и для любого другого типа.
                              И? Ты как-то влез в наш разговор не разобрпвшись о чем речь, Крайзер не хотел копию указателя, он хотел копию объекта, иначе зачем он clone() упомянул. И если ты хочешь некую обобщеную функцию придется метакодить, чтобы отличить указатель от значения.
                                Цитата applegame @
                                И? Ты как-то влез в наш разговор не разобрпвшись о чем речь

                                Думаю, что это ты неверно понял оппонента.

                                Цитата
                                Крайзер не хотел копию указателя, он хотел копию объекта

                                Ты C++ забыл? Указатель является самостоятельным типом и его объект содержит адрес.

                                Добавлено
                                В C++ у тебя везде семантика значений. В D одни типы обладают семантикой значений, а другие - ссылочные.

                                Добавлено
                                Цитата applegame @
                                Цитата D_KEY @
                                Вот и появляются исключения на ровном месте. Для обобщенного кода куда проще, когда поведение одинаковое(концептуально).
                                Какие исключения? Мой код делает ровно тоже самое, что и твой.

                                Мой код всегда создаёт копию значения типа T. Твой - нет.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) « Первая ... 40 41 [42] 43 44 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0720 ]   [ 15 queries used ]   [ Generated: 28.04.24, 17:05 GMT ]