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

    Возможно. Но хотелось бы понять, что именно заставляет инстанцировать на этапе тайпчекинга. Специализации нет, перегрузки нет. Но да, скорее всего я чего-то не понял.
      Цитата applegame @
      Экспортировать шаблон целиком никак нельзя, только конечное число его специализаций.
      Любое можно. И кстати, не следует путать поддержку экспорта шаблонов и возможность не предоставлять сырцы для пользователя шаблона. Это разные аспекты, друг от друга не зависящие.
      Сообщение отредактировано: Qraizer -
        Цитата D_KEY @
        Подобные рекурсивные штуки в принципе, ни в каком из языков, не смогут использовать данные на стеке, то нам все равно понадобится куча и хранить мы так или иначе будем ссылки, а значит можно обойтись без генерации инстансов.
        Да, но придётся вводить отдельные правила в каком случае генерить, а в каком нет. Опять же, нужно оно не так уж часто, так что думаю, что эту проблему будут игнорировать. Всё-таки в языке ещё многого более полезного нет.

        Цитата D_KEY @
        Специализации нет
        Специализация обсуждалась и "планировалась". Я не сильно слежу за такими обсуждениями, так что не знаю насколько она приоритетна, но появиться вполне может.
          Цитата DarkEld3r @
          Цитата D_KEY @
          Подобные рекурсивные штуки в принципе, ни в каком из языков, не смогут использовать данные на стеке, то нам все равно понадобится куча и хранить мы так или иначе будем ссылки, а значит можно обойтись без генерации инстансов.
          Да, но придётся вводить отдельные правила в каком случае генерить, а в каком нет. Опять же, нужно оно не так уж часто, так что думаю, что эту проблему будут игнорировать. Всё-таки в языке ещё многого более полезного нет.

          Цитата D_KEY @
          Специализации нет
          Специализация обсуждалась и "планировалась". Я не сильно слежу за такими обсуждениями, так что не знаю насколько она приоритетна, но появиться вполне может.

          В общем, язык пока еще слишком нестабилен для такого рода решений...
            Цитата D_KEY @
            В общем, язык пока еще слишком нестабилен для такого рода решений...
            Смотря что под "стабильностью" понимать. Обратную совместимость ломать очень сильно не хотят, отчасти, из-за этого многое и происходит медленнее, чем могло бы. В этом плане всё должно быть стабильно.

            А вот в плане фич - действительно хотят сделать много всего ещё. Просто ресурсов не так уж много, насколько я понимаю. Опять же, нет какого-нибудь "комитета по стандартизации", в итоге между предложением и реализацией может проходить не так много времени - это тоже влияет на то, что планирующиеся возможности не освещаются как следует.

            "Зато" релизы часто. Посмотрим, что из этого подхода вырастет.
              Цитата applegame @
              Весьма интересная информация. Авторы этого документа считают, что мономорфизация - это реализация полиморфизма, со своими преимуществами и недостатками. И, внезапно, MLton - компилятор Standard ML тоже использует мономорфизацию. И, насколько я понял, Standard ML не поддерживает полиморфную рекурсию.

              Цитата
              The polymorphism in ML is not, however, exactly like the polymorphism in System F. ML restricts what
              types a type variable may be instantiated with. Specifically, type variables can not be instantiated with
              polymorphic types. Also, polymorphic types are not allowed to appear on the left-hand side of arrows (i.e.,
              a polymorphic type cannot be the type of a function argument). This form of polymorphism is known as
              let-polymorphism (due to the special role played by let in ML), or prenex polymorphism. These restrictions
              ensure that type inference is possible.

              --- http://www.seas.harvard.edu/courses/cs152/...tures/lec17.pdf

              Ocaml тоже. Точнее Тип определить можно (как и в SML), а написать функцию length для него нельзя. (ideone подсвечивает символ length как "встроенный", поэтому переименовал в len)

              Добавлено
              Последнее предложение ("These restrictions
              ensure that type inference is possible.") звучит странно, учитывая, что в Хаскелле и пример с полиморфной рекурсией работает и вывод типов.
              Сообщение отредактировано: korvin -
                Цитата korvin @

                Таки удалось реализовать это на D. Пришлось немного вручную постирать типы внутри Nested, но сам класс снаружи выглядит не хуже жабовского, все типы сохранены.
                Благодаря затемплейченым свойствам и конструктору реальное иснтанцирование происходит только при собственно конструировании или обращению к свойству, как в MLton.
                http://dpaste.dzfl.pl/b9c6a2a958e5

                Добавлено
                Цитата korvin @
                Цитата
                The polymorphism in ML is not, however, exactly like the polymorphism in System F. ML restricts what
                types a type variable may be instantiated with. Specifically, type variables can not be instantiated with
                polymorphic types. Also, polymorphic types are not allowed to appear on the left-hand side of arrows (i.e.,
                a polymorphic type cannot be the type of a function argument). This form of polymorphism is known as
                let-polymorphism (due to the special role played by let in ML), or prenex polymorphism. These restrictions
                ensure that type inference is possible.

                --- http://www.seas.harvard.edu/courses/cs152/...tures/lec17.pdf

                Ocaml тоже. Точнее Тип определить можно (как и в SML), а написать функцию length для него нельзя. (ideone подсвечивает символ length как "встроенный", поэтому переименовал в len)

                То есть они считают, что ПП в ML и Ocaml есть, но отличается от такового в Haskell. Как они там его обозвали? let-polymorphism или "prenex polymorphism", он же Rank-1 polymorphism. По-видимому такой же полиморфизм и во всяких C++/D.
                Сообщение отредактировано: applegame -
                  Цитата applegame @
                  По-видимому такой же полиморфизм и во всяких C++/D.

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

                      Сильный аргумент. И да, с чего ты взял?

                      Добавлено
                      Кстати, а что именно является моими фантазиями? Что C++/D дает возможность специализировать? Или что Ocaml/ML не дают?
                        Цитата applegame @
                        Да-да, я в курсе твоих фантазий, но что-то мало тех, кто с тобой согласен. Я бы даже сказал исчезающе мало.

                        Какие фантазии? Всё реально.

                        То что в ML переменная-тип не может быть сама параметризованной говорит лишь о некотором ограничении в реализации, хотя параметричность это не отменяет. Ну так а что ты хочешь? ML тянется с 77-го года, с тех пор много воды утекло, придумали Haskell в т.ч., но современные реализации ML тянут наследие прошлых лет, как C++ тянет наследие C, а D тянет наследие C++.

                        В Фортране, насколько я знаю, массивы не могут быть перекрывающимися(в смысле областей памяти), это ж не значит, что они перестали быть массивами.
                        Сообщение отредактировано: korvin -
                          Цитата D_KEY @
                          Сильный аргумент. И да, с чего ты взял?
                          Ну сначала ты все твердил про инстанцирование, теперь вот оказалось, что ML, тоже оказывается инстанцирует, и задачка на нем не решается. И на Ocaml не решается. Я уже понял, по-твоему все что не Haskell и не Java с C# - это не ПП. :)

                          Добавлено
                          Цитата korvin @
                          Какие фантазии? Всё реально.
                          Что реально? Что в C++ нет параметрического полиморфизма? Ну фантазируйте с D_KEY на пару. Я вам мешать не буду :)
                            Цитата applegame @
                            Что реально? Что в C++ нет параметрического полиморфизма?

                            Так же реально, как и то, что в C нет классов. Как в D нет мультиметодов.

                            Добавлено
                            Цитата applegame @
                            Ну сначала ты все твердил про инстанцирование, теперь вот оказалось, что ML, тоже оказывается инстанцирует, и задачка на нем не решается. И на Ocaml не решается. Я уже понял, по-твоему все что не Haskell и не Java с C# - это не ПП. :)

                            А ты любитель перевирать слова, я смотрю. D_KEY тебе совсем не об этом говорил. Более того:

                            1) он сам говорил, что это детали реализации.
                            2) он говорил не про само инстанциирование как реализацию, а про возможность переопределить правило инстанциирования для конкретных типов, что противоречит ПП.
                            3) проблема ML тут не в реализации, вообще-то, а в правилах типизации.
                            Сообщение отредактировано: korvin -
                              Цитата korvin @
                              А ты любитель перевирать слова, я смотрю. D_KEY тебе совсем не об этом говорил. Более того:

                              1) он сам говорил, что это детали реализации.
                              2) он говорил не про само инстанциирование как реализацию, а про возможность переопределить правило инстанциирования для конкретных типов, что противоречит ПП.
                              Может тебе ссылки на его посты дать? Про детали реализации говорил я, а он как раз говорил, что истанцирование типов - это причина отрицать ПП в плюсах. Будешь мне тут рассказывать.

                              Добавлено
                              Вот:
                              Цитата D_KEY @
                              Тут принципиальная разница как раз в том, что в C++(и в D?) у нас нет полиморфных типов/функций, у нас есть механизм генерации конкретных типов и функций в зависимости от параметров.
                              И это разница не в реализации.

                              И вот тут втирают про генерацию активно:
                              trait + impl vs class (сообщение #3611075)
                              А тут он признал что ПП таки в плюсах есть, но потом отмазался, что он имел что-то совсем другое:
                              Цитата D_KEY @
                              Параметрический полиморфизм есть в C++(признаю таки), но там нет полиморфных типов.


                              Ты там тоже участвовал и все уже забыл. Ну молодцы, чо. И кто тут туперь мастер перевирать слова.
                              Сообщение отредактировано: applegame -
                                Ни в одном (попадавшемся мне) источнике не определяется, как именно должен быть реализован полиморфизм, чтобы не потерять своё название. Главное, чтобы имело место полиморфное поведение, не противоречащее определению. Трансляция ПП в АдХок, например, на вики и вроде бы даже по ссылке DarkEld3r, не читал её всю настолько внимательно, рассматривается как предпочтительный вариант по ряду причин, хоть и не лишённый недостатков.
                                По теме задачи. Математика умеет работать с бесконечностями. Ряды, последовательности, бесконечно точные вещественные, итп. Практические применения математических абстракций далеко не всегда могут быть реализованы в полной мере, и это не открытие Америки. Рекурсия должна быть остановлена, итерации ограничены итп. Как именно это делается, неважно. В Плюсах, например, используется АдХок специализация, вводимая программистом явно, в Стандарте именуемая explicit specialization. В Шарпах это реализуется инстанцированием в run-time вкупе с необязательностью самого инстанцирования. Итд.
                                applegame, это не фантазии, это незнание теории.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (33) « Первая ... 26 27 [28] 29 30 ...  32 33


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0717 ]   [ 14 queries used ]   [ Generated: 20.05.24, 06:21 GMT ]