LINUX.ORG.RU

Языку Haskell исполнился 21 год

 ,


0

3

1 апреля 1990 года был опубликован документ под названием «The Haskell Report», а также первый стабильный релиз того самого ЯП для штангистов.

>>> Подробности



Проверено: svu ()
Последнее исправление: Dendy (всего исправлений: 2)
Ответ на: комментарий от Pavval

>А зачем нужен Хаскель?

Как зачем ? А кто факториалы будет вычислять ? :)

sS ★★★★★
()
Ответ на: комментарий от sanuda

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

squareroot ★★★★
()
Ответ на: комментарий от squareroot

> но здесь мы получаем инуые проблемы - например, сложность в реализации последовательного выполнения действий

myfunc x = g (f x)

Так, внимательно слушаю, где тут проблема последовательного выполнения g и f? :)

sanuda
()
Ответ на: комментарий от squareroot

сложность в реализации последовательного выполнения действий

и лёгкость в реализации параллельного.

что-то куда-то надо оборачивать, а это — проигрыш в производительности.

конкретнее, пожалуйста. Что оборачивать, куда, а главное — примеры падения производительности.

exlevan
()
Ответ на: комментарий от RedPossum

что ты прототипировать собрался на хаскеле?

Не знаю, что собрался прототипировать yaws, но я - софт для цифровой обработки сигналов. Да, на Хаскеле.

Потом это будет переписано на плюсАх (don't ask...), но писать это дело СРАЗУ на говноязыке я отказываюсь категорически.

Miguel ★★★★★
()
Ответ на: комментарий от squareroot

> сложность в реализации последовательного выполнения действий (что-то куда-то надо оборачивать, и т. д.), а это — проигрыш в производительности.
IO существует только в мире хаскеля, хацкий цомпилятор ГХЦ преобразует всё это в нечто иное.

quantum-troll ★★★★★
()
Ответ на: комментарий от Miguel

>, но писать это дело СРАЗУ на говноязыке я отказываюсь категорически.

Платять повремённо ? :)

sS ★★★★★
()
Ответ на: комментарий от sanuda

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

squareroot ★★★★
()
Ответ на: комментарий от exlevan

> конкретнее, пожалуйста. Что оборачивать, куда, а главное — примеры падения производительности.
Сделайте подобие программы на Haskell с монадами, да сравните результат с системной.

squareroot ★★★★
()
Ответ на: комментарий от squareroot

>Что только люди не придумают, чтобы забыть, чтобы не учить, как работает компьютер на самом деле, что такое «память», «переменная», «команда процессора».

Какие только заблуждения люди не имеют, чтобы не думать на самом деле.

r ★★★★★
()
Ответ на: комментарий от squareroot

> Не, ну тут сложно что-то не в том порядке делать. А вот когда приходится работать с вводом-выводом — чистые функции не спасают, начинаются монады, костыли, — суровая реальность, нарушающая изначально стройную и красивую идею ФП

1. Монады — не костыль, а моноиды в категории эндофункторов.

2. Единственное, что действительно нарушает что-то в хаскеле — это unsafePerformIO, всё остальное является чистым ФП.

exlevan
()
Ответ на: комментарий от Versed

То, что ты сам вынужден уточнять, что есть что, лучше всяких контраргументов.

AVL2 ★★★★★
()
Ответ на: комментарий от squareroot

>> конкретнее, пожалуйста. Что оборачивать, куда, а главное — примеры падения производительности.

Сделайте подобие программы на Haskell с монадами, да сравните результат с системной.

Этот аргумент уже имел место, когда писали на ассемблере и появились высокоуровневые (по тем временам) языки. Напомнить, чем всё закончилось?

exlevan
()
Ответ на: комментарий от squareroot

что такое «память», «переменная», «команда процессора».

Вызываю былинный срач хаскелл против ассемблера.

ugoday ★★★★★
()
Ответ на: комментарий от squareroot

> А вот когда приходится работать с вводом-выводом — чистые функции не спасают, начинаются монады, костыли, — суровая реальность, нарушающая изначально стройную и красивую идею ФП

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

Так вот даже с gtk2hs я ничего трудного не обнаружил. Красиво и просто все пишется. Даже несмотря на то, что всё в IO.

P.S. Монады — вовсе не костыли.

sanuda
()
Ответ на: комментарий от exlevan

Тогда же появился и лисп. Функциональный. Только почему-то пришлось создавать оптимизированные для него лисп-машины, видать, не последнюю роль в этом сыграла его (лиспа) производительность. Но они не получили широкого распространения.

squareroot ★★★★
()

чтоб вас всех также с днем рождения поздравляли

по сабжу: долгих лет сабжу, xmonad очень хороший wm

anonymous
()
Ответ на: комментарий от sanuda

А разве Ъ-адепты хаскела любят IO? Они ж специально выносят их куда подальше, ибо чистые функции - наше все. Вот и получается, что инструментарий, который был хорошо написан, отлажен, используется многими, (вроде gtk или Qt) использовать в haskell удается лишь с нарушениями парадигм.

squareroot ★★★★
()
Ответ на: комментарий от squareroot

> Тогда же появился и лисп. Функциональный. Только почему-то пришлось создавать оптимизированные для него лисп-машины, видать, не последнюю роль в этом сыграла его (лиспа) производительность. Но они не получили широкого распространения.

