Re[8]: ФП и абстракция списка
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.06.07 20:59
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Разумеется, но его и не используют для всех задач.


Да по факту суют всюду. Даже в языки на мертво вмонтируют.

VD>>А о производительности вообще говорить не приходится.


L>Когда как.


Ага. Но так как по жизни используют его почти везде...

L>Реального списка может и не быть в бинарнике, код которого весь в этих списках.


Это очень теоритически. В прочем, это уже другая тема.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: ФП и абстракция списка
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.06.07 20:59
Оценка:
Здравствуйте, awson, Вы писали:

A>Почему нелегально? Удачные решения потому и являются таковыми, что уходят далеко за рамки первоначального замысла.


Я считаю такие решения неудачными. Мне нравится когда что я задумываю, то и полчается. И я всегда расстраиваюсь, когда выходит что-то другое (пусть даже более интересное).

Так что я считаю, что если кто-то хочет видеть в языке метапрограммирование, то стоит позаботиться об этом явно. А систему типов оставить для выражения типов, а не для программирования.

VD>>В С++ это привело к очень печальным результатам. Стоило только допустить рекурсивное определение и возможность остановить рекурсию ручной специализацией и получился супер-монстр на котором с одной стороны можно многое, а с другой ничего толкового.


A>Ничего печального для C++ я не вижу,


А я вижу. И вижу к чему это приводит.

A>кроме синтаксического барьера.


Да фиг с ним с барьером. А вот ограниченность чем оправдывать? Ведь ни файла из "макросов" не загрузить, ни сообщения об ошибке человеческого не выдать.

A> Так вот, в случае классов типов в Хаскелле этот барьер отсутствует полностью.


В случае с Хаскелем барьер начинается еще раньше. Мозг большинства кто его пытается изучит по глубже по началу плющит так, что боязно становится .

A>Это делает указанное метапрограммирование абсолютно прозрачным.


Ну, да. Для тех кто считает абсолютно прозрачными 20 страниц мат.формул.

A> Например, вызов функции от любого количества аргументов любого типа и выглядит как вызов совершенно обычной функции. Разумеется, со 100% статической проверкой типов.


Для вызова функий не нужно метапрограммирования. Оно нужно для анализа и модификации/трансформации кода.

Кстати, остается вопрос одинаково ли мы понимаем термин "метапрограммирование"?

VD>>Я в курсе. Только это не стандартное расширение.


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


Это — да. Но исключения есть:
1. Лисп.
2. Руби.
3. Питон.
4. Немерле.
...
Я уже не говорю о разных эксперементах вроде ТемлеэйтХаскеля, МетаМЛ-я и т.п.

Все живые языки с не плохими реализациями.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: ФП и абстракция списка
От: geniepro http://geniepro.livejournal.com/
Дата: 02.06.07 21:02
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD2> Ага, проще уговорить себя в том, что вокруг одни недоумки, чем признать очевидное.


А вот этого я не утверждал.
Однако, ну сколько людей из отметившихся в этой теме являются глубокими теоретиками в области ФП и ООП?

VD2> В общем, по жизни я вижу много интересного в ФЯ и чрезмерно религиозное отношение к ФП. Вывод простой надо взять из ФП все лучшее не потеряв при этом то лучшее, что мы уже имели в ООП, КОП и т.п.


Чистое ФП несовместимо с ООП: то, что для ООП хорошо (глобальное мутабельное состояние) — для чистого ФП — смерть...


Вообще, наверное, ты в чём-то прав...
Мне в последнее время тоже начало казаться, что в практических языках чистоты нет. Ну вот какие действительно чистые ФЯ или ООЯ используются на практике? Да нет таких...
Тот же Хаскелл — не так уж он и чист, как об этом твердят. Вот и ерлангеры тоже признают грязноватость своего языка...
В ООП — так же...
Чистые (процедрные) языки — это, наверное, только старые версии Фортрана да Бейсика... В новых и то уже ООП имеется, даже в ассемблерах...
Re[9]: ФП и абстракция списка
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 02.06.07 21:10
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

L>>Ничего я не перепутал. Может это ты меня неверно понял?

L>>А что такое AlgTD?

