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

    Параметрически полиморфна?

    Добавлено
    Цитата applegame @
    Сишная функция printf параметрически полиморфна, как бы вам с D_KEY не хотелось обратного.

    Это какой-то догмат или что? Или я пропустил твою аргументацию?
      Ой, ладно, господа. Мне уже скучно на эту тему спорить. Если из задачки я кое что полезное для себя почерпнул, то из спора о ПП ничего ценного извлечь не удасться. Считайте что в плюсах нет ПП ради бога.
      Давайте лучше поговорим о чем-нибудь более конструктивном. Тем более что у меня назревает вопросец.
        Цитата applegame @
        Давайте лучше поговорим о чем-нибудь более конструктивном. Тем более что у меня назревает вопросец.

        Так вбрасывай.
          Цитата applegame @
          Давайте лучше поговорим о чем-нибудь более конструктивном.

          Например?=) У тебя есть какие-то новые мысли на счет сабжа?

          Цитата
          Тем более что у меня назревает вопросец.

          Ну как назреет, задавай :)
            Насчет жабы. D_KEY, как ты считаешь, Жаба поддерживает ПП?
            Сообщение отредактировано: applegame -
              Цитата applegame @
              Насчет жабы. D_KEY, как ты считаешь, Жаба поддерживает ПП?

              Да, пока не вижу оснований считать, что не поддерживает.
                Цитата D_KEY @
                Да, пока не вижу оснований считать, что не поддерживает.
                Только вот странный там полиморфизм получается. Вот у нас два типа имеющих общий метод:
                ExpandedWrap disabled
                  class Foo {
                    public String test() { return "Foo"; }
                  }
                   
                  class Bar {
                    public String test() { return "Bar"; }
                  }

                А вот это не компилируется:
                ExpandedWrap disabled
                  public static <T> String polymorph(T param) { return param.test(); }



                Бида, печаль. В жабе для того что бы ПП-функция могла принимать несколько разных типов, мы вынуждены создать дополнительный тип с "общим" методом и от него унаследоваться. Но тогда получается, что наша ПП-функция де-факто принимает параметр одного типа:
                ExpandedWrap disabled
                  abstract class Base {
                      abstract public String test();
                  }
                   
                  class Foo extends Base {
                      public String test() { return "Foo"; }
                  }
                   
                  class Bar extends Base {
                      public String test() { return "Bar"; }
                  }

                И тогда, вот это будет работать:
                ExpandedWrap disabled
                  public static <T extends Base> String test(T param) { return param.test(); }

                Заметь приходяится явно указывать, что наш полиморфный тип на самом деле вполне конкретный тип - Base.

                Ваши комментарии, D_KEY?
                Сообщение отредактировано: applegame -
                  Он не конкретный :) Ты просто задал требование к типам-параметрам. С точки зрения системы типов, если типы будут переданы разные, то и джегерик-тип будет разным, что и демонстрировал тот самый пример, не дающий тебе породить типы разной длины
                    Цитата D_KEY @
                    Он не конкретный :) Ты просто задал требование к типам-параметрам. С точки зрения системы типов, если типы будут переданы разные, то и джегерик-тип будет разным, что и демонстрировал тот самый пример, не дающий тебе породить типы разной длины
                    Это конечно да, но что это за полиморфизм, заставляющий меня плодить общих предков для моих типов? Могу ли я создать в жабе ПП-функцию, без требований к типам параметрам Foo и Bar?
                    В run-time, кстати, это будет именно конкретный тип - Base. Я даже не смогу определить точный тип в run-time (в отличие от шарпа, например). Type-erasre он такой, да.
                    Сообщение отредактировано: applegame -
                      Рантайм имеет весьма косвенное отношение к системе типов.

                      Цитата
                      Могу ли я создать в жабе ПП-функцию, без требований к типам параметрам Foo и Bar?

                      Можешь, если тебе не требуется вызывать их методы или ещё как-то опираться на информацию о них. А если нужно, то надо указать соответствующие требования. Все логично.
                      Сообщение отредактировано: D_KEY -
                        Цитата D_KEY @
                        Рантайм имеет весьма косвенное отношение к системе типов.
                        К системе типов может быть и косвенное, а вот к ПП имеет вполне прямое отношение. Внутри моей функции оказался совсем не тот тип, который подавался на вход.
                        Цитата D_KEY @
                        А если нужно, то надо указать соответствующие требования. Все логично.
                        Нет, не логично. Зачем их указывать? Эти требования, а так же соответствие типов этим требованиям можно вывести из исходного кода, что успешно делают плюсы.
                        Да и что это за требования такие, требующие создания нового типа? А вдргу мои классы Foo и Bar торчат где-то в сторонней либе? Предка-то уже не создашь.
                        Сообщение отредактировано: applegame -
                          Цитата applegame @
                          Цитата D_KEY @
                          Рантайм имеет весьма косвенное отношение к системе типов.
                          К системе типов может быть и косвенное, а вот к ПП имеет вполне прямое отношение.

                          ПП - это часть системы типов.
                            Цитата D_KEY @
                            ПП - это часть системы типов.
                            Ага, отличная система типов, в которой ПП напрочь ломает run-time reflection. Система типов не должна делать вид, что у функции параметры одиного типа, а на самом деле они оказываются другого типа, без разницы в run-time или compile-time.
                            Ну и что насчет:
                            Цитата applegame @
                            Цитата D_KEY @
                            А если нужно, то надо указать соответствующие требования. Все логично.
                            Нет, не логично. Зачем их указывать? Эти требования, а так же соответствие типов этим требованиям можно вывести из исходного кода, что успешно делают плюсы.
                            Да и что это за требования такие, требующие создания нового типа? А вдргу мои классы Foo и Bar торчат где-то в сторонней либе? Предка-то уже не создашь.
                            Сообщение отредактировано: applegame -
                              Цитата applegame @
                              Внутри моей функции оказался совсем не тот тип, который подавался на вход.

                              В статике - тот. С учётом того, что сама полиморфная функция от типов-параметров не зависит. Т.е. задача системы типов проверить корректность в статике. А что там в реализации - отдельная тема.

                              Добавлено
                              Цитата applegame @
                              Цитата D_KEY @
                              ПП - это часть системы типов.
                              Ага, отличная система типов, в которой ПП напрочь ломает run-time reflection.

                              Это вопросы к языку в целом, а не к системе типов. Я яву не люблю :) Но ПП в системе типов у них есть.

                              Добавлено
                              Цитата applegame @
                              Зачем их указывать?

                              Для обеспечения корректности с точки зрения системы типов.

                              Цитата
                              Эти требования, а так же соответствие типов этим требованиям можно вывести из исходного кода


                              Можно. Но Ява не умеет. И возможность явного указания таки является полезной в любом случае.

                              Цитата
                              что успешно делают плюсы.

                              Не делают. Плюсы ничего не выводят. Там просто попытка инстанцирования и простыни ошибок в случае фейла(ну sfinae и пр. тоже).

                              Цитата
                              А вдргу мои классы Foo и Bar торчат где-то в сторонней либе? Предка-то уже не создашь.

                              Да, система типов в яве убогая. Зато в твоём распоряжении есть всякие паттерны проектирования, которые ты можешь заюзать в данном случае :D

                              Добавлено
                              Цитата TAPL
                              Система типов - это гибко управляемый синтаксический метод доказательства отсутствия в программе определенных видов поведения при помощи классификации выражений языка по разновидностям вычисляемых ими значений
                                Цитата D_KEY @
                                Не делают. Плюсы ничего не выводят.
                                Ну как же? Код аналогичный жабовскому в первом примере скомпилируется.
                                Цитата D_KEY @
                                Система типов - это гибко управляемый синтаксический метод доказательства отсутствия в программе определенных видов поведения при помощи классификации выражений языка по разновидностям вычисляемых ими значений
                                И в жабе она лажает. В этом коде:
                                ExpandedWrap disabled
                                  class Foo {
                                    public String test() { return "Foo"; }
                                  }
                                   
                                  class Bar {
                                    public String test() { return "Bar"; }
                                  }
                                   
                                  class Test {
                                    public static <T> String polymorph(T param) { return param.test(); }
                                    public static void main(String[] args) {
                                      polymorph(new Foo());
                                    }
                                  }
                                она мне доказывает, что я не могу выполнить метод test для объекта с типом Foo, что является ложью. А вот система типов C++/D с такой задачей справляется.
                                Сообщение отредактировано: applegame -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (33) « Первая ... 22 23 [24] 25 26 ...  32 33


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