LINUX.ORG.RU

Вышел новый стандарт Haskell

 ,


0

1

Саймон Марлоу (Simon Marlow) опубликовал анонсированный ранее Haskell 2010 Report (HTML, PDF).

Основные изменения:

  • Добавлен Numeric
  • Добавлено System.IO.Error.{catch,try,ioError}
  • Исправлено множество багов.

Также Саймон указал на то, что чуть позже, в этом году появится новая ревизия Хаскелля, а также что с этого момента он передаёт полномочия главного редактора документа спецификаций главе комитета Хаскелля 2011 года, Малькольму Воллесу (Malcolm Wallace).

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



Проверено: catap ()

Ответ на: комментарий от AVL2

> это ты тормоз а 2010 году гадать о скорости сверхсветового реактивного хаскеля.

фантасты на ЛОРе )))

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

> это ты тормоз а 2010 году гадать о скорости сверхсветового реактивного хаскеля.

А ты флеймер и тролль

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

Кроме этого теста, ghc сливает еще k-nucleotide. И все как-бы

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

>Как это помогает среднестатистическому кодерку шлепать формочки для говновеба?

сайты на хаскеле проще и качественней.

Да 90% всех говнокодеров будет Хаскель только до пенсии осваивать и зачем? Чтобы написать одну едиснвтенную программу и умереть?

это было бы неплохо.

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

> Последовал Вашему совету

Уже лучше. Если поковыряться в этих тестах, то можно найти много неожиданного. Как по скорости, так и по памяти. Но чтобы понять, как скорость программы на Хаскелле зависит от знания разработчиком стандартных библиотек и особенностей компилятора, можно почитать: http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16#fast http://cgi.cse.unsw.edu.au/~dons/blog/2007/11/29#smoking-4core Не стоит удивляться, если новичек, используя стандартные строки, получит плохую производительность. Или, если не зная о хвостовой рекурсии, получит переполнение стека. И т.д. и т.п. Зато новичек может легко написать параллельную программу и уделать новичка в плюсах, который такую программу не осилит и получит в итоге более низкую скорость. В общем, для получения скорости в Хаскелле нужны какие-то знания. Ну и напоследкок: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.117.1208&rep=rep1&ty...

P.S. Вообще чего удивляться, что долбоебиков на ЛОРе развелось, если в книжных ничего, кроме «физики/математики для чайника» не найти. Какие матаны и строймехи?! Скоро будут книги типа «2+2 для чайника».

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

Курите монады - они все это добро эмулируют. Говорят, удобно.

Угу... а главное среди них не запутаешься: map, fmap, liftM, liftM2... Сакральный смысл названий не очень ясен: где-то видел мнение, что mapList (вместо map) был бы кошернее...

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

pidigits практически один-в-один:

Haskell GHC 2.26 Lua LuaJIT 2.32

n-body да, получше

Haskell GHC 30.87 Lua LuaJIT 39.17

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

Кстати, советую смотреть на quad-core бенчмарки

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

> сайты на хаскеле проще и качественней.

Ну толсто. Нифига не проще, но да, быстрее.

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

