LINUX.ORG.RU

Glasgow Haskell Compiler 9.4.1

 , ,

Glasgow Haskell Compiler 9.4.1

3

4

Привет, ЛОР!

7 августа вышла новая версия Glasgow Haskell Compiler 9.4.1. На данный момент GHC является самым активно развиваемым компилятором для Haskell.

Среди изменений:

  • Полностью переписана поддержка ОС Windows. GHC перешёл на использование утилит из LLVM вместо MinGW.
  • Новый синтаксис \cases, аналогичный \case из LambdaCase, и позволяющий проводить сравнение с образцом более чем одного аргумента.
  • Улучшения в инфраструктуре плагинов компилятора: добавлены новый тип defaulting plugins и возможность для плагинов переписывать семейства типов.
  • Новый режим профилирования кода -fprof-late. Этот режим гораздо меньше конфликтует с различными оптимизациями кода, применяемыми компилятором.
  • Новые оптимизации кода и улучшенный анализ производительности кода компилятором.
  • Частично переписан код вывода ошибок сборки. Теперь возможен вывод ошибок и предупреждений в структурированной форме, что позволит улучшить взаимодействие со сторонними программами, такими как IDE и редакторы.
  • Улучшение поддержки проектов, состоящих из множества отдельных пакетов.
  • Возвращена поддержка «глубокого подчинения» (deep subsumption), которая была удалена в GHC 9.0.
  • Значительные улучшения в скорости сборки и потреблении памяти компилятором.

В дополнении к этому, вышла новая версия в ветке 9.2 – GHC 9.2.4, в которой также возвращена поддержка deep subsumption и исправлены многие баги.

Компилятор распространяется по модифицированной лицензии BSD.

>>> Release Notes

★★★★★

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

Все про них щебечут. Потому что сейчас async/await в почти любом языке имеет монадический интерфейс.

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

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)
Ответ на: комментарий от gns

Это моноид из категории эндофункторов. Возможно, ему не студентов надо слушать. У Бартоша Милевски есть годная серия постов «Теория категорий для программистов». Вот можно там начать. Там даже примеры на C++.

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

Никак. Оно сдохло. Лучше просто не трогай это и возьми что-то из того, что тебе в другом треде посоветовали.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от gns

Машина тьюринга мне не нужна, я плохо помню, что это такое, и лень смотреть в google вуиду её ненужности. У F# по сравнению в OCaml есть ключевые преимущества - возможность использовать библиотеку классов NET Framework (а библиотеки OCaml очень скудные) и возможность писать на F# не всю программу, а только часть, где это полезно (остальное на C#).

Haskell имеет отдельные недостатки: не нужен и скучен.

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

У F# по сравнению в OCaml есть ключевые преимущества

Языки F#,C#,Q# имеют один ОГРОМНЫЙ недостаток - они созданы и поддерживаются фирмой Micro$oft. Так что, спасибо - кушайте сами и ждите когда M$ вам по требованию Госдепа США внезапно его вам отключит.

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

Машина тьюринга мне не нужна, я плохо помню, что это такое, и лень смотреть в google вуиду её ненужности.

Дяденька, а вы точно настоящий программист?

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от MichIs

ждите когда M$ вам по требованию Госдепа США внезапно его вам отключит.

У госдепа абсолютно одинаковые возможности отключить вас что от F# что от Ocaml.

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

Машина тьюринга мне не нужна, я плохо помню, что это такое, и лень смотреть в google вуиду её ненужности

Что б вас такие же компетентные врачи лечили

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

Машина тьюринга мне не нужна, я плохо помню, что это такое, и лень смотреть в google вуиду её ненужности.

Толсто!

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

Это моноид из категории эндофункторов.

Я рад это слышать :) Обычно добавляют еще «Что не ясно-то?». Делать что с этим определением? И да, я не хочу опять сказку про белого бычка про то, что такое монада. Я это понимаю, Вы тоже это понимаете, и что в друг друга кидаться всем известным мемом? Даже в довольно популярном объяснении что монада — эта такая функция, которая замаскирована под структуру данных смысла для практического применения больше. Да разобрался Крокодил, разобрался, не волнуйтесь. Мы с ним долго беседовали на эти темы у меня за чаем. Поинт про студентов и доклады там был не в том, что понять про монады трудно, а в том, что объяснений много, и люди сами плохо понимают то, что говорят.

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

Вы давно конечный автомат реализовывали? А лексический анализатор давно писали?

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

Делать что с этим определением?

