LINUX.ORG.RU

Glasgow Haskell Compiler 9.12.1

 , ,

Glasgow Haskell Compiler 9.12.1

0

6

Привет, ЛОР!

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

Среди особенностей новой версии:

  • Расширение языка OrPatterns, позволяющее давать общий обработчик нескольким веткам сравнения по образцу.
  • Поддержка многострочных строковых литералов через специальный синтаксис: """строка""".
  • В бэкенд компилятора добавлены экспериментальная поддержка архитектуры RISC-V и поддержка SIMD инструкций для архитектуры x86 (ранее требовалось использование LLVM).
  • Удалена поддержка 32-битных версий ОС Windows, macOS и iOS. Поддержка 32-битных систем на базе Linux и BSD нетронута.
  • Улучшена работа сборщика мусора. В некоторых случаях скорость работы программ может увеличиться на 25%.
  • И множество других мелких фич, багфиксов и так далее.

>>> Скачать

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

★★★★★

Проверено: dataman ()
Последнее исправление: CrX (всего исправлений: 4)
Ответ на: комментарий от monk

Ну похоже на то. Вопрос терминологический. Что имели в виду Турчин с Романенко мне понять трудно, все мои подходы к Рефалу окончились ничем. По смыслу да, что-то типа глобальной оптимизации с предвычислениями.

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

А вброс-то хороший. Все кинулись объяснять соревноваться.

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

Товарищ писал на нём инструментарий проектирования камней в рамках стартапа. Насколько я знаю, успешно.

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

Монада — это моноид

Моноид — полугруппа с единицей

А вот теперь мне стало интересно. Что является единицей для монады IO? И что является умножением для монады Maybe?

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

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

Можно представить моноид на множестве функций с операцией композиции в качестве умножения. Для него действительно единицей будет identity. Но, например, монада Maybe никак не представима в виде такого моноида.

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

Единица она потому, что ничего не делает, кроме как оборачивает значение:

data MyMaybe a = MyJust a | MyNothing deriving Functor

instance Applicative MyMaybe where
  pure = MyJust
  MyNothing <*> _ = MyNothing
  _ <*> MyNothing = MyNothing
  MyJust f <*> MyJust x = MyJust $ f x
dura4ok11
()
Ответ на: комментарий от monk

Тогда эта функция должна входить в множество, на котором определена монада. Но монада списка чисел определена на множестве чисел.

Вот тут есть довольно хорошее объяснение для Scala: https://rockthejvm.com/articles/a-monad-is-a-monoid-in-the-category-of-endofunctors-scala (открывать через VPN).

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

tl;dr!

Так-то можно в 2 словах сказать. У монады есть нейтральный элемент return (он же pure) и бинарная операция композиции (>=>).

return :: Monad m => a -> m a
>=> :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c)

Но в Хаскеле методом инстанса вместо (>=>) является (>>=):

>>= :: Monad m => m a -> (a -> m b) -> m b

А практический совет такой: забить на наукообразные термины и смотреть по типам, что из чего получается

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

ИТОГО можно составить следующую иерархию вычислений в контексте

Functor — меняет значения, но не меняет структуру (например, fmap, примененный к списку, возвращает список той же длины)

Applicative — может менять и значения, и структуру по каким-то жестким правилам, не зависящим от того, что он меняет

Monad — может менять что хочет, как хочет (т.к. (>>=) вынимает значение из монады)

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

Но монада списка чисел определена на множестве чисел.

Вот тут ошибка. Категория — это множество и стрелки. Вот монады — это стрелки.

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

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

А вот дальше из сухой теории мы должны спуститься к монаде MayBe, Apllicative и всему тому прочему. Про это мне попадалось наиболее понятное описание у Брагилевского (Vitaly Bragilevsky, Haskell in depth, Manning, 2021) и в известном сетевом учебнике «О Хаскеле по человечески».

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

множеством тут является набор стрелок

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

Мне проще представлять, что монада контейнер (список, Maybe, IO, …) элементов (чисел, строк, списков, объектов, …), а не отображение одних функций, делающих из элемента контейнер, в другие такие функции.

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

До меня уже дошло. Я про >=> не подумал.

(>=>) тут вообще не причём. Ассоциативной операцией является natural transformation M x M -> M, то есть join.

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

А вот дальше из сухой теории мы должны спуститься к монаде MayBe, Apllicative и всему тому прочему. Про это мне попадалось наиболее понятное описание у Брагилевского (Vitaly Bragilevsky, Haskell in depth, Manning, 2021) и в известном сетевом учебнике «О Хаскеле по человечески».

Кстати, об авторе. Хотя не столько о нём, сколько о его творчестве, так сказать.

Наверное самое разумное объяснение монад для «среднего программиста» которое я видел это его видео которое называется «Монады - не приговор» ( Bad_ptr, и никакого бурито, зацени :) )

AndreyKl ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.