BZ>алгеьраические типы данных. именно для них присходит "транспозиция" кода в то время как type classes ничем не отличаются в диспатче от ооп — instance и внутри него отдельные методы


Ну, в общем, я неверно выразился.
Это неважно, я говорил о другом.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: ФП и абстракция списка
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 02.06.07 21:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот тут такая же фигня.


Это Лисп Примитивов мало, но на них можно много
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: ФП и абстракция списка
От: geniepro http://geniepro.livejournal.com/
Дата: 02.06.07 21:15
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ> эта идея появилась в языках с АТД.


Вообще-то сами АТД (Абстрактные Типы Данных) появились именно в первом ООП языке — Симуле, ещё в 60-х годах. Самый известный и популярный язык с АТД (Паскаль) появился позже, и Вирт как раз таки перенял идею записей из Симулы, но при этом отбросил методы классов и наследование...

BZ> уж хотя бы про аду ты должен был слышать. это тоже ооп язык?


Clu, Ada-83, Modula-2 считались "объектными" языками, Ada-95 стала просто ООЯ (ООП в стиле Оберонов)...
Re[8]: ФП и абстракция списка
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.06.07 21:20
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Разница в том, что в дотнете это будут разные типы (не учитывая тип возвращаемого значения) из-за неявного присутствия типа объекта. В классах типов объекта нет, поэтому возможны функции, принимающие, скажем, целое, а возвращающие тот тип, который нам нужен (toEnum). В ООП такое, насколько я понимаю, невозможно.


В дотнете таких ограничений нет. Это ограничения конретных языков. Проистекает оно из идеологии разрешения перегрузки. К ООП вообще отношения не имеет.

Сергей правильно сказал. Немерловый вывод типов действительно делает несколько больше чем следовало бы и во многих случаях позволяет произвести разрешение перегрузки и по возвращаемому значению. Это особенности алгоритма.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: ФП и абстракция списка
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.06.07 21:20
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>в режиме эмуляции — это как?


Тебе рассказать как на С пишут в ОО-стиле?

BZ> программисты прятали от товарищей исходники чтобы те не узнали имена полей? :D


И это тоже. Найди, к примеру, описание полей HFONT.

BZ>ясно, что аду ты тоже не знаешь


Развивайся :
http://en.wikipedia.org/wiki/Ada_language

Ada was originally targeted at embedded and real-time systems. The Ada 95 revision, designed by S. Tucker Taft of Intermetrics between 1992 and 1995, improved support for systems, numerical, financial, and object-oriented programming (OOP).


BZ>Абстрактный Тип Данных — это не обязательно структура. это любой тип, строение которого не открытвается, а доступны только функции манипулирующие им, та самая идея сокрытия реализации, которую ты считаешь тзобретением ооп. к твоему сведению, в первых ооп языках её не было.


Что за языки имеются в виду? В Симуле концепция АТД вроде поодериживалась.

BZ> она появилась в других языках 70-х. в 80-х c++, эйфель объединили эти две идеи. поэтому тем, для кого ооп начался со знакомства с с++, и кажется что АТД — это изобретение ооп


ОК. Допустим так. Ну, и что по-твоему, АТД не были промежуточным этапом на пути к ООП? Или ООП не включила эту концепцию в себя?

А вот где эта концепция в ФП я лично не вижу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: ФП и абстракция списка
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.06.07 21:20
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>... instance и внутри него отдельные методы


Гы. Вот мы уже дошли до экземляров.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: ФП и абстракция списка
От: BulatZiganshin  
Дата: 02.06.07 21:22
Оценка:
Здравствуйте, geniepro, Вы писали:

G>Здравствуйте, BulatZiganshin, Вы писали:


BZ>> эта идея появилась в языках с АТД.


G>Вообще-то сами АТД (Абстрактные Типы Данных) появились именно в первом ООП языке — Симуле, ещё в 60-х годах. Самый известный и популярный язык с АТД (Паскаль) появился позже, и Вирт как раз таки перенял идею записей из Симулы, но при этом отбросил методы классов и наследование...


записи — это не АТД, и паскаль — не атд-язык. если ты знаешь клу, аду или модулу-2, то должен быть в курсе, что в них есть средства сокрытия представления типа — это и есть АТД


BZ>> уж хотя бы про аду ты должен был слышать. это тоже ооп язык?