Окей, давай начнём с азов. Ты знаешь что такое полугруппа и моноид?

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

Это не функция.

На самом деле, проблема у тебя вот какая: монады – это очень общий и абстрактный концепт, и имея только одно определение, нихрена не понятно, как его применить на практике. Что не отменяет его практической ценности ни разу, потому что в итоге эти монады переизобретаются просто повсеместно.

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

M$ вам по требованию Госдепа США внезапно его вам отключит.

А Linux не боишься что отключат по твоей же логике?

Так то C# более открыт чем Linux, там хотя бы лицензия хорошая(MIT), а не GPL.

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

в итоге эти монады переизобретаются просто повсеместно.

Это ты про конкретно haskell или и про другие яп? Если про другие, то можно примеры переизобретения монад? Мне в голову приходят только списки и Optional. Но на них обычно норм наворачивают фукнционал, что проблемы из-за отсуствия монад в языке не ощущаются.

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

Окей, давай начнём с азов. Ты знаешь что такое полугруппа и моноид?

«Начнем с азов... Азовское море...» (с) Моноид — это полугруппа с единицей. :)

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

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

Ну генераторы в Питоне, они же conprehensions в Хаскелле. Хорошо про это написано в книжке Purely Functional Data Stuctures. Вот когда там идет речь о том, что функторы преобразуют одни структуры данных в другие, так вот такие функторы — это монады и есть.

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

вот такие функторы — это монады и есть.

Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой ©

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

А haskell умеет работать с БД?

Что значит умеет? Если клиент для работы с базой есть, то умеет, если нет, то надо написать, чтобы умел. https://hackage.haskell.org/packages/tag/database

Nexmean
()
Последнее исправление: Nexmean (всего исправлений: 3)
Ответ на: комментарий от gns

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

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

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

Кстати, Вы, вероятно, больше меня вот в этом понимаете. Если haskell-platform признана устаревшей, то как нынче выглядит стек для разработки? Есть какая-то how-to на эту тему? Я поставил cabal-install, так он мне все равно ghc восемь-какой-то вытянул. Ну и раньше я ставил библиотеки apt-get'ом и горя не знал. А сейчас как?

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)

Не, на самом деле 2 языка нужно оставить, а остальные уничтожить. Так как новый язык позволяет делать 2-3 фичи проще, НО он пока не умеет в 3D, не умеет потоки и тра-ля-ля. Питон и руби - поломка мажорной совместимости. Поломка мажорной совместимости означает АЛЬФА-версию! Курсовую студента, но не ЯП! Смысл? Народ хоть ПОНИмает, что их водят за нос по принципу «разделяй и властвуй»?

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от gns

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

Как насчёт объяснения «последовательное вычисление»? То есть, такое вычисление, где последующий шаг зависит от предыдущего.

Laz ★★★★★
()

Haskell подходит для разработки приложений с фокусом на IO? Открыть сокет, принимать условные key-value, писать в бинарный файл - сильно больнее чем на плюсах будет?

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

Есть три варианта, в порядке увеличения геморроя на твою душу:

  • stack
  • cabal + nix
  • cabal + ghcup или ghc из дистра

В первом случае ты пишешь stack new или stack init (они разное немного делают, почитай ман) и дальше можешь использовать готовый срез пакетов со stackage.org, который точно будет собираться.

Во втором, тебе нужно уметь в Nix. Если умеешь, то можно жить. Если нет, то упс.

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

Мой совет: используй stack.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

третий тоже очень неплох.
Cabal + GHC, который тоже сам собрал в песочнице.

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

Haskell подходит для разработки приложений с фокусом на IO? Открыть сокет, принимать условные key-value, писать в бинарный файл - сильно больнее чем на плюсах будет?

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

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

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

Как раз таки только в третьем случае не приходится самому развлекаться с зависимостями, ибо большую часть работы за тебя сделает cabal-install-solver. А вот в случае stack и nix тебе придётся подбирать вручную версии зависимостей, если:

  • чего-то не будет в package-set (stack)
  • какая-то версия библиотеки тебе не подойдёт (stack и nix)
  • какая-то библиотека в package-set окажется сломанной (nix).
Nexmean
()
Последнее исправление: Nexmean (всего исправлений: 2)
Ответ на: комментарий от Nexmean

ибо большую часть работы за тебя сделает cabal-install-solver

Давай честно, он делает крайне дерьмовую работу. Я ещё успел застать Cabal Hell и больше не хочу такого. LTS снапшоты из stackage – это буквально мана небесная.

чего-то не будет в package-set (stack)

