LINUX.ORG.RU

GHC 8.8.1

 , ,


5

9

Тихо и незаметно, вышла новая версия известного компилятора языка программирования Haskell.

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

  • Поддержка профилирования на 64-битных системах с Windows.
  • GHC теперь требует LLVM версии 7.
  • Метод fail окончательно вынесен из класса Monad, теперь он находится в классе MonadFail (финальная часть MonadFail Proposal).
  • Явное применение типа (type application) теперь работает и для самих типов, а не только для значений.
  • forall теперь является ключевым словом вне зависимости от контекста, что позволяет использовать его в type families и rewrite rules.
  • Улучшен алгоритм компоновки кода для x86.
  • Множество других изменений.

>>> Полный список изменений

>>> Гайд по миграции кода на новую версию

>>> Скачать

★★★★★

Проверено: jollheef ()
Последнее исправление: Virtuos86 (всего исправлений: 4)
Ответ на: комментарий от turtle_bazon

Вполне себе рабочая лошадка без лишних наворотов.

У него система сборки непослушная. Ну в моих руках по крайней мере. Ну и синтаксис с подковырками, но то уже вопрос привычки.

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

Ссылка не репрезентативная. Там результаты зависят от левой пятки администратора.

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

Я просто сейчас Elm ковыряю - божественная штука для фронтенда, React+Redux здорового человека. Удивительно прямо как это может быть, чтобы фронтенд было писать приятно. Полное решение проблемы фронтенда без возни в помойке говнофрнймворков, в которых все отваливается.

Пишут что на основе Haskell+OCaml. Куда не гляну - обрезанный Haskell. Так как я OCaml не знаю, то вот интересно что там такого уникального

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

OCaml и ML разницы не так много

Как-то хотел писать именно на SML, но слишком он далекий от современного человека. Особенно когда вкладывают модуль в модуль и еще раз в модуль чтоб положить туда единственный тип t и передать в функтор, бррр...

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

Это вообще тренд - в старые языки добавлять элементы ML, новые сразу делать на основе. C++, C#, F#, Kotlin, Swift, Rust.

Влияние именно хаскеля - в Rust, Python, Scala. Это в основном ленивость и тайпклассы.

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

Вот я покажу короткий пример что такого особенного мне дает Elm.

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

Возвращаясь к Elm. Многие пишут web приложения на нем. Я пишу десктопное в WebkitGTK. Тоесть мне нужны иксы, которые у меня на десктопе. Тоесть трюк с SSH не работает, пробрасывать иксы будет слишком тормозно. И я этого не делаю…

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

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

Убожество, запрещающее удобство кодинга.

Вроде бы наоборот, позволяющее удобство кодинга. А с ReasonML/Pure, которые языки общего назначения по сути, которые транспилируются в JS все равно будешь терпеть муки приклеивания очередного React или GovnoJS.

В Elm, язык - Elm. DOM - Elm, CSS - Elm, Redux - Elm. Архитектура приложения - Elm Architecture. Книгу одну прочитал - и вперед. Если попытаешься прочитать вторую - не выйдет, там то же самое, ты уже знаешь 100%, иди пиши код

У ReasonML все же есть очень хороший юзкейс - мигрирование существующих приложений более мягкое. Можно заменять JS функции по одной, потому что язык не навязывает архитектуру. Что кто-то бы назвал, например я - не предлагает архитектуру, совсем. Elm предлагает простую и понятную

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

Интересно. А они то убрали как раз потому что пришли к выводам что выигрыш в производительности не стоит свеч

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

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

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

Ну ФП языки это вообщем те, кому за это все спасибо нужно сказать, но не факт что нужно пользоваться.

Мы дошли до того, что код в ФП стиле на расте работает быстрее чем цикл с индексом, и все ФП вытирается в ноль. Но концепцию ФП приходилось обкатывать годами на всех этих Лиспо/Хаскеллях чтобы потом взять практичную часть

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

Idris и ATS

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

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

Ответ один - взаимодействие c DOM. WASM хорошо работает когда он внутри себя работает ощутимое время. А когда он после сотни инструкций бежит сериализировать Rust строку в JavaScript строку, то это наоборот не окупается.

Кстати книжка по WebAssembly у меня следующая по списку. Прямо вся книжка о самом этом наборе инструкции и деталях взаимодействия

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