G>Clu, Ada-83, Modula-2 считались "объектными" языками


честно говоря, такую характеристику впервые слышу. подозреваю, что это то же самое, что АТД-язык?
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: ФП и абстракция списка
От: BulatZiganshin  
Дата: 02.06.07 21:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, lomeo, Вы писали:


L>>Разница в том, что в дотнете это будут разные типы (не учитывая тип возвращаемого значения) из-за неявного присутствия типа объекта. В классах типов объекта нет, поэтому возможны функции, принимающие, скажем, целое, а возвращающие тот тип, который нам нужен (toEnum). В ООП такое, насколько я понимаю, невозможно.


VD>В дотнете таких ограничений нет. Это ограничения конретных языков. Проистекает оно из идеологии разрешения перегрузки. К ООП вообще отношения не имеет.


VD>Сергей правильно сказал. Немерловый вывод типов действительно делает несколько больше чем следовало бы и во многих случаях позволяет произвести разрешение перегрузки и по возвращаемому значению. Это особенности алгоритма.



вы так и будете продолжать говорить о разных вещах? мы же с Сергеем давно разобрались — я говорил про method override, при котором невозможен диспатчинг по типу возвращемого объекта ввиду особенностей ООП
Люди, я люблю вас! Будьте бдительны!!!
Re[10]: ФП и абстракция списка
От: geniepro http://geniepro.livejournal.com/
Дата: 02.06.07 21:28
Оценка:
Здравствуйте, awson, Вы писали:

a> Думаю, планировали, но не в таком объеме. Потому что формально multiparameter typeclasses пока (для Haskell 98) являются расширением...


multiparameter typeclasses появились ещё в 91 году в Gofer (ещё до того, как тот превратился в HUGS), однако при стандартизации Хаскелла от них отказались, так как это усложнило бы и сам язык, и его понимание начинающими хаскеллерами, и разработку трансляторов...
Re[11]: Олег Киселёв
От: geniepro http://geniepro.livejournal.com/
Дата: 02.06.07 21:29
Оценка: :))
Кстати, я где-то встречал упоминание, что Олег Киселёв реализовал вычисление факториала на классах типов, однако так и не нашёл этого кода.
Никто не подскажет ссылку? Это было бы хорошим примером метапрограммирования на Хаскелле. Недаром разработчики Хаскелла стали использовать термин "миллиолег" для указания своего собственного уровня понимания системы типов Хаскелла. :о))
Re[9]: ФП и абстракция списка
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 02.06.07 21:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ага. Но так как по жизни используют его почти везде...


"Не знаю, не мерил"
Просто список в ФП решает разные задачи (которые в ООП решаются разными средствами). Для него много наработанных рычагов.
Вот и кажется, что его много. Ну да, иногда используют вместо массива, но это в случаях некритичных к производительности.

L>>Реального списка может и не быть в бинарнике, код которого весь в этих списках.


VD>Это очень теоритически. В прочем, это уже другая тема.


Нет, foldr/build работает давно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: ФП и абстракция списка
От: BulatZiganshin  
Дата: 02.06.07 21:32
Оценка: +1
BZ>> программисты прятали от товарищей исходники чтобы те не узнали имена полей? :D

VD>И это тоже. Найди, к примеру, описание полей HFONT.


BZ>>ясно, что аду ты тоже не знаешь


VD>Развивайся :


уж кто бы говорил первоначальная ада была атд языком. ещё три раза потворить?


BZ>>Абстрактный Тип Данных — это не обязательно структура. это любой тип, строение которого не открытвается, а доступны только функции манипулирующие им, та самая идея сокрытия реализации, которую ты считаешь тзобретением ооп. к твоему сведению, в первых ооп языках её не было.


VD>Что за языки имеются в виду? В Симуле концепция АТД вроде поодериживалась.


каким образом? ты её вообще отличаешь от концепции наследования?


BZ>> она появилась в других языках 70-х. в 80-х c++, эйфель объединили эти две идеи. поэтому тем, для кого ооп начался со знакомства с с++, и кажется что АТД — это изобретение ооп


VD>ОК. Допустим так. Ну, и что по-твоему, АТД не были промежуточным этапом на пути к ООП? Или ООП не включила эту концепцию в себя?


