LINUX.ORG.RU

Вышел Glasgow Haskell Compiler 7.10.1

 ,


1

4

27 Марта 2015 года вышла новая версия компилятора и интерпретатора функционального языка программирования Haskell.

Из интересного:

  • Новое расширение StaticPointers для распределенных вычислений: обзор
  • Поддержка плагинов в модуль проверки типов
  • GHC начал понимать опцию -g, которая добавляет отладочную DWARF секцию для отладчиков (например, gdb) и профилировщиков (например, perf)
  • Встроенная библиотека работы с числами Integer использует более эффективный распределитель памяти.
  • Улучшена поддержка динамических библиотек на архитуетурах PowerPC, SPARC, Itanium
  • Исправлено непомерное потребление памяти при компиляции типов с большим числом конструкторов в режиме -O2 (SpecConstr bug)
  • И многое другое

Изменения, влияющие на обратную совместимость:

>>> Все изменения

★★★

Проверено: Shaman007 ()
Последнее исправление: sf (всего исправлений: 2)

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

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

permute :: [a] -> [[a]]
permute [] = [[]]
permute (x:xs) = concatMap (\h -> interleave h x []) (permute xs)
    where 
        interleave [] x ts = [x:ts]
        interleave hs x ts = [hs ++ (x:ts)] ++ interleave (tail hs) x ((head hs):ts)
chuzhoi
()
Ответ на: комментарий от anonymous

Интересует такой вопрос: как сейчас акселерейт в сравнении с репой в плане качества имплементации?

Сорри, не в курсе. Я на хаскеле занимаюсь быдлокодингом: распарсить там чего-нибудь, запилить веб-сервис с JSON и шлюхами, что-нибудь по FFI подёргать... С числодробилками я дел не имею.

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

Точное определение вы вряд ли найдёте, но просто представьте, что ваша программа используется для управления светофорами всего города. То есть: 1. Она должна быть надёжна как молоток. Никакие левые данные не могут её грохнуть, нет никаких утечек памяти, делений на ноль, данных шрёдингера и прочей аномалии. 2. Программа не может обновляться еженедельно, ибо тестируется месяцами(!) на малозначимых участках и только потом попадает в продакшен. То есть перед тем, как вы отдадите программу, вы со всей серьёзностью должны подойти к тому, что ранее полугода вам не дадут ничего исправлять/патчить/перезагружать и т.п. 3. У «интыпрайза» крайне дорогое время простоя (а представьте себе биржу!!). Запущенная система не может ждать, пока ты сконвертишь данные или перестроишь граф связей - всё должно быть максимально быстро. 4. Интыпрайз - это как правило ещё и интеграция со всем легаси-дерьмом, которое писалось годами на всяких коболо-фортранах, плагинах на бейсиках, сервисах на PL/1 и все они имеют свои форматы, поменять которые уже никто не сможет. Добро пожаловать в каменный век! 5. Интыпрайз крайне инертен. Нельзя так просто взять и сменить XML на JSON (даже если это влечёт море профита) - потому что к вашей системе прилепили ещё десяток системочек, которые увы, кроме XML ничего не разумеют. Кроме того, такие апгрэйды ещё придётся тестировать, проверять корректность, мама не горюй! 6. Интыпрайз не торопится за прогрессом и в плане железа - если по городу установлены платы, старые как говно мамонта и у всех RS232, можешь забыть про свой «симметричный USB» - бери кабель и ищи такое же совместимое дерьмо, через которое можно прошивать этот хлам. Это одна из самых грустных частей.

Жабка-то ни по одному пункту не попадает. Или это ты насочинял про сферический энтерпрайз в вакууме?

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

ты можешь предложить более эффективную перестановку simple linked list? =)

Нет. Я только про то что при больших размерах списка permute будет тормозить и генерить тонны мусора.

Хотя, с другой стороны... Я вон файлы по 500к парсеком из String ([Char] для тех кто не в курсе) разбираю. И ничё, терпимо так... А за пару лет работы эта штука спасла несчётное количество моих неврных клеток, и не только моих... Потому что неоднократно убирала дерьмо за вышестоящей всей-такой-ынтырпрайз системой, когда она позорно обисралась.

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

ты можешь предложить более эффективную перестановку simple linked list? =)

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

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

или сделать типа "моноидов на верёвках"

и вообще вырисовывается теоркатегорная СУБД с логической моделью данных через монады и запросы катаморфизмами (а данные — в деревьях на которых задана мера моноида).

ты можешь предложить более эффективную перестановку simple linked list? =)

суперкомпиляцией: сразу CTFE сгенерировать исходник как последовательность операций, то есть, список выражений, то есть, монаду. то есть делать все вычисления во время компиляции при запросах через «моноиды на верёвках» и сразу генерить самое оптимизированное, эффективное.

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

просто перестановки это тоже моноид (см. статью про инкрементальные регэкспы с примером такого моноида), в монаде перестановок.

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

