LINUX.ORG.RU

GHC 8.2.1

 ,


1

5

Вышла новая версия компилятора Glasgow Haskell Compiler.

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

  • улучшение производительности компилятора;
  • улучшена поддержка генерации отладочных символов в формате DWARF;
  • в рантайм языка добавлена поддержка систем с NUMA;
  • более широкая поддержка полиморфизма относительно типа хранения данных (levity polymorphism);
  • поддержка оптимизации точек соединения (join points) в коде, позволяющая в некоторых случаях сильно увеличить производительность;
  • новая система модулей Backpack, добавляющая новые широкие возможности абстракции кода от конкретных типов данных;
  • поддержка компактных регионов памяти (compact regions), позволяющая увеличить производительность сборщика мусора;
  • компилятор теперь может выдавать цветные сообщения об ошибках;
  • начальная поддержка архитектуры AArch64;
  • улучшена воспроизводимость сборок;
  • многочисленные изменения в Template Haskell.

Помимо этого, прекращена сборка 32-битных пакетов под CentOS 6, а также начата официальная сборка GHC под FreeBSD и OpenBSD для архитектуры amd64.

>>> Скачать

>>> Release Notes

★★★★★

Проверено: jollheef ()
Последнее исправление: sudopacman (всего исправлений: 9)

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

На какой, мне интересно. Из современного я только core.logic у Clojure вспомнить смогу.

В LispWorks есть модуль такой: http://www.lispworks.com/products/knowledgeworks.html

По-моему так вполне живо. Могу сильно ошибиться, но, кажется, в той же Бриташке какая-то база в правоохранительных органах на этом чуде работает

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

На какой, мне интересно.

Я в одной такой вакансии видел Python.

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

Крайне сомнительно. Ты говоришь о бизнесе, мэйнстриме, но как раз он и не любит языки, в коотрых разбирается пара десятков яйцеголовых на всю страну. Да и откровенно, НЕТ ничего в Хаскеле, чего нельзя было бы написать на C# (пусть ценой раздутия кода).
Точнее, тут так: C# достаточно универсальный язык, на котором можно решить любую задачу. Поэтому преимущество Хаскеля именно как «решателя конкретной проблемы» - нулевое. А вот в плане сопровождаемости и заменяемости программистов, C# ещё даст фору!

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

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

НЕТ ничего в Хаскеле, чего нельзя было бы написать на C#

Нет ничего в C#, чего нельзя было бы написать на С.
Нет ничего в C, чего нельзя было бы написать на ASM.
Нет ничего... ну ты понял.

Unununij ★★★★
()

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

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

Да и откровенно, НЕТ ничего в Хаскеле, чего нельзя было бы написать на C#

Можно и из хлеба сделать троллейбус, но зачем?

Aswed ★★★★★
()

Кто тут в теме есть, скажите пожалуйста, у хаскеля есть какие-нибудь актуальные компиляторы кроме GHC? cast qnikst.

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

НЕТ ничего в Хаскеле, чего нельзя было бы написать на C#

Тут вопрос стиля мышления. Если кодишь что-то из математической логики удобнее изъяснятся на функциональном языке. Оно то можно конечно сделать interface Term { bool eval(); } class Conjuction: Term { ... }, но приятного в таком коде мало, особенно учитывая, что мозги не успевают перестраиваться с «Терм это переменная или конъюнкция термов» на классы когда регулярно поглядываешь в книжку.

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

у хаскеля есть какие-нибудь актуальные компиляторы кроме GHC?

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

Сейчас стараются широко использовать GHC, например, даже для генерации JavaScript (ghcjs) и генерации байт-кода Java (eta-lang)

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

но далеко не все соберёт

Вся кабала пакетов чисто под ghc. Впрочем встречаются древние поделия под иные компиллеры, но их еще попробуй скачай (сайты давно сдохли).

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

Конечно будет. И пюреха будет скорее собираться, дабл профит.

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

Был еще норм ajhc, но авторы на него забили и слили с jhc.

anonymous
()

Кстати, зря про анбоксед суммы не упомянули. Раз тут собрались эксперты, вопрос: в каком состоянии форк ghc от tweag.io?

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

Работа то linear types ведётся, можно для простоты брать докер образ и экспериментировать, но работы там ещё уйма. Поидее даже proposal вместе с SPJ не написали, т.к. там есть инетересные вопросы, которые нужно дорешать. Но уже компиляет и что-то делать можно.

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

Кстати, зря про анбоксед суммы не упомянули

Я много чего не упомянул. Допиливание OverloadedRecordFields, например.

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

НЕТ ничего в Хаскеле, чего нельзя было бы написать на C#

что такого можно написать на этом вашем С#, что нельзя написать на COBOL?

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

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

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

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

