На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (33) « Первая ... 24 25 [26] 27 28 ...  32 33  ( Перейти к последнему сообщению )  
> trait + impl vs class , навеяно Rust'ом
    Цитата korvin @
    Я не знаю, что там в D, но D_KEY пишет о том, что плюсовый шаблон может иметь специализацию, отличную от обобщенного варианта (перегрузку, в некотором смысле), например:

    ExpandedWrap disabled
      template<typename T>
      int length(vector<T> xs) { return xs.size(); }
       
      template<>
      int length(vector<int> xs) { return 1234; }


    т.е. для разных типов функция length показывает разное поведение, что является ad-hoc полиморфизмом.

    ПП-функция же имеет всегда одинаковое поведение для любых типов.

    Тут у меня нет возражений. Если шаблон специализирован, то тут и правда специальный полиморфизм. Но а если шаблон не специализирован?
    ExpandedWrap disabled
      template<typename T>
      int length(T xs) { return xs.size(); }

    Это ПП или нет?
    Сообщение отредактировано: applegame -
      Цитата korvin @
      Цитата applegame @
      По D_KEY исчезают. alias и auto просто для удобства. Они роли не играют.

      Я не знаю, что там в D, но D_KEY пишет о том, что плюсовый шаблон может иметь специализацию, отличную от обобщенного варианта (перегрузку, в некотором смысле), например:

      ExpandedWrap disabled
        template<typename T>
        int length(vector<T> xs) { return xs.size(); }
         
        template<>
        int length(vector<int> xs) { return 1234; }


      т.е. для разных типов функция length показывает разное поведение, что является ad-hoc полиморфизмом.

      ПП-функция же имеет всегда одинаковое поведение для любых типов.

      Именно так.

      Добавлено
      Цитата applegame @
      Если шаблон специализирован, то тут и правда специальный полиморфизм.

      Специализировать его может любой желающий в любой момент времени. Т.е. сам механизм является средством специального полиморфизма.

      Добавлено
      Цитата applegame @
      Но а если шаблон не специализирован?

      А если не переопределение виртуальная функция? А если не переопределена дефолтная реализация функции в тайпклассе? Это неважно. Сам механизм остаётся средством специального полиморфизма во всех перечисленных случаях.
        Цитата applegame @
        Тут у меня нет возражений. Если шаблон специализирован, то тут и правда ad-hoc полиморфизм. Но а если шаблон не специализирован?

        А если метод не перекрывать, значит ли это, что он не перекрываем? Если публичный метод не вызывать нигде извне объекта, значит ли это, что он приватный?
          И именно тот факт, что шаблоны являются средством специального полиморфизма и мешает решить ту задачу на C++.

          Добавлено
          Меня, честно говоря, больше всего удивляет тут Rust. Возможно я чего-то не понимаю, но Rust должен справляться с этой задачей, не смотря на генерацию в реализации.
          Сообщение отредактировано: D_KEY -
            Обобщённый шаблон --- это как базовый класс с дефолтной реализацией методов. Ты можешь не наследоваться от него и не переопределять методы, но классом он быть не перестаёт и структурой от этого не становится.
              Цитата korvin @
              А если метод не перекрывать, значит ли это, что он не перекрываем?
              А сама возможность перекрыть метод говорит о том, что метод параметрически не полиморфный?
                Цитата applegame @
                А сама возможность перекрыть метод говорит о том, что метод параметрически не полиморфный?

                Это была параллельная аналогия.

                Утверждение "Обобщённый шаблон можно не перегружать, следовательно шаблоны --- это ПП." равносильно
                утверждению "Базовый класс можно не наследовать, следовательно классы --- это структуры."
                Сообщение отредактировано: korvin -
                  Цитата korvin @
                  Это была параллельная аналогия.
                  Ну а следует ли из того, что обобщенный шаблон можно перегружать, что он --- это не ПП?
                    Цитата applegame @
                    Ну а следует ли из того, что обобщенный шаблон можно перегружать, что он --- это не ПП?

                    :facepalm: что за демагогия? Следует ли из того, что шаблон можно перегружать, что Земля плоская?
                      Цитата korvin @
                      :facepalm: что за демагогия? Следует ли из того, что шаблон можно перегружать, что Земля плоская?
                      Я пытаюсь понять твое мнение. Задам вопрос по другому:
                      Может ли некий частный случай обобщенного шаблона считаться ПП?

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

                        Я вот твоего вопроса не понимаю. Есть механизм шаблонов. Он относится к механизмам специального полиморфизма.

                        Добавлено
                        Цитата applegame @
                        Например для того чтобы мой тип Foo мог участвовать в операциях сложения мне придется написать инстанс Num для Foo, в котором специализировать сложение для этого самомго Foo. Так?

                        Да, тайпклассы - это вид специального полиморфизма.
                        Сообщение отредактировано: D_KEY -
                          Цитата D_KEY @
                          Да, тайпклассы - это вид специального полиморфизма.
                          Тогда получается, что операция сложения в Хаскелле - параметрически не полиморфна? Или она становится не полиморфной как только я специализирую ее для определенного нового типа?
                            Цитата applegame @
                            Цитата D_KEY @
                            Да, тайпклассы - это вид специального полиморфизма.
                            Тогда получается, что операция сложения в Хаскелле - параметрически не полиморфна? Или она становится не полиморфной как только я специализирую ее для определенного нового типа?

                            Да, это специальный полиморфизм. И не только в haskell, но и в C++, когда ты задаешь operator + для своего типа. Перегрузка функций - тоже специальный полиморфизм.
                              Цитата D_KEY @
                              Меня, честно говоря, больше всего удивляет тут Rust. Возможно я чего-то не понимаю, но Rust должен справляться с этой задачей, не смотря на генерацию в реализации.
                              Я думаю, генерация функций в этом деле не играет роли. Ведь важно проверить типы. И как это сделать не разворачивая рекурсию типов до упора?

                              Добавлено
                              Цитата D_KEY @
                              Да, это специальный полиморфизм. И не только в haskell, но и в C++, когда ты задаешь operator + для своего типа. Перегрузка функций - тоже специальный полиморфизм.
                              Дык я могу любую функцию в Haskell специализировать, не только сложение. И что эти функции от этого перестают быть параметрически полиморфными? Тогда не понятно, чем тебе мешает возможность специализировать шаблоны?

                              Добавлено
                              Хотя нет не любую. Только те, которые в тайп-классах.

                              Добавлено
                              Цитата D_KEY @
                              Перегрузка функций - тоже специальный полиморфизм.
                              Это очевидно. Так же как и виртуальные функции.
                              Сообщение отредактировано: applegame -
                                Цитата applegame @
                                Я пытаюсь понять твое мнение. Задам вопрос по другому:
                                Может ли некий частный случай обобщенного шаблона считаться ПП?

                                Слово "частный" уже отвечает на вопрос.

                                Моё мнение --- шаблоны являются средством обобщённого программирования, но это другой механизм, нежели ПП.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (33) « Первая ... 24 25 [26] 27 28 ...  32 33


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0788 ]   [ 15 queries used ]   [ Generated: 20.07.25, 22:53 GMT ]