или сделать типа «моноидов на верёвках»

О! Круто! Каюсь, о фпрог.ру я напрочь забыл. Надо обязательно перечитать.

Macil ★★★★★
()

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

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

А ради неанонимного комментария? Ведь правда интересно увидеть элегантное решение! Расчет К-means это, конечно, круто, но хотелось бы по-существу.

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

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

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

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

7.10 — это оба мажорные номера 7.10.1 — первый минор в мажоре 7.10 (нумерация с 1)

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

Ну т.е., EvgenijM86, ты проблеял возразил и позорно слислся ограничился отговорками?

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

императивке решаются проблемы из серии 2+2

А в хаскеле тех же проблем придумывают зигохистоморфные препроморфизмы

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

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

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

вообще: кажется, что тот же MUMPS, например, — это СУБД, где логическая модель данных это M-кубы, а физическая — это BTree (и индексы — это строки) — это по сути частный случай «верёвок, измеримых моноидами». когда моноид — это конкатенация строк, единица моноида — пустая строка, а верёвка — это BTree с перебалансировкой.

тогда более другие СУБД — это общий случай верёвок и деревьев типа finger tree, с более другими моноидами.

интересен конечно случай, когда можно задавать запросы или pretty printing катаморфизмами и вообще задавать в СУБД модели соответствующие монадам, категориям или топосам Гротендика.

то есть, использовать тот факт, что на основе теории категорий задаётся «уравнение в морфизмах» (в этом смысле например, инварианты, то есть законы сохранения вида интеграл от блаблабла = 0 можно переформулировать как интеграл это произведение цепи на коцепь и далее расписать для дифференциала функции и дифференциала аргумента где там цепь, где коцепь и какие там монады с морфизмами; тоже для производных и в общем, групп, а не просто монад; пространство это кольцо функций).

и набрать базу знаний для известных «уравнений в морфизмах» и инвариантов.

тогда подобная теоркатегорная СУБД позволит переносить свойства аксиом (конструкторов в категории) и теорем (функторов в категории) между различными частными науками — например, аналогично тому как топосы Гротендика позволяют переносить между когерентными теориями.

или, переносить между различными моноидами с разными мерами. получается что-то типа «моноида(?топоса) на верёвках, измеримых моноидами».

было бы прикольно поковырять такую вот «теоркатегорную СУБД», ага.

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

Пример злостного сжатия: (...)

Любой из вариантов по ссылке короче библиотечного. В бибилотеке оно такое не ради «сжатия».

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

Нет. Я только про то что при больших размерах списка permute будет тормозить и генерить тонны мусора.

Почему это?

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

там следующий после хаскеля язык, Icon/Unicon тоже достаточно упоротый интересный: с ковыражениями и корутинами, и goal-directed computing, вот это всё. ЕМНИП noweb какой-то версии был на Icon написан.

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

Бред! Интерпрайз, это когда постоянно всё ломается (by design), но за этим следит целый отдел дресированных обезьян.

anonymous
()
Ответ на: Болото от seyko2

Муахаха! Это болото и есть. Когда вот такие старые пердуны будут годами упираться что-то переделавать, часами просиживая штаны на «митингах», (даже если там работы на час). Стабильность и интерпрайз софт, это взаимоисключающие параграфы, просто потому, что из-за инертности там иногда такого говна наворачивают... А стабильность конечной системы достигается многократной избыточностью железа и толпой дресированных обезьян обслуживающих такой вот «ынтырпрайз» софт.

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

К тому же, еще и питонщик.

Фу какая мерзость.

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

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

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

а) оценить качество платфомы; б) обучиться эталлоному стилю разработки

И оба раза мимо. Где угодно, только не в base, там либо вот такая вот примитивщина, запиленная на ранних стадиях без каких-либо обоснований вообще по желанию левой пятки, либо лютые GHCизмы в которых без бутылки не разберешься.

Его давно пора разделить на части, но во-первых, это неподъёмная задача, а во-вторых, всем пофиг. Попытка запилить пакет haskell2010 (который всё-равно тащил за собой base) популярности не снискала, что неудивительно.

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

в примере выше не примитивщина, если что..

Ну, наверное лучше различать понятия «тривиальный» и «примитивный». Прмитивный, это значит что в большинстве случаев можно использовать как неделимый строительный блок без особой нужны разбираться как оно внутри устроено.

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

> а) оценить качество платфомы; б) обучиться эталлоному стилю разработки

И оба раза мимо. Где угодно, только не в base, там либо вот такая вот примитивщина, запиленная на ранних стадиях без каких-либо обоснований вообще по желанию левой пятки

А обоснования к примитивщине нужны? Чем она плоха? Почему является плохим примером?

либо лютые GHCизмы в которых без бутылки не разберешься.

Примеры?

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

Примеры?

Ну открой исходники и посмотри. Можно и онлайн, бесплатно и без СМС. Даже беглый просмотр иерархии модулей позволяет сразу определить где примитивщина, а где GHCзмы.

