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

      а ты не видишь, что нет? =) впрочем, я посмотрел трейты в Racket, там они несколько отличаются от того, что ты мне показал на C++. а так же от тайпклассов.
        Цитата korvin @
        Цитата D_KEY @
        Ты уже объяснил мне разницу с тайпклассами?

        а ты не видишь, что нет? =) впрочем, я посмотрел трейты в Racket, там они несколько отличаются от того, что ты мне показал на C++. а так же от тайпклассов.

        С++ отличается как всегда своей терминологией(правда я подозреваю, что данный прием в С++ появился раньше остальных trait'ов). И заметь, в С++ это не языковое средство, а идиома.
          Цитата D_KEY @
          korvin, это пример чего-то другого.

          это пример того, что ты мне показывал на С++:
          Цитата

          ExpandedWrap disabled
            struct MyPoint
            {
                int x;
                int y;
                Color color;
            };
             
            template<>
            struct PointTraits<MyPoint>
            {
                static int getX(const MyPoint &p)
                {
                    return p.x;
                }
             
                static int getY(const MyPoint &p)
                {
                    return p.y;
                }
            };
             
            template<>
            struct ColoredTraits<MyPoint>
            {
                static Color getColor(const MyPoint &p)
                {
                    return p.color;
                }
            };

          ...
          ExpandedWrap disabled
            template<typename T>
            int f(const T &point)
            {
                return PointTraits<T>::getX(point);
            }



          Добавлено
          Цитата D_KEY @
          С++ отличается как всегда своей терминологией(правда я подозреваю, что данный прием в С++ появился раньше остальных trait'ов). И заметь, в С++ это не языковое средство, а идиома.

          в Racket это тоже идиома, но ее можно завернуть (и завернули) в макрос и удобно использовать без кучи синтаксического мусора =)
            Вот есть я - обычный тёмный человек, мало что понимающий в программировании и разработки ПО. Вот кто-нибудь, объясните мне: вот эта штука с сильной связью наследованием в языке с одиночным наследованием и переносом всего в run-time и в самом деле является аналогом того, что в C++ называется traits?
              Цитата MyNameIsIgor @
              Вот есть я - обычный тёмный человек, мало что понимающий в программировании и разработки ПО. Вот кто-нибудь, объясните мне: вот эта штука с сильной связью наследованием в языке с одиночным наследованием и переносом всего в run-time и в самом деле является аналогом того, что в C++ называется traits?

              где ты увидел рантайм? напомню, что перегрузка функций разруливается во время компиляции. впрочем это не имеет значения.
              не знаю как в Scala, но в Racket (и видимо много где еще) трейты -- это примеси, которые могут содержать методы.

              собственно термин видимо пошел из языка Self, поэтому не думаю, что то, "что в С++ называется traits", где-то используется (если оно отличается от Self'ийских трейтов)
                Цитата korvin @
                где ты увидел рантайм? напомню, что перегрузка функций разруливается во время компиляции.

                Ах, да, обознался. Просто я не подумал, что кто-то будет извращаться наследованием, чтобы получить перегруженные методы - ну, программирование не мой конёк.
                Цитата korvin @
                собственно термин видимо пошел из языка Self, поэтому не думаю, что то, "что в С++ называется traits", где-то используется (если оно отличается от Self'ийских трейтов)

                Можно выразить всем (кроме D) соболезнование... Хотя, наверняка я опять чота нипанимайу... :'(
                Сообщение отредактировано: MyNameIsIgor -
                  Цитата korvin @
                  Цитата D_KEY @
                  korvin, это пример чего-то другого.

                  это пример того, что ты мне показывал на С++

                  А т.к. на С++ тебе показали аналог того, что ты показал на Haskell с тайпклассами, то можно сделать вывод, что этот пример на ява является примером тайпклассов?

                  Цитата
                  в Racket это тоже идиома, но ее можно завернуть (и завернули) в макрос и удобно использовать без кучи синтаксического мусора =)

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

                    в чем извращение-то? нормальный способ расширения функциональности, хочешь, используешь функции из Bar, хочешь -- из Buz. а как бы ты сделал, если бы тебе Bar.exec(Foo) нужно было бы переопределить?
                      Цитата korvin @
                      собственно термин видимо пошел из языка Self, поэтому не думаю, что то, "что в С++ называется traits", где-то используется (если оно отличается от Self'ийских трейтов)

                      То, что используется в С++, называется Traits class и не имеет отношения к ООП(в отличие от trait'ов). Это прием обобщенного программирования. Во многих других языках не используется в виду слабых возможностях по поддержке этого самого обобщенного программирования. В D используется же.
                      Сообщение отредактировано: D_KEY -
                        Цитата korvin @
                        а как бы ты сделал, если бы тебе Bar.exec(Foo) нужно было бы переопределить?

                        Я снова нипанимайу :'( :wall: Как мы плавно перешли от перегрузки к переопределению?
                        И да, мне не надо ни то, ни другое. Я думал увидеть на джаве плюсовые traits'ы, потому как мои знания не позволяют мне это сделать...
                          Цитата D_KEY @
                          А т.к. на С++ тебе показали аналог того, что ты показал на Haskell с тайпклассами, то можно сделать вывод, что этот пример на ява является примером тайпклассов?

                          нет, нельзя, этот пример повторяет функциональность твоего примера на C++, но не обладает некоторыми свойствами тайпклассов и шаблонов

                          Цитата D_KEY @
                          Хм. А где в примере на С++ синтаксический мусор?

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

                          Добавлено
                          Цитата MyNameIsIgor @
                          Я снова нипанимайу :'( :wall: Как мы плавно перешли от перегрузки к переопределению?
                          И да, мне не надо ни то, ни другое. Я думал увидеть на джаве плюсовые traits'ы, потому как мои знания не позволяют мне это сделать...

                          а чем тебе мой пример не нравится? все то же самое, что и D_KEY показывал, с одной поправкой, впрочем связанной с особенностью дженериков.
                            Цитата korvin @
                            Цитата D_KEY @
                            А т.к. на С++ тебе показали аналог того, что ты показал на Haskell с тайпклассами, то можно сделать вывод, что этот пример на ява является примером тайпклассов?

                            нет, нельзя, этот пример повторяет функциональность твоего примера на C++, но не обладает некоторыми свойствами тайпклассов и шаблонов

                            Это не мой пример, а твой пример на тайпклассы. Мой код на С++ полностью повторяет функциональность твоего на Haskell, твой на Яве полностью повторяет мой на С++, следовательно, твой на Яве полностью повторяет функциональность твоего же примера на Haskell. Или тут какая-то своя логика должна быть задействована ;) ?
                              Цитата D_KEY @
                              То, что используется в С++, называется Traits class и не имеет отношения к ООП(в отличие от trait'ов). Это прием обобщенного программирования. Во многих других языках не используется в виду слабых возможностях по поддержке этого самого обобщенного программирования. В D используется же.

                              уу... и только-то. но я бы сказал "в других языках не используется в виду отсутсвия необходимости" =)
                                Цитата korvin @
                                ну так и трейтов там нет, просто перегрузка функций, да шаблоны

                                Там показан прием на использования классов-характеристик, который в С++ иногда сокращенно называют просто traits, а не traits class. С чего ты решил приплести сюда ОО-trait'ы мне не понятно.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 366 367 [368] 369 370 ...  494 495


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