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


    Цитата TAPL
    Специализированный полиморфизм (ad-hoc polymorphism), напротив, позволяет полиморфному значению демонстрировать различное поведение при его «рассмотрении» относительно разных типов. Самый обычный пример специализированного полиморфизмаперегрузка (overloading), когда один и тот же символ функции соответствует различным реализациям; компилятор (или система времени выполнения, взависимостиоттого,идетлиречьостатическом(static)или динамическом (dynamic) разрешении перегрузки) выбирает подходящую реализацию для каждого случая применения функции, исходя из типов ее аргументов.


    К какому из них относятся шаблоны?
    Сообщение отредактировано: D_KEY -
      Цитата D_KEY @
      К какому из них относятся шаблоны?
      Я же уже писал. Шаблоны слишком общее понятие. Ими можно городить и PP и ad-hoc.
        Цитата applegame @
        И того и другого.

        Они могут быть в одном языке, но они не могут обеспечиваться одним механизмом, т.к. противоположны.
          Попробую объяснить Qraizer'у на его языке: ты много радел за инварианты в споре с делфишниками, так вот

          length :: [a] -> Int

          -- это инвариант, функция length всегда должна правильно подсчитывать длину списка. А код

          ExpandedWrap disabled
            template<>
            int length(vector<int> xs) { return 0; }


          этот инвариант нарушает. ПП (в Хаскелле, Джаве и других ЯП) позволяют гарантировать этот инвариант (может я слово неправильно употребил, но, думаю, ты понял суть). В плюсах же шаблоны этой гарантии не дают.
            Цитата D_KEY @
            Они могут быть в одном языке, но они не могут обеспечиваться одним механизмом, т.к. противоположны.
            Я считаю так: если оно на уровне исходного кода одинаково для всех типов, то параметрическое, если разное, то специальное.
            Сообщение отредактировано: applegame -
              Цитата applegame @
              Ими можно городить и PP и ad-hoc.

              А не получается ли у тебя, что чуть ли не любой ad-hoc может выразить ПП?
                Цитата applegame @
                Я же уже писал. Шаблоны слишком общее понятие. Ими можно городить и PP и ad-hoc.

                Пока нельзя в хэдере написать сигнатуру, а в cpp-файле --- реализацию, скомпилировать его отдельно, и юзать эту функцию, это не ПП, а Сишые макросы (с некоторыми бонуами), не более.
                  Цитата applegame @
                  Цитата D_KEY @
                  Они могут быть в одном языке, но они не могут обеспечиваться одним механизмом, т.к. противоположны.
                  Я считаю так: если оно на уровне исходного кода одинаково для всех типов, то параметрическое, если разное, то специальное.

                  Но ведь в любой момент кто-то может специализировать тот или иной шаблон. Т.е. ты не можешь сказать, есть ли ПП в коде, пока весь его не рассмотришь и установить, есть ли специализация(или более сложные случаи разного поведения для разных типов)?
                    Цитата applegame @
                    Я считаю так: если оно на уровне исходного кода одинаково для всех типов, то параметрическое, если разное, то специальное.

                    В этом и проблема: исходный код никому не интересен. Суть древнего процедурного программирования в использовании процедуры без анализа её исходного кода, а ты предлагаешь вернуться в каменный век.
                      Цитата korvin @
                      это не ПП

                      Да, не ПП

                      Цитата
                      а Сишые макросы (с некоторыми бонуами), не более.

                      Нет :)
                        Цитата korvin @
                        Попробую объяснить Qraizer'у на его языке: ты много радел за инварианты в споре с делфишниками, так вот

                        length :: [a] -> Int

                        -- это инвариант, функция length всегда должна правильно подсчитывать длину списка.
                        Не понял вброса. Никакой это не инвариант. Это библиотечная функция в Prelude. Вот полюбуйся:
                        http://ideone.com/UtXgp5

                        Добавлено
                        Цитата korvin @
                        Пока нельзя в хэдере написать сигнатуру, а в cpp-файле --- реализацию, скомпилировать его отдельно, и юзать эту функцию, это не ПП, а Сишые макросы (с некоторыми бонуами), не более.
                        То есть в ML нет ПП. Так и запишем.

                        Добавлено
                        Цитата korvin @
                        В этом и проблема: исходный код никому не интересен.
                        Ну тогда у нас везде ad-hoc по определению. x86 процессоры пока не научились одним и тем же кодом складывать float и int.
                          Шаблоны представляют собой тесно интегрированный в язык механизм генерации кода, с возможностью задания дефолтной реализации и возможностью специализировать своё поведение для того или иного набора параметров(или части параметров и т.п.). Где тут параметрический полиморфизм? Ad-hoc. И только.
                            Цитата D_KEY @
                            Шаблоны представляют собой тесно интегрированный в язык механизм генерации кода, с возможностью задания дефолтной реализации и возможностью специализировать своё поведение для того или иного набора параметров(или части параметров и т.п.)
                            Да.
                            Цитата D_KEY @
                            Где тут параметрический полиморфизм? Ad-hoc. И только.
                            PP by ad-hoc, да. Так тоже бывает. Например в ML.
                            Сообщение отредактировано: applegame -
                              Цитата applegame @
                              Не понял вброса. Никакой это не инвариант. Это библиотечная функция в Prelude. Вот полюбуйся:
                              http://ideone.com/UtXgp5

                              То есть в ML нет ПП. Так и запишем.

                              Самый, что ни на есть, прямой. Результат функции length никак не зависит от типа элементов списка, в отличие от. Ты просто убрал стандартную функцию length. Твоя будет выдавать 0 для _любого_ списка, пусть в нм хоть Int будет, хоть Double, хоть String. Ты не можешь определить в одном модуле две length для разных типов в рамках ПП.

                              Лолшто? В ML сигнатуры более чем отделены от реализации. Я уж не говорю про параметризуемые модули(функторы).
                                Цитата applegame @
                                Цитата D_KEY @
                                Где тут параметрический полиморфизм? Ad-hoc. И только.
                                PP by ad-hoc, да. Так тоже бывает. Например в ML.

                                В ml нельзя специализировать. Там ПП, потому что есть однородность(см. выше цитаты из TAPL).
                                Сообщение отредактировано: D_KEY -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0747 ]   [ 15 queries used ]   [ Generated: 9.05.24, 03:04 GMT ]