Кстати, под quad core луу так и не нашел :(

PS: Против Lua ничего не имею

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

>Это не интересно. Нормальный кодер сразу цикл и напишет.

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

Компилятор должен уметь оптимизировать программу для разных железок. А для этого необходимо избавиться от сторонних эффектов в коде.

А обдолбанная илита будет бегать по stackoverflow и спрашивать, почему у него stack overflow.

хвостовая рекурсия.

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

>сайты на хаскеле проще и качественней.

Определение качественности в студию?

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

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

Вот ты мне лучше расскажи, почему фолдинг настоящий, а не игрушечный это: foldl', с хренью на конце. Зачем вообще надо было рекурсивный foldl делать? Почему версия функции, которая будет использоваться в реальных задачах обозначенна так? Где логика?

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

> хвостовая рекурсия

Часто все проще: map f list fold f init list И т.д.

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

>Нифига не проще

ну посмотри код gitit. от ведь верх сложности...

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

> И почему-то кажется, что haskell тормоз с таким подходом.

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

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

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

ты путаешь качество и (себе)стоимость разработки. Качество, это когда сайт не падает от кавычки в параметрах формы.

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

> Вот ты мне лучше расскажи, почему фолдинг настоящий, а не игрушечный это: foldl', с хренью на конце. Зачем вообще надо было рекурсивный foldl делать? Почему версия функции, которая будет использоваться в реальных задачах обозначенна так? Где логика?

Все fold-ы рекурсивные, даже тот, что с хренью на конце («прайм» называется). Разница в том, что тот что с праймом - strict, в отличие от foldl, foldr. Соответственно, ему и особое название.

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

Вот ты мне лучше расскажи, почему фолдинг настоящий, а не игрушечный это: foldl', с хренью на конце.

Это не хрень, а штрих. Великое дело, что в языке такой простой значок производной.

AVL2 ★★★★★ ()

Намечается второй языкосрач за пару дней. Хотя интересно. Особенно как человеку, далёкому от функционального программирования, узнать о сравнениях.

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

Но это не логично, ведь просто fold - это же «игрушка», грубо говоря. Я понимаю, это мелочь, но создается впечатление своеобразное.

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

Задавай вопросы, сейчас спецы понабежат

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

> ЕМНП, fold' - иративный процесс

Мляааааа... Не надо быть яйцеголовым, чтобы понять, что такое fold':

http://www.haskell.org/hoogle/?hoogle=foldl'

foldl' f a [] = a

foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs

Ре-кур-си-я!

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

> Ре-кур-сив-на-я процедура.

Школьнег?

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

> сайты на хаскеле проще и качественней.

А можно реальный пример этих сайтов на хаскелле?

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

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

>Но это не логично, ведь просто fold - это же «игрушка», грубо говоря. Я понимаю, это мелочь, но создается впечатление своеобразное.

математически все абсолютно логично и верно.

Есть всеобъемлющий фолд. Он рассово прост и верен, но его использование может привести к срыву стека. Это не проблема программы, это чистый фейл аппаратной говноархитектуры, с ее анальными ограничениями на рекурсию.

Вот для таких огороженых и есть фолдинг-штрих который вносит некоторые ограничения но разворачивается в цикл. Для коня в вакууме он не нужен, а всем остальным велкам...

И что тут странного?

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

Вот именно:

математически все абсолютно логично и верно.


Но это все исполнять надо на реальном железе.

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

Есть всеобъемлющий фолд. Он рассово прост и верен, но его использование может привести к срыву стека. Это не проблема программы, это чистый фейл аппаратной говноархитектуры, с ее анальными ограничениями на рекурсию.

Это исключительно ограничения реализации. Никто не заставляет падать, когда аппаратный стек кончается.

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

Очень уж я далёкий для вопросов. В свободное время пытаюсь ковырять lisp/scheme. Применять негде, но, кажется, писать на «своих» языках стал по-другому. Особенно на JS. Правда углубиться никак не выходит.

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

JS не так уж плох, на самом деле, просто не повезло пацаном - в основном для веба его юзают.

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

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

Ну что за бред, сравнивать многофакторные проекты, зависящие от реализации в последнюю очередь. Вы там у себя совсем опланктонили чтоли?

Можно взять пхп, как педивикия, и потом обвешать ее костылями типа memcached и фронтэндами с альтернативной раздачей статики, а затем еще выпрашивать миллионы на новые сервера и в ус не дуть, но при чем тут скорость, простота или удобство ЯП?

Или взять перл и наваять на нем ливжорнал, а к нему на epool еще и присобачить свой перловый же джаббер-сервер. И тоже все в шоколаде.

Вопрос на 99% состоит в востребованности сервиса как такового, скорости набора команды прогеров и еще много чего, к чему ЯП параллельно.

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

> JS не так уж плох, на самом деле

Ну да, ну да. Слабо типизированный динамический язык с примитивными типами и глобальными переменными по умолчанию, в котором даже прототипное наследование не смогли нормально сделать. Что неудивительно, ведь к нему приложила руку одна известная фирма (она еще популярную ОС выпускает).

просто не повезло пацаном - в основном для веба его юзают.

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

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

>Но это все исполнять надо на реальном железе.

Основное правило функциональщика - математическая модель первична. Все, что делается, любая конструкция в коде, есть результат научной работы, и как результат, теории.

Есть проблема в реальном железе - ее алгоритмически решают и делают модифицированную конструкцию. Все по аналогии. Сидим на земле - живем по законам сэра Иссаака Ньютона. Летим к звездам с околосветовой скоростью - используем СТО.

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

Ага, уходите от вопроса, т.е. ни одного реального проекта на хаскелле назвать-то и не можете.

Неудивительно, ведь за 20 лет существования язык не набрал и 0.5% (по данным TIOBE)

Тролльте дальше.

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

>Это исключительно ограничения реализации. Никто не заставляет падать, когда аппаратный стек кончается.

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

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

>Ага, уходите от вопроса, т.е. ни одного реального проекта на хаскелле назвать-то и не можете.

бессмыслица не требует ответа.

Есть и сравнительные тесты и научные работы - гугл в помощь.

Неудивительно, ведь за 20 лет существования язык не набрал и 0.5% (по данным TIOBE)

мухи не ошибаются.

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

> Или взять перл и наваять на нем ливжорнал, а к нему на epool еще и присобачить свой перловый же джаббер-сервер. И тоже все в шоколаде.

и че? Не костыльно ведь

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

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

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

Он еще больший тормоз, чем кажется, потому как при этом еще и ленивый.

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

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

И вообще - даешь возможность быстро создавать абсолютно неэффективные программы!

Далее следует самая нееффективная в мире рекурсивная программа, которая может применяться для отопления дома холодными зимними вечерами. Число n на входе задает количество выделяемого тепла.

fib n | n == 0 = 1
      | n == 1 = 1
      | n >= 2 = fib (n-1) + fib (n-2)
sign ()

Почему в этом треде ещё нету Куки?

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

>и че? Не костыльно ведь

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

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

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

> но в основном велосипедностроительная
Конкретнее, пожалуйста.

без должного научного обоснования

Это шутка?

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

> Да ладно, для простого скриптинга чем он плох?

Тем, что он просто кишит возможностью просто опечататься и полностью изменить работу программы. Причем это нельзя отловить ни на этапе компиляции, ни даже на этапе выполнения - даже ворнинга не получите если забудете var, опечатаетесь в имени переменной, вызовите конструктор без new, или даже просто точку с запятой не поставите и т.д.

А вот в браузерах его возможности слишком огромны, это плохо.

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

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

>Конкретнее, пожалуйста.

Качни исходники да почитай. Я пару лет назад смотрел, удивлялся, как они смешивают сущности.

Это шутка?

ни разу. у Брина сначала были работы по ранжированию в поисковых системах, а потом уже была реализация. О работах Фицпатрика я ничего не слышал.

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

>Основное правило функциональщика - математическая модель первична.

Да нет же! Все намного проще! Это не стоит выеденного яйца. В хаскеле кардинально другая модель проектирования - комбинация. Повторяю по еще раз КОМ-БИ-НА-ЦИЯ!. Не декомпозиция, а комбинация. В другом, ..., направлении. Снизу-вверх.

Мы «собираем» нашу программу из кусочков с помощью комбинаторов. >> - комбинатор, >>= - комбинатор и даже (.) и ($) - комбинаторы. Монадические трансформеры - тоже. А еще есть целые библиотеки типа Parsec'а.

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

Плата за это - отказ от побочных эффектов.

И не нужно противопоставлять «ООП» и «ФП», между ними нет никакой пропасти. Учите Scala, наконец. Или на худой конец - F#.

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