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

    ExpandedWrap disabled
      function f(a, b) { return a+b; }

    будет работать для кучи типов. В языках со статической типизацией возникнут проблемы.
    Не улавливаю хода вашей мысли. Поподробней пожалуйста.
    ExpandedWrap disabled
      auto foo(A, B)(A a, B b) { return a + b; }
    ЧЯДНТ?
    Цитата D_KEY @
    Я пытался объяснить разницу между параметрическим полиморфизмом уровня системы типов и параметрическим полиморфизмом на уровне кода(что мы наблюдаем в C++ и D).
    Ну, эту разнице объяснять не нужно, она понятна. Я просто не согласен, что она является определяющей для понятия ПП. Korvin похоже считает иначе.
    Цитата D_KEY @
    Но вывод там в том, что на C++ такую проверку сделать нельзя. И ведь действительно нельзя.
    Если бы там был такой вывод, то не было и того холивара. Там делается другой вывод: C++ - говно, C# и Java тоже говно, но менее вонючее, а Хаскель - няшка.
    Сообщение отредактировано: applegame -
      Цитата applegame @
      Кто-нибудь кроме тебя еще считает, что ПП это прерогатива языков исключительно со статической типизацией?

      Я считаю, что в языках с динамической типизацией параметрический полиморфизм бессмысленнен.
      Зачем он там нужен-то? Можешь пример привести?
        Цитата D_KEY @
        Я считаю, что в языках с динамической типизацией параметрический полиморфизм бессмысленнен.
        Зачем он там нужен-то? Можешь пример привести?
        Что значит бессмысленнен? Он там просто есть. Методы в Ruby всегда полиморфны по всем параметрам. И в жабаскрипте тоже. Еще раз читаем определение ПП, вдумчиво пожалуйста и ищем там хоть какое-то упоминание динамической/статической типизации, run-time или compile-time:
        Цитата Педивикия
        Параметрический полиморфизм позволяет определять функцию или тип данных обобщённо, так что значения обрабатываются идентично вне зависимости от их типа. Параметрически полиморфная функция использует аргументы на основе поведения, а не значения, апеллируя лишь к необходимым ей свойствам аргументов, что делает её применимой в любом контексте, где тип объекта удовлетворяет заданным требованиям поведения. Таким образом, реализуется концепция параметричности
        Сообщение отредактировано: applegame -
          Цитата applegame @
          Цитата korvin @
          Попробуй написать функцию len, вычисляющую длину списка в Лиспе(да вообще в любом ЯП с дин. типизацией) и в D (вообще в любом ЯП со статической типизацией) и в (оригинальном)Паскале, например.
          Цитата MyNameIsIgor @

          ExpandedWrap disabled
            function f(a, b) { return a+b; }

          будет работать для кучи типов. В языках со статической типизацией возникнут проблемы.
          Не улавливаю хода вашей мысли. Поподробней пожалуйста.
          ExpandedWrap disabled
            auto foo(A, B)(A a, B b) { return a + b; }
          ЧЯДНТ?

          Ты использовал шаблон, который потом позволит генерировать код для нужных типов. В некоторых других языках со статической типизацией ты бы использовал дженерик-функцию с ограничением(для вызова +) или полиморфную функцию, принимающую аргумент типа, который удовлетворяет некоторому тайпклассу(опять же, для +), в некоторых - написал бы макрос или воспользовался внешним генератором кода.

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

            Цитата D_KEY @
            В некоторых других языках со статической типизацией ты бы использовал дженерик-функцию с ограничением(для вызова +)
            Вариант на расте:
            ExpandedWrap disabled
              fn f<T1, T2, R>(a: T1, b: T2) -> R
                  where T1: std::ops::Add<T2, Output = R> {
                  a + b
              }


            Цитата Qraizer @
            С C++11 по этой причине экспорт шаблонов не является обязательным.
            А разве не убрали совсем?

            Цитата Qraizer @
            И даже не полностью инстанцироаться при конкретизации. (А вот дженерики последнее могут?)
            В расте, в данный момент, вообще нет специализации. :(
              Цитата D_KEY @
              В языках с динамической типизацией в этом нет никакой необходимости, так как код изначально принимает объекты, которые могут иметь совершенно любые типы, в том числе несовместимые для бинарной операции или вообще не поддерживающие данную операцию. И определяется это все только во время выполнения.
              Именно так. И именно поэтому все функции в динамически типизированных языках всегда параметрически полиморфны. А в C++/D/Rust/Java/C# и т.п. для таких функций создан специальный синтаксис.
                Цитата DarkEld3r @
                И чем это хорошо?

                Некоторым нравится. Я сторонник статической типизации.

                Добавлено
                Цитата applegame @
                Именно так. И именно поэтому все функции в динамически типизированных языках всегда параметрически полиморфны.

                Ты, конечно, можешь так считать. Но это довольно бессмысленное утверждение.
                Цитата wiki
                Parametric polymorphism - In programming languages and type theory, parametric polymorphism is a way to make a language more expressive, while still maintaining full static type-safety. Using parametric polymorphism, a function or a data type can be written generically so that it can handle values identically without depending on their type.[1] Such functions and data types are called generic functions and generic datatypes respectively and form the basis of generic programming.


                Добавлено
                Цитата applegame @
                Ну, эту разнице объяснять не нужно, она понятна. Я просто не согласен, что она является определяющей для понятия ПП.

                Потому, что у нас есть генерация кода. У нас нет типов/функций, которые бы парметризировались типами и не зависели бы при этом от них. У нас есть механизм генерации типов/функций на основе других типов(и/или некоторых значений), который генерирует разный код в зависимости от них(ибо у нас есть перегрузка функций и специализация шаблонов, а это уже уход от параметрического полиморфизма).

                Цитата
                Цитата D_KEY @
                Но вывод там в том, что на C++ такую проверку сделать нельзя. И ведь действительно нельзя.
                Если бы там был такой вывод, то не было и того холивара. Там делается другой вывод: C++ - говно, C# и Java тоже говно, но менее вонючее, а Хаскель - няшка.

                Ну такого я там не нашел. По сути своим примером он показал, что в C++ есть генерация кода, но нет параметрического полиморфизма.
                Сообщение отредактировано: D_KEY -
                  Цитата D_KEY @
                  Ты, конечно, можешь так считать. Но это довольно бессмысленное утверждение.
                  Все ясно. Я понимаю ПП в более широком смысле, чем ты и korvin. Спор опять ведется вокруг терминов, которые четко нигде не определены. В любом случае, думаю, я понял ваше понимание ПП. Я с ним не согласен, но спор тут точно ничего не решит.

                  Добавлено
                  Цитата D_KEY @
                  Ну такого я там не нашел. По сути своим примером он показал, что в C++ есть генерация кода, но нет параметрического полиморфизма.
                  Нет, он показал, что шаблоны не справляются с некоторыми задачами, с которыми могут справится языки с более продвинутой системой типов, а не то что в C++ нет ПП. Попросту говоря сделал вывод, который не следует из показанного. А так как он это явно сделал намеренно, то можно просто сказать - солгал.
                  Сообщение отредактировано: applegame -
                    Цитата applegame @
                    Нет, он показал, что шаблоны не справляются с некоторыми задачами, с которыми могут справится языки с более продвинутой системой типов, а не то что в C++ нет ПП.

                    Цитата
                    Some implementations of type polymorphism are superficially similar to parametric polymorphism while also introducing ad hoc aspects. One example is C++ template specialization.
                      Цитата D_KEY @
                      Some implementations of type polymorphism are superficially similar to parametric polymorphism while also introducing ad hoc aspects. One example is C++ template specialization.
                      Причем тут специализация шаблонов? Да, специализация шаблонов - это явно не ПП, это явный ad-hoc полиморфизм. Но мы то не его обсуждаем.
                      Сообщение отредактировано: applegame -
                        Цитата applegame @
                        Цитата D_KEY @
                        Some implementations of type polymorphism are superficially similar to parametric polymorphism while also introducing ad hoc aspects. One example is C++ template specialization.
                        Причем тут специализация шаблонов? Да, специализация шаблонов - это явно не ПП, это явный ad-hoc полиморфизм. Но мы то не его обсуждаем.

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

                        Это парметрический полиморфизм?
                        ExpandedWrap disabled
                          template<typename T>
                          void foo(T a)
                          {
                              bar(a);
                          }


                        А если добавить:
                        ExpandedWrap disabled
                          template<>
                          void foo<int>(int x)
                          {
                          }

                        ?
                        Параметрический полиморфизм вдруг испариться? Так может его и не было?
                          Цитата D_KEY @
                          Мы обсуждаем, являются ли шаблоны параметрическим полиморфизмом.
                          Ты же уже признал, что является :D
                          Цитата D_KEY @
                          Параметрический полиморфизм есть в C++(признаю таки), но там нет полиморфных типов.

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

                            Ну там был другой контекст, для которого нюансы были неважны.

                            Цитата
                            Цитата D_KEY @
                            Параметрический полиморфизм вдруг испариться? Так может его и не было?
                            Да, испарится. Перегрузка функций и специализация - ad-hoc полиморфизм.

                            Так получается, что вот тут:
                            ExpandedWrap disabled
                              template<typename T>
                              void foo(T a)
                              {
                                  bar(a);
                              }

                            мы не можем сказать, есть ли тут параметрический полиморфизм. Ведь мы не знаем, будет ли специализация. Более того, мы не знаем, что за bar у нас тут :) Тут же будет учтена перегрузка, так? А ведь это не параметрический полиморфизм.
                              Цитата D_KEY @
                              мы не можем сказать, есть ли тут параметрический полиморфизм.
                              Все зависит от того как эта функция будет определена в точке вызова/инстанцирования шаблона.
                              bar тут совсем не причем. Полиморфность функции bar никак не влияет на полиморфность foo.
                              Сообщение отредактировано: applegame -
                                Цитата applegame @
                                Не улавливаю хода вашей мысли. Поподробней пожалуйста.

                                Нет никакого смысла рассуждать о параметрическом полиморфизме при динамической типизации. Собственно параметрический полиморфизм и был описан именно для статической типизации. Для динамических языков об этом просто никто не задумывался - это бессмысленно.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (33) « Первая ... 12 13 [14] 15 16 ...  32 33


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0606 ]   [ 15 queries used ]   [ Generated: 2.05.24, 11:01 GMT ]