Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.208.25] |
|
Страницы: (33) « Первая ... 26 27 [28] 29 30 ... 32 33 ( Перейти к последнему сообщению ) |
Сообщ.
#406
,
|
|
|
Цитата applegame @ Цитата D_KEY @ Да вроде как DarkEld3r говорил, что содержат.Поскольку сами правила типизации в языке не содержат ничего, что бы заставляло инстанцировать типы бесконечно. Возможно. Но хотелось бы понять, что именно заставляет инстанцировать на этапе тайпчекинга. Специализации нет, перегрузки нет. Но да, скорее всего я чего-то не понял. |
Сообщ.
#407
,
|
|
|
Цитата applegame @ Любое можно. И кстати, не следует путать поддержку экспорта шаблонов и возможность не предоставлять сырцы для пользователя шаблона. Это разные аспекты, друг от друга не зависящие. Экспортировать шаблон целиком никак нельзя, только конечное число его специализаций. |
Сообщ.
#408
,
|
|
|
Цитата D_KEY @ Да, но придётся вводить отдельные правила в каком случае генерить, а в каком нет. Опять же, нужно оно не так уж часто, так что думаю, что эту проблему будут игнорировать. Всё-таки в языке ещё многого более полезного нет.Подобные рекурсивные штуки в принципе, ни в каком из языков, не смогут использовать данные на стеке, то нам все равно понадобится куча и хранить мы так или иначе будем ссылки, а значит можно обойтись без генерации инстансов. Цитата D_KEY @ Специализация обсуждалась и "планировалась". Я не сильно слежу за такими обсуждениями, так что не знаю насколько она приоритетна, но появиться вполне может. Специализации нет |
Сообщ.
#409
,
|
|
|
Цитата DarkEld3r @ Цитата D_KEY @ Да, но придётся вводить отдельные правила в каком случае генерить, а в каком нет. Опять же, нужно оно не так уж часто, так что думаю, что эту проблему будут игнорировать. Всё-таки в языке ещё многого более полезного нет.Подобные рекурсивные штуки в принципе, ни в каком из языков, не смогут использовать данные на стеке, то нам все равно понадобится куча и хранить мы так или иначе будем ссылки, а значит можно обойтись без генерации инстансов. Цитата D_KEY @ Специализация обсуждалась и "планировалась". Я не сильно слежу за такими обсуждениями, так что не знаю насколько она приоритетна, но появиться вполне может.Специализации нет В общем, язык пока еще слишком нестабилен для такого рода решений... |
Сообщ.
#410
,
|
|
|
Цитата D_KEY @ Смотря что под "стабильностью" понимать. Обратную совместимость ломать очень сильно не хотят, отчасти, из-за этого многое и происходит медленнее, чем могло бы. В этом плане всё должно быть стабильно. В общем, язык пока еще слишком нестабилен для такого рода решений... А вот в плане фич - действительно хотят сделать много всего ещё. Просто ресурсов не так уж много, насколько я понимаю. Опять же, нет какого-нибудь "комитета по стандартизации", в итоге между предложением и реализацией может проходить не так много времени - это тоже влияет на то, что планирующиеся возможности не освещаются как следует. "Зато" релизы часто. Посмотрим, что из этого подхода вырастет. |
Сообщ.
#411
,
|
|
|
Цитата 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.") звучит странно, учитывая, что в Хаскелле и пример с полиморфной рекурсией работает и вывод типов. |
Сообщ.
#412
,
|
|
|
Таки удалось реализовать это на 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. |
Сообщ.
#413
,
|
|
|
Цитата applegame @ По-видимому такой же полиморфизм и во всяких C++/D. С чего он такой же, если дает возможность специализировать? |
Сообщ.
#414
,
|
|
|
Цитата D_KEY @ Да-да, я в курсе твоих фантазий, но что-то мало тех, кто с тобой согласен. Я бы даже сказал исчезающе мало. С чего он такой же, если дает возможность специализировать? |
Сообщ.
#415
,
|
|
|
Цитата applegame @ Цитата D_KEY @ Да-да, я в курсе твоих фантазий, но что-то мало тех, кто с тобой согласен. Я бы даже сказал исчезающе мало.С чего он такой же, если дает возможность специализировать? Сильный аргумент. И да, с чего ты взял? Добавлено Кстати, а что именно является моими фантазиями? Что C++/D дает возможность специализировать? Или что Ocaml/ML не дают? |
Сообщ.
#416
,
|
|
|
Цитата applegame @ Да-да, я в курсе твоих фантазий, но что-то мало тех, кто с тобой согласен. Я бы даже сказал исчезающе мало. Какие фантазии? Всё реально. То что в ML переменная-тип не может быть сама параметризованной говорит лишь о некотором ограничении в реализации, хотя параметричность это не отменяет. Ну так а что ты хочешь? ML тянется с 77-го года, с тех пор много воды утекло, придумали Haskell в т.ч., но современные реализации ML тянут наследие прошлых лет, как C++ тянет наследие C, а D тянет наследие C++. В Фортране, насколько я знаю, массивы не могут быть перекрывающимися(в смысле областей памяти), это ж не значит, что они перестали быть массивами. |
Сообщ.
#417
,
|
|
|
Цитата D_KEY @ Ну сначала ты все твердил про инстанцирование, теперь вот оказалось, что ML, тоже оказывается инстанцирует, и задачка на нем не решается. И на Ocaml не решается. Я уже понял, по-твоему все что не Haskell и не Java с C# - это не ПП. Сильный аргумент. И да, с чего ты взял? Добавлено Цитата korvin @ Что реально? Что в C++ нет параметрического полиморфизма? Ну фантазируйте с D_KEY на пару. Я вам мешать не буду Какие фантазии? Всё реально. |
Сообщ.
#418
,
|
|
|
Цитата applegame @ Что реально? Что в C++ нет параметрического полиморфизма? Так же реально, как и то, что в C нет классов. Как в D нет мультиметодов. Добавлено Цитата applegame @ Ну сначала ты все твердил про инстанцирование, теперь вот оказалось, что ML, тоже оказывается инстанцирует, и задачка на нем не решается. И на Ocaml не решается. Я уже понял, по-твоему все что не Haskell и не Java с C# - это не ПП. А ты любитель перевирать слова, я смотрю. D_KEY тебе совсем не об этом говорил. Более того: 1) он сам говорил, что это детали реализации. 2) он говорил не про само инстанциирование как реализацию, а про возможность переопределить правило инстанциирования для конкретных типов, что противоречит ПП. 3) проблема ML тут не в реализации, вообще-то, а в правилах типизации. |
Сообщ.
#419
,
|
|
|
Цитата korvin @ Может тебе ссылки на его посты дать? Про детали реализации говорил я, а он как раз говорил, что истанцирование типов - это причина отрицать ПП в плюсах. Будешь мне тут рассказывать. А ты любитель перевирать слова, я смотрю. D_KEY тебе совсем не об этом говорил. Более того: 1) он сам говорил, что это детали реализации. 2) он говорил не про само инстанциирование как реализацию, а про возможность переопределить правило инстанциирования для конкретных типов, что противоречит ПП. Добавлено Вот: Цитата D_KEY @ Тут принципиальная разница как раз в том, что в C++(и в D?) у нас нет полиморфных типов/функций, у нас есть механизм генерации конкретных типов и функций в зависимости от параметров. И это разница не в реализации. И вот тут втирают про генерацию активно: trait + impl vs class (сообщение #3611075) А тут он признал что ПП таки в плюсах есть, но потом отмазался, что он имел что-то совсем другое: Ты там тоже участвовал и все уже забыл. Ну молодцы, чо. И кто тут туперь мастер перевирать слова. |
Сообщ.
#420
,
|
|
|
Ни в одном (попадавшемся мне) источнике не определяется, как именно должен быть реализован полиморфизм, чтобы не потерять своё название. Главное, чтобы имело место полиморфное поведение, не противоречащее определению. Трансляция ПП в АдХок, например, на вики и вроде бы даже по ссылке DarkEld3r, не читал её всю настолько внимательно, рассматривается как предпочтительный вариант по ряду причин, хоть и не лишённый недостатков.
По теме задачи. Математика умеет работать с бесконечностями. Ряды, последовательности, бесконечно точные вещественные, итп. Практические применения математических абстракций далеко не всегда могут быть реализованы в полной мере, и это не открытие Америки. Рекурсия должна быть остановлена, итерации ограничены итп. Как именно это делается, неважно. В Плюсах, например, используется АдХок специализация, вводимая программистом явно, в Стандарте именуемая explicit specialization. В Шарпах это реализуется инстанцированием в run-time вкупе с необязательностью самого инстанцирования. Итд. applegame, это не фантазии, это незнание теории. |