Потокобезопасность = тормоза в одном потоке. Нужно писать многопоточно - узай специализированные контейнеры. Да и мутексы никто не отменял. Кроме того для суровых многопоточных приложений ни окамл ни хаскель особого смысла использовать нет. Есть же целая палитра инструментов от ерланга до раста. Те разработки, которые велись в функциональном программировании в сторону многопоточности не особо впечатляют. Message passing дает гораздо больше, нежели простая иммутабельность данных.

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

Потокобезопасность = тормоза в одном потоке.

Нет.

Нужно писать многопоточно - узай специализированные контейнеры.

Без комментариев.

Да и мутексы никто не отменял.

Без комментариев.

до раста.

В Rust нет и не предвидится green threads.

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

Не особо впечатляют кого?

Message passing дает гораздо больше, нежели простая иммутабельность данных.

Ты про Cloud Haskell слышал?

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

вот среди хаскелистов физиков, кстати очень много.

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

green threads.

Они то тут причем? С ними то и проблем никаких нет кроме того, что они на одном ядре живут.

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

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

Где? Haskell/Java/.net/Erlang они мапятся на множество системных тредов.

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

мапятся на множество системных тредов.

Тогда это уже не совсем green, а комбинация с native. Кстати вкусная фича, жалко что кроме тормозного ерланга ни одной популярной платформы с поддержкой такой штуки нет. Ну в смысле с message passing..

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

Это самый что не на есть green. m:n который.

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

Тогда это уже не совсем green, а комбинация с native.

Это совсем green, зеленее некуда просто.

Кстати вкусная фича, жалко что кроме тормозного ерланга ни одной популярной платформы с поддержкой такой штуки нет. Ну в смысле с message passing..

Ты, кажется, нифига не знаешь о том, почему в Erlang сделана передача сообщений и убрана возможность шарить данные между тредами. В Erlang у каждого треда своя куча, и, соответственно, GC не требуется останавливать весь мир во время сборки мусора, как это сделано во всех других языках с GC. Минусом этого подхода является как раз необходимость кидать сообщения и копировать (да, я знаю, что там есть пара хаков) данные между тредами.

Алсо, Cloud Haskell и Akka.

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

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

О каких именно разработках речь?

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

По работе нам вроде хватает и фреймворков и библиотек, написать свой DSL в хаскеле - проще простого, и это делает всякий проект под свои задачи. Для веба посмотрите в сторону серванта http://haskell-servant.readthedocs.io/en/stable/ едва ли есть где-то что-то аналогичное, для этого как минимум должна быть настолько же мощная система типов.

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

Если green треды на разных ядрах, то шарить данные между ними физически опасно.

Физически? Током долбанёт, что ли?

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

Если green треды на разных ядрах, то шарить данные между ними физически опасно.

физически опасно

Если такое происходит, мейнтейнерам GHC отсылается письмо и они ломают тебе ноги? Или что?

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

Всмысле по физическим причинам запишет в память мусор при одновременной записи.

По каким таким физическим причинам? Что ты вообще несёшь? И что ты имеешь ввиду под «одновременной» записью?

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

Скорее всего он имеет ввиду это:

import Control.Concurrent.Async
import Control.Monad
import Data.IORef
main = do
  foo <- newIORef 0
  let worker = replicateM_ 1000 $ modifyIORef foo (+1)
  _ <- concurrently worker worker
  print =<< readIORef foo
qnikst@qwork ~ $ ghc -threaded 1.hs
[1 of 1] Compiling Main             ( 1.hs, 1.o )
Linking 1 ...
qnikst@qwork ~ $ ./1
2000
qnikst@qwork ~ $ ./1 +RTS -N
1328

но объяснять почему это не причина и все в прядке даже не хочется.

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

делай скидку на то, с кем разговариваешь :]

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

Правда тут пофиг грин треды или не грин

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

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

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

ващет если внимательно посмотреть на выхлоп - то не работает, а работает atomicallyModifyIORef которое добавляет memory barriers.

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

Ну оно int. Я просто надеялся что оно выливается в atomic, просто (+1) не распарсился в atomic_increment

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

пока разные процессоры видят разное состояние памяти после обновления.

Сфига ли? Это был бы жирный баг в процессоре. В однопроцессорных системах один контроллер памяти вне зависимости от количества ядер, а в многопроцессорных от этого NUMA защищает.

Но если у тебя есть тест, было бы интересно это увидеть.

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

Там защита стоит, потому и работает.

Защита чего от чего?

Я просто надеялся что оно выливается в atomic, просто (+1) не распарсился в atomic_increment

Потому что atomic — это медленно.

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

сходу не найду но или в what every programmer should know about memory или в is parallel programming hard and what we could do about it, пример с диаграммами был.

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

сходу не найду но или в what every programmer should know about memory или в is parallel programming hard and what we could do about it, пример с диаграммами был.

В первой вроде не было. Если найдёшь, ткни меня.

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