Фишка base в том, что для разработки base нельзя использовать ни один «внешний» пакет... Потому что они *все* от него зависят.

Даже text, даже bytestring, даже stm, async и io-streams. Вот и прикинь какие сложности встают перед теми кто пытается создать (или изучить), например, IO-manager...

Давно уже пора разделять на несколько пакетов по принципу: чистые функции, низкоуровневые механизмы, высокоуровневые реализации и т.д. Но, это реально неподъёмная задача, да и пофиг всем.

Поэтому, base — это *совсем* не тот пакет с которого нужно начинать знакомство.

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

Мне не понравилось то, что он позволяет множество алгоритмов записывать в сильно сжатой форме.

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

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

Ну открой исходники и посмотри. Можно и онлайн, бесплатно и без СМС. Даже беглый просмотр иерархии модулей позволяет сразу определить где примитивщина, а где GHCзмы.

А сам - не? :]

Фишка base в том, что для разработки base нельзя использовать ни один «внешний» пакет...

Никак не противоречит тому, что base - нормальный пакет для обучения.

Потому что они *все* от него зависят.

Естественно, он реализует (и всегда реализовал) функции и модули из стандарта haskell. Точно так-ж,е как C программы зависят от libc.

Вот и прикинь какие сложности встают перед теми кто пытается создать (или изучить), например, IO-manager...

Никаких? IO manager лежит в libraries/base/GHC/Event/ и в rts/posix/Select.c.

Давно уже пора разделять на несколько пакетов по принципу: чистые функции, низкоуровневые механизмы, высокоуровневые реализации и т.д. Но, это реально неподъёмная задача, да и пофиг всем.

Зачем?

Поэтому, base — это *совсем* не тот пакет с которого нужно начинать знакомство.

Это ни из чего не следует :]

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

Конкретно - с чего лучше начать обучение, если не с base?

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

Точно так-ж,е как C программы зависят от libc.

Не точно также! А точно так же как раньше программы зависели от Qt3. В Qt4 ввели модульность, в Qt5 — продолжили.

Естественно, он реализует (и всегда реализовал) функции и модули из стандарта haskell.

Бху-га-га-га! Кто сказал что стандарт языка должен быть реализован в одном модуле? Тем более, когда есть по крайней мере чёткое разделение на pure-impure?

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

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

Точно, матан тоже фрики придумали, им так забавнее. Нормальные люди используют колкуляторы и дальше 2+2 не заходят, ибо не нужно.

anonymous
()
Ответ на: Болото от seyko2

В этом болоте мозги сохнут.

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

с чего лучше начать обучение, если не с base

attoparsec - aeson - scotty. Если бы я кого-то бы обучал, то построил бы курс вокруг этих пакетов.

1. Можно писать реальные (tm) программы.

2. Покрывается достаточно большое количество идиоматики.

3. Относительно несложно.

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

А каково твое мнение о Hakyll? Я пользуюсь на уровне ковыряния html темплейтов и редактирования маркапов для содержания. В код особе не лез - для говнобложика не требуеся. Пока все устраивает.

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

А каково твое мнение о Hakyll?

Никогда не пользовался. Без разницы, на самом деле. Куда бы ты не лез, а путь-то один... Сегодня играешься с маркапом для хакила, а завтра куришь дикие теоретические статьи.

И да... Если тебе некомфортно каждый день ощущать жалким, никчёмным, тупым ничтожеством — причём, чем дальше ты будешь двигаться по дао тем сильнее будет чувство — то хаскель не для тебя.

Два раза в год это чувство достигает эпических величин, т.к. два раза в год выходит HCAR. Чтиво не для слабонервных.

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

ты так говоришь «ощущать жалким, никчёмным, тупым ничтожеством», как буд-то это что-то плохое. HCAR не курил, спасибо за наводку.

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

> Естественно, он реализует (и всегда реализовал) функции и модули из стандарта haskell.

Бху-га-га-га! Кто сказал что стандарт языка должен быть реализован в одном модуле?

А в base и не один модуль.

Примеров плохого кода base не добиться. Ладно, будем обсуждать «модульность».

Тем более, когда есть по крайней мере чёткое разделение на pure-impure?

Предлагаю ответить на каждую строку: «pure» или «impure» (что бы это не значило :])

sequence :: Monad m => [m a] -> m [a]
error :: [Char] -> a
seq :: a -> b -> b
class IO ...
class [] a ...
class Maybe ...
class Monad ...
class Monoid ...
instance Monad IO ...
instance Monad Maybe ...
instance Monad [] ...
sf ★★★
() автор топика
Ответ на: комментарий от Macil

Если тебе некомфортно каждый день ощущать жалким, никчёмным, тупым ничтожеством — причём, чем дальше ты будешь двигаться по дао тем сильнее будет чувство — то хаскель не для тебя.

Какие дешёвые понты, позорище.

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