VD>А вот где эта концепция в ФП я лично не вижу.


бу-га-га. значит, если в ФП что-то не сразу появилось — то эта концепция для ФП не естественна? а если в ооп что-то не сразу появилось — значит оно было только промежуточный звеном на пути развития ооп? а симула в таком разрезе вообще не была ооп языком?



я тебе как раз и пытаюсь втолковать, что и ооп, и ag концепции развиваются, включая в себя всё новые возможности. и говорить о том, что ФП не работает сам по себе только потому, что некоторые из его возможностей имеют аналоги в появившихся раньше ООП языках — это значит выдавать желаемое за действительное. да, ФП сейчас не такое, какое было 20 лет назад. и ООП за это время тоже изменилось. надеюсь, после экскурса в историю АТД ты с этим согласишься
Люди, я люблю вас! Будьте бдительны!!!
Re[12]: Олег Киселёв
От: BulatZiganshin  
Дата: 02.06.07 21:35
Оценка: 8 (1)
Здравствуйте, geniepro, Вы писали:

G>Кстати, я где-то встречал упоминание, что Олег Киселёв реализовал вычисление факториала на классах типов, однако так и не нашёл этого кода.

G>Никто не подскажет ссылку? Это было бы хорошим примером метапрограммирования на Хаскелле. Недаром разработчики Хаскелла стали использовать термин "миллиолег" для указания своего собственного уровня понимания системы типов Хаскелла. :о))


была целая бмблиотека матвычислений. typenats, afair
Люди, я люблю вас! Будьте бдительны!!!
Re[12]: ФП и абстракция списка
От: geniepro http://geniepro.livejournal.com/
Дата: 02.06.07 21:36
Оценка: :))
Здравствуйте, BulatZiganshin, Вы писали:

BZ> программисты прятали от товарищей исходники чтобы те не узнали имена полей? :D


Делаем
[ccode]
#define private public
#define protected public
[/code]
и юзаем кишки чужих классов по полной программе! :о))
Вот вам и information hiding... :О(
Re[11]: ФП и абстракция списка
От: awson  
Дата: 02.06.07 21:38
Оценка:
Здравствуйте, VladD2, Вы писали:

A>> Например, вызов функции от любого количества аргументов любого типа и выглядит как вызов совершенно обычной функции. Разумеется, со 100% статической проверкой типов.

VD>Для вызова функий не нужно метапрограммирования. Оно нужно для анализа и модификации/трансформации кода.

Хоть горшком назови. Напишите мне на Nemerle аналог printf со статической проверкой типов без синтаксического оверхеда при вызове и без метапрограммирования. Если напишете, я признАю, что нужного Вам метапрограммирования классы типов не обеспечивают.

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


VD>Это — да. Но исключения есть:

VD>1. Лисп.
VD>2. Руби.
VD>3. Питон.
VD>4. Немерле.
VD>...
VD>Я уже не говорю о разных эксперементах вроде ТемлеэйтХаскеля, МетаМЛ-я и т.п.

VD>Все живые языки с не плохими реализациями.


Вы вообще читаете текст на который отвечаете? Я пишу "кроме лиспообразных", Вы в ответ — "Но исключения есть: 1. Лисп."

На питон есть стандарт? На руби есть стандарт? На немерле есть стандарт и больше одной имплементации???
Re[12]: Олег Киселёв
От: deniok Россия  
Дата: 02.06.07 21:40
Оценка:
Здравствуйте, geniepro, Вы писали:

G>Кстати, я где-то встречал упоминание, что Олег Киселёв реализовал вычисление факториала на классах типов, однако так и не нашёл этого кода.


Не Олег, но...
здесь
Re[9]: ФП и абстракция списка
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 02.06.07 21:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В дотнете таких ограничений нет. Это ограничения конретных языков. Проистекает оно из идеологии разрешения перегрузки. К ООП вообще отношения не имеет.


Возможно, я чего то не знаю. Правильно ли я понимаю, что можно написать функцию (аналогов в чистом ОО нет — что то вроде метода класса, вызываемого без указания этого класса), которая, в зависимости от контекста вызова вернет нам 1 или 'a'?

Т.е. 41 + foo() будет 42, а putch(foo()) выведет нам на консоль 'a'?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.