Просто в extra-deps суёшь нужную версию и всё. От них всё равно никуда не деться, если у тебя проект чуть сложнее Hello World, потому как через них проще всего подключаются пакеты из другого репозитария.

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

Я ещё успел застать Cabal Hell и больше не хочу такого.

Так у нас тут не сеанс у психолога, чтобы делиться детскими травмами. Сейчас подход cabal nix-style builds наименее болезненный в плане менеджмента зависимостей, а весь тулчейн, включая HLS, устанавливается через ghcup.

Просто в extra-deps суёшь нужную версию и всё. От них всё равно никуда не деться, если у тебя проект чуть сложнее Hello World, потому как через них проще всего подключаются пакеты из другого репозитария.

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

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

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

Учитывая, что большая часть нужд часто покрываются собственно снапшотом, это не то чтобы проблема.

С другой стороны, cabal от этого вообще никак не спасает, потому что тебе точно так же придётся добавлять руками зависимости в проект. Плюс, если у тебя вылезут конфликты зависимостей между двумя либами, страдать будешь тоже сам. Upper bounds в библиотеках до сих пор очень и очень многие не проставляют, например. Да и вообще какие-то ограничения по версиями зависимостей.

Я всё жду, когда в cabal добавять нормальную поддержку снапшотов как в stack. Т.е. cabal.config с version bounds уже можно подключить, но вот оверрайдов до сих пор нет и хз когда будут.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от Laz

Это хорошее объяснение. Сходные мысли появились и у меня. Я пришел к выводу, что монада — это абстракция процесса, проходящего во времени, абстракция потока управления, если угодно.

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

Ну, вот, кстати, третий вариант, а именно связка stack+cabal-install+ghcup (и language server в придачу) и предлагается сейчас по умолчанию как рабочая. Ладно, буду учиться жить с этим.

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

ужасно выглядит. не похоже на все имеющиеся языки, потому непонятно в отличии от Java, Rust, Ruby, Perl и множества языков на которых я не пишу, но синтаксис воспринимаю.

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

Это правда. Синтаксис ML-образный. Туда же Ocaml, Miranda, Hope и куча чего еще, Пролог отчасти туда же. Есть другое направление для любителей атомов и скобок  — Lisp, Scheme, Closure... Порог входа в ФП довольно высокий, да.

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

Пожалуй, так. Без монады нет control flow, потому что нет зависимости между шагами. Предыдущие вычисления никак не влияют на последующие.

Вообще, мне кажется, вся эта монадическая штука настолько проста и естественна, что все объяснения про коробки с буррито только вводят в ступор. За монады проще пояснить продемонстировав то, чего они не могут. Например, независимо провалидировать все поля в форме ввода и собрать в кучу потенциальные ошибки аппликатив может, а монада - нет, встанет раком на первой ошибке. Или вот, скажем, запустить несколько параллельных вычислений в монаде не выйдет, а в аппликативе - пожалуйста.

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

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

Ну Writer же ну.

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

про Окамл забыли.

Ну не то что бы забыли. Есть он и в продакшине, и компилятор последнее время довольно активно пилят. Я даже 50 строк недавно навоял на нём.

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

У Бартоша Милевски есть годная серия постов «Теория категорий для программистов».

емнип это книга, и серия видеолекций на ютубе под его же авторством.

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

Дяденька, а вы точно настоящий программист?

та ладно, зачем среднему веб-питонисту-пхп-шнику-явисту МТ?

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

У госдепа абсолютно одинаковые возможности отключить вас что от F# что от Ocaml.

окамль что с закрытой лицензией стал уже?

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

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

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

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

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

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

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

Если, только лишь дёргая rest api твоего сервиса, можно выполнить любое произвольное вычисление (подразумевая бесконечные ресурсы) — поздравляю, у тебя rest api полон по Тьюрингу!

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

спасибо. примерчик бы. т.е. ну вот наверное надо вариэйблы ставить уметь.. и цикл while. так что ле?

/set/a/1
/set/b/true

/while/b/(a=a+1)

или как то попроще?

----
или просто бесконечно дёргаем?
например
call_my_rest('/set/a/1')
call_my_rest('/set/b/true')

b = call_my_rest('/get/b')
while b :
  b = call_my_rest('/get/b')
  a = call_my_rest('/get/a')
  if a > 0 then 
    call_my_rest('/inc/a') 
  else 
    call_my_rest('/dec/a')


просто хотелось бы понимать о чём речь, прежде чем разговор вести дальше...

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.