Проблему производительности лисп делит с остальными динамически типизированными языками, хаскель к ним не относится.

exlevan
()
Ответ на: комментарий от squareroot

> А разве Ъ-адепты хаскела любят IO? Они ж специально выносят их куда подальше, ибо чистые функции - наше все. Вот и получается, что инструментарий, который был хорошо написан, отлажен, используется многими, (вроде gtk или Qt) использовать в haskell удается лишь с нарушениями парадигм.

Ну прям уж парадигм. Best practices от силы.

exlevan
()
Ответ на: комментарий от exlevan

> Монады — не костыль, а моноиды в категории эндофункторов.

Катаморфизмы, параморфизмы, зигоморфизмы, хистоморфизмы, препроморфизмы, анаморфизмы, апоморфизмы, футуморфизмы, постпроморфизмы, хиломорфизмы, крономорфизмы, синкроморфизмы, экзоморфизмы, метаморфизмы, динаморфизмы, алгебра и коалгебра Калвина Элгота наконец.

anonymous
()
Ответ на: комментарий от exlevan

> всё остальное является чистым ФП.

ФаП, ФаП, ФаП...

anonymous
()
Ответ на: комментарий от squareroot

А разве проблема лишь в динамической типизации?

Во многом именно в ней. И в отсутствии годных техник оптимизации по тем временам.

exlevan
()
Ответ на: комментарий от exlevan

> моноиды в категории эндофункторов

Кстати, какая ещё «категория эндофункторов»? В языке Haskell все операции производятся в категории Hask. Поэтому ваше определение бессмысленно.

anonymous
()
Ответ на: комментарий от squareroot

а ты уверен, что все адепты С++ знают как работает компьютер на самом деле, что такое «память», «переменная», «команда процессора»?

По сравнению с этим сложность С++ меркнет. Что уж говорить о С.

да в С++ очень просто выстрелить себе в ногу... совсем простой язык

Dimson
()
Ответ на: комментарий от squareroot

Какое к чертям нарушение парадигм? Есть одно правило: где надо делать IO — делай IO. Сложно, правда? :)

С чего такая уверенность, что в хацкеле IO надо всячески избегать? Вот насильно его использовать там, где оно не нужно — это действительно лишнее. А в IO-задачах зачем пытаться избегать?

sanuda
()
Ответ на: комментарий от squareroot

> По сравнению с этим сложность С++ меркнет. Что уж говорить о С.

Судим о сложности языка по сложности предметной области? Ну-ну.

exlevan
()
Ответ на: комментарий от squareroot

может уже приведешь пример такого нарушения?

Dimson
()
Ответ на: комментарий от squareroot

Это сложно только выпускникам заборостроительных ПТУ. Нормальный же человек, окончивший математический факультет приличного ВУЗа, без проблем освоит теорию категорий за пару дней.

anonymous
()
Ответ на: комментарий от squareroot

начинаются монады, костыли, — суровая реальность, нарушающая изначально стройную и красивую идею ФП

Монада - это один тип и две чистых функции. Ничего там не нарушается.

Miguel ★★★★★
()
Ответ на: комментарий от Dimson

> а ты уверен, что все адепты С++ знают как работает компьютер на самом деле, что такое «память», «переменная», «команда процессора»?

Приходится, когда получают сегфолт.

да в С++ очень просто выстрелить себе в ногу... совсем простой язык


А в Haskell очень сложно. Даже, если это очень надо.

squareroot ★★★★
()
Ответ на: комментарий от squareroot

А разве Ъ-адепты хаскела любят IO? Они ж специально выносят их куда подальше, ибо чистые функции - наше все.

Функция, работающая с IO, тоже является чистой. Нечистые - это упомянутая здесь unsafePerformIO сотоварищи.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

> Монада - это один тип и две чистых функции. Ничего там не нарушается.

А вон товарисч утверждает, что, дескать, «монада — моноид в кластере метапарадигм категории эндофункторов». Что же вы о таких простых вещах определиться не можете, господа хаскелисты?

anonymous
()
Ответ на: комментарий от anonymous

Кстати, какая ещё «категория эндофункторов»? В языке Haskell все операции производятся в категории Hask. Поэтому ваше определение бессмысленно.

А категория Hask->Hask, конечно, не существует?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

>Уж всяко не построчно.

Это многое объясняет :)

sS ★★★★★
()
Ответ на: комментарий от anonymous

> В языке Haskell все операции производятся в категории Hask.

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

Имхо, для того, чтобы писать на хацкеле теоркат не нужен.

sanuda
()
Ответ на: комментарий от anonymous

А вон товарисч утверждает, что, дескать, «монада — моноид в ... категории эндофункторов». Что же вы о таких простых вещах определиться не можете, господа хаскелисты?

Почему же? Можем. Моноид - это и есть один объект и два морфизма. То самое и получается.

Miguel ★★★★★
()
Ответ на: комментарий от squareroot

>> да в С++ очень просто выстрелить себе в ногу... совсем простой язык

А в Haskell очень сложно. Даже, если это очень надо.

Когда очень надо, есть unsafePerformIO. А вообще, надо, чтоб не надо было.

exlevan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.