всячески рекомендую
Graham Hutton, Programming in Haskell, 2nd edition https://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/1316626229/
ёмко, лаконично, последовательно и по делу, стиль изложения напоминает университетские учебники (кто не привык к такому чтению, может будет и сложновато)
предварительных знаний никаких не надо, вся математика появится по ходу изложения (вторая часть книги, в районе функторов-монад), вот и получите представление, что именно она из себя представляет, и интересно ли вам дальше углубляться в хаскель

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

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

Почему у меня такое ускорение? Это особенность моей дисциплины. Нужно создавать лавину краткоживущих объектов. Вот здесь jemalloc и выстреливает.

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

Умение кодить при дизайне ЯП пользы никакой не несёт, скорее даже вредит.

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

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

Какие-то сферические в вакууме рассуждения...

В моем случае Haskell дает два огромных профита:

1) простота создания моделей;

2) контролируемость эффектов IO.

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

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

Сложно ли осилить Haskell, и по каким книгам, ресурсам учили его вы?

Не слишком. Учил по срачам на ЛОРе.

Какая математика требуется для письма на нём?

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

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

Ну ты просто не гоняешь гигабайты в рантайме. А я просто интересуюсь в основном обработкой звука и 3Д.

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

Может тогда просто Arena allocator и вперед? Вообще будет молниеносно

https://doc.rust-lang.org/1.1.0/arena/struct.TypedArena.html

То что сходу нагуглил, может есть лучше библиотеки. Вон интерфейс как лопата

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

Он всё так же требует минимум полгига места для самого себя и минимум два гига для зависимостей каких-нибудь самых простых проектов?

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

а как же пандок https://ru.wikipedia.org/wiki/Pandoc ?
функциональный язык же, преобразовать из одного формат в другой - прямо идеальная задача под него
что-то вроде f(формат1) = формат2, нужно реализовать f (причем никакого IO и прочих отвлечений)

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

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

А вот насчёт интероперабельльности то да, очень контроллирующая штука

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

Это вообще тренд - в старые языки добавлять элементы ML, новые сразу делать на основе. C++

Что из ML добавили в С++?

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

это самый быстрый one-directional binding во всей фронтенд экосистеме

Быстрее вот этого васяскрипта, написанного 3 года назад?

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

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

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

Не знаю, что @dave имел в виду под «ядром», но рантайм у OCaml очень маленький. В этом треде Croco спрашивал о статической сборке, и я показывал ему пример на OCaml.

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

Ну ты просто не гоняешь гигабайты в рантайме. А я просто интересуюсь в основном обработкой звука и 3Д.

Гигабайты и гоняю, но там не числа, а объекты.

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

там не числа, а объекты

Ну значит не сильно торопишься. А то закодил бы объекты числами, чтоб быстрее ехало

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

Ну я говорю о том, что одного человека в любом случае не хватит на создание нормального ЯП и его компилятора. Нужно минимум 2 человека — дизайнер и имплементатор.

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

Нужно минимум 2 человека

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

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

И каналы из crossbeam. Они быстрее и они multiple producer - multiple consumer.

Но это все идеи для улучшений стандартной библиотеки в будущем

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

Правда, я иногда совсем тебя не понимаю

Забей. Задачи разные. Если бы я кодил бизнесс-логику, с базой данных там возился, то хаскель бы сгодился.

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

Что из ML добавили в С++?

Вывод типов, (шаблонные) лямбды, новые объявления функций, optional, variant. В C++20 - шаблонные функции с auto, концепты. Паттерн-матчинг обсуждают, и structured bindings им навеяны.

Но в большей степени - с каждым новым стандартом ощущение от программирования на крестах всё больше ML-подобное. Субъективно.

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

Емнип, ты в области моделирования физических явлений разрабатываешь?
Если не секрет, работаешь в НИИ каком или в частной компании?

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

C ClojureScript проще, что это не десктопное приложение. Я откуда угодно захожу и пишу, оно там докомпиливает что надо и прямо в браузере всё обновляет. И всё сразу видно. Так вот на ходу прям ваяешь.

turtle_bazon ★★★★★
()

Поддержка профилирования на 64-битных системах с Windows.

Очень полезная информация для ЛОРа

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