LINUX.ORG.RU

GHC 9.0.1

 , ,


0

3

Вышла новая версия компилятора языка Haskell — Glasgow Haskell Compiler. Из-за значительных изменений была увеличена мажорная версия компилятора.

Основные изменения:

  • Добавлена реализация линейных типов (расширение LinearTypes). Линейные типы позволяют отслеживать использование ресурсов на стадии компиляции и могут использоваться, среди прочих вещей, для статического управления памятью в стиле Rust.
  • Новая встроенная библиотека для работы с числами неограниченного размера: ghc-bignum. Её использование помогает с переносимостью в системах, где библиотека GMP по каким-либо причинам недоступна.
  • Улучшения в кодогенераторе, значительно увеличивающие производительность многих программ.
  • Улучшения в коде проверки сравнения с образцом (pattern matching), позволяющие находить лишние проверки в случаях, где раньше это было невозможно.
  • Новый IO-менеджер для платформы Windows. Раньше на Windows был использован IO-менеджер для Unix-систем, что приводило в худшей производительности на этой платформе. Также прекращена поддержка Windows Vista. Теперь для сборки и запуска программ на Haskell требуется минимум Windows 7.
  • Добавлено расширение QualifiedDo, расширяющее возможности по переопределению поведения кода.
  • Для сборки с LLVM теперь требуется версия 9.0 или выше.

Также недавно был выпущен корректирующий релиз GHC 8.10.4, исправляющий несколько багов в ветке 8.10.

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

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

хаскель умеет автоматически исправлять ошибки. открой ghci, набери fix error и удивись!

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

Не вижу тут оптимизаций

Ок, как написать Maybe так чтоб для некоего «newtype NotNullInt = NotNullInt Int» Maybe NotNullInt представлялся в памяти как Int и кодировал Nothing как 0? В расте такое реализовано. В хаскеле такое не возможно в принципе, так как для того чтоб реализовать монаду, Maybe должен быть параметричным и не может быть реализован по-разному для разных параметров типа. Тоесть можно написать тип MaybeNotNullInt, но невозможно реализовать этим типом монаду уже никак, хоть убейся

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

Я всё это к тому, что если человек действительно чем-то интересуется, то наличие вакансий для него вторично относительно его интереса.

Конечно хочется и рыбку съесть и на что-то присесть, но так как правило не бывает. Только у 1% везунчиков\трудяг и 99% IT-бакланов которые проецируют себя на этот 1%.

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

А выбирать следуя принципу, кого сегодня больше рынок требует, говнодавов или жопотёров, ребят вы не ту профессию выбираете.

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

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

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

Ок, как написать Maybe так чтоб для некоего «newtype NotNullInt = NotNullInt Int» Maybe NotNullInt представлялся в памяти как Int и кодировал Nothing как 0?

Как описанное тобой здесь относится к тому коду? В расте это реализовано на уровне компилятора.

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

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

никак. продолжай писать на русте.

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

Ну тогда там будет указатель. Это тормоза. Пусть хаскель и не про реалтайм, но можно придумать пример, где такого плана оптимизация изменит асимптотику алгоритма

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

Если ты сделаешь поле Strict, то хачкель умеет их инлайнить и указателя не будет. Будет твоё значение инта плюс тэг конструктора.

Гугли про оптимизацию unpack strict fields.

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

Я приводил пример. С таким же успехом можно придумать случай когда для работы некоторой реализации Monad X нужен квадратичный алгоритм от количества элементов типа a, запихнутых в X a, в то время как X Int можно реализовать за NlogN за счет хранения элементов в дереве по сравнению значений.

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

Ты, кажется, не совсем понимаешь, что не так с твоим кодом в принципе. Код, работающий с Monad, ожидает, что законы этого класса выполняются. Из этого предположения следуют, например, оптимизации через rewrite rules и прочее.

Если ты хочешь написать какую-то специальную функцию для специального случая, который этим законам не удовлетворяет, тебе класс Monad нахрен не сдался. Всё, точка. Попытки его таким образом использовать приведут к куче разных лулз^Wбагов, которые ты наверняка не хочешь получить.

С таким же успехом можно придумать случай когда для работы некоторой реализации Monad X нужен квадратичный алгоритм от количества элементов типа a, запихнутых в X a, в то время как X Int можно реализовать за NlogN за счет хранения элементов в дереве по сравнению значений.

Для этого просто делают отдельный тип и используют его. IntMap, IntSet и подобные, например. То, что ты предлагаешь, это vector bool из C++, который до сих пор выпилить не могут, хотя им пользоваться просто невозможно.

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

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

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

Да дело не в рашке, это скорее особенность современного менталитета в РФ. Безынициативность, ведомость, но при этом чрезмерное чувство собственной важности.

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

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

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

Как раз таки условия среды и определяют менталитет, а высокое ЧСВ - это наследие Союза (как возможность выделиться из серой массы). Чтобы продвинуть какую-то технологию достаточно желания дяди инвестировать в неё, но в РФ гром гремит не из тучи, а из навозной кучи.

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

Сразу спалю тему для молодых-стильных-модных начинающих инвесторов в hs:

  1. Работать по 12-14 часов в день (можно мыть сортиры в школах/ВУЗах для начала) без выходных и отпусков минимум 5 лет
  2. Иметь подвязки в КГБ

https://www.forbes.ru/profile/evgenii-kasperskii В перспективе можно законсервировать руины какого-то не очень большого древнего острова.

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

В самый чёрный день, пойдёшь грузчиком

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

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

Для этого просто делают отдельный тип и используют его

И теряют фокус с do-нотацией. Вообще клево было бы если бы всякие нотации можно было самому реализовывать. Вот интересно, через темплейт-хаскель можно реализовать своё do хотя бы без оптимизаций? Вроде в окамле есть пакет с do нотацией который просто заворачивает код в лесенку лямбд-продолжений.

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

Ну пример же. Реально проблема была с arrows. Я хотел запилить обработку звука с типизированными массивами вместо того, чтоб работать по-штучно (или что-то в этом роде). И обнаружил, что категории отличаются от шаблонов в С++ тем, что их нельзя специализировать. А так то в хаскеле можно все, что в С++ если оно - простой тайпкласс.

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

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

Чо? Причём тут категории?

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

Ну нельзя сделать стрелку, которая работает только для Float типа, потому что внутри узается unboxed array и узать нотацию стрелок для нее

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

Смотри мой коммент выше

Что, совместимость не ломают?

Надеюсь, ты не про stack какой-нибудь.

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

OCaml и прочие *ML

Ну так про них я написал, там свои печали.

Тогда уж Elm какой-нибудь, в качестве актуального окамла.

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

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

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

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

Я хочу arrow нотацию, чтоб она мне оптимизировала граф обработки сигнала, но при этом я еще сам дооптимизирую посылая сигнал кусками по 256 семплов например. Вот например как работает arrow который выполняется на GPU? Там же нельзя любую хаскель функцию превратить в стрелку. Значит реализовать нельзя. Но можно же запилить на темплейт хаскеле свою arrow нотацию, просто лень. И вообще, если мне самому пилить компилятор, то зачем мне хаскель. Свой препроцессор кода есть и на расте и на лиспах.

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

Ребзя, хватит уже теребить мой GHC, потеребите лучше свой сиплаплас

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

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

Среда это комплекс многих факторов, среди которых количество вакансий в IT сфере далеко не главный в вопросе формирования менталитета, даже несущественный.

а высокое ЧСВ - это наследие Союза (как возможность выделиться из серой массы)

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

Чтобы продвинуть какую-то технологию достаточно желания дяди инвестировать в неё

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

но в РФ гром гремит не из тучи, а из навозной кучи.

Ты такая же часть этой навозной кучи, хоть и мнишь себя 0.01% из избранных и иных. Может стоит под нос смотреть, а не «богов» и «Рашку» обвинять в том, что у тебя на лестничной клетке срам?

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

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

Похоже на самобичевание. Кстати типичное явление среди IT-когорты.

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

Конечно я тебе не желаю этого, просто уведомляю что и не такие «дохляки» осиливают.

Я от физры был освобожден всю школу. Я подтянутся ни разу в жизни не смог даже

Я тоже лет до 16 не мог, потом смог. Потом к годам 24 опять не мог, постарался смог. Да и сейчас смогу, это просто мышцы, вопрос тренировки. При этом я курю 13+ лет, имею траблы с сердцем.

Всё это вопросы целеполагания и стремлений.

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

Как раз таки условия среды и определяют менталитет, а высокое ЧСВ - это наследие Союза (как возможность выделиться из серой массы). Чтобы продвинуть какую-то технологию достаточно желания дяди инвестировать в неё, но в РФ гром гремит не из тучи, а из навозной кучи.

Какой ты еще маленький, и как ты мало знаешь об окружающем тебя мире!

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

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

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

Основная проблема Хаскеля в том, что на нём надо сразу писать правильно. Этого большинство программистов не умеют и не будут уметь никогда

За исключением меня и сэра Саймона Пейтона-Джонса

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

Ну про «молодежно» это круто сказано. История тянется с 85 года, версия 1.0 в 1990, первый стандарт 98. Тот же rs 1.0 2015. Это скорее для дедуль предпенсионного возраста ещё не окончательно впавших в маразм.

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

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

Можно для тех кто в танке, что за пхп-шники оставшиеся без работы? В кратце.

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

На общий тезис дается общий ответ. Все типы в hs по умолчанию полиморфные, а тут начинается притягивание частностей. Лес рубят - щепки летят, только тут щепок нет, а летит полиморфный тип (это кстати был монадический трансформер, если что). @q0tw4 тоже пытается придумать какие-то новые законы, с которыми ему якобы будет удобно жить, да только уже всё придумано, осталось только осознать. Если что-то не догоняешь, то изучайте дальше теорию категорий, монсеньор (реализацией (для быдла) которой и является GHC) или рискуете провести безбедную пенсию наедине со своим любимым пётоном. Кому надо расширений GHC, тому дорога в лиспы/схемы.

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

какие-то новые законы

Я просто пытался хаскель в реалтайм засунуть. Надо осознать, что для хаскеля вопрос ЧТО вычислить важнее, чем КАК.

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

Кто-то в треде давил обиженку на cargo, так вот после того как поюзаешь немного stack при одном слове cargo, npm, pip будешь кричать на весь барак: «Аллилуйя! не представляешь, что stack сегодня сделает с тобой!», но это начнет проявляться, когда появятся первые траблы. По сути это обвязка кабала с кабальными конфигами завернутые в новые доки со stackoverflow трансляцией в старые (отсюда и вечная перекомпиляция всего и вся, уже не говоря про разделяемые либы). Вместо монолитного менеджера получаем некое подобие Ехидны, а всё из-за лисьего Штраймла Сноуберга, а не из норок, как у моего губернатора (в монадическом стиле, но это наследие Союза). И это сделано намеренно, для создания искусственных трудностей во славу дома rs. И носит он свою шапку не потому, что его народ притеснял фараон, а потому, что поддерживает температурный баланс и зимой, и летом - актуально в любые времена; и вне зависимости от того уйдут они из Египта или нет, фараон умрет, а Десять казней египетских всё равно произойдут (угадайте с трех раз почему). Даже имя фараона было скрыто намеренно, чтобы задушить правду. Тот же регресс наблюдается и со сфинксом (превед mdbook), hs занимает заведомо слабую третью позицию петона, чтобы создать искусственную неприязнь.

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

Да кстати, надо бы навернуть свой пакет менеджер поверх shakebuild.com (причем мультиязычный сразу). Хотя можно просто настроить для этого nix...

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

Ну вообще там пакет менеджер нужен ещё. Например nix прикрутить

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

Никак нельзя. Expected kind ‘* -> *’, but ‘NotNullInt’ has kind ‘*’

q0tw4 ★★★★ ()
Ответ на: комментарий от q0tw4
(<*>) :: Maybe (a -> b) -> Maybe a -> Maybe b 
pure :: a -> Maybe a 

Своими шизобезтипными 666 талантами ржавого лиспо-золота можете подтереться. Эфемерная якобы удобность rs нарушает монадические законы, чтобы сожрать тебя, как агнца. Монадические законы обязаны соблюдаться!

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

Монадические законы обязаны соблюдаться

Это сказал кодер на языке agda? В хаскеле то нарушай на здоровье никто не проверит

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

Монадические законы уже выполняются, ты не можешь их нарушать, проверит Alonzo.

.agda, .idr - это big step .hs (Брейди вас не спасет)

data _⊢_⇓_ : ∀{Γ} → ClosEnv Γ → (Γ ⊢ ★) → Clos → Set where

  ⇓-var : ∀{Γ}{γ : ClosEnv Γ}{x : Γ ∋ ★}{Δ}{δ : ClosEnv Δ}{M : Δ ⊢ ★}{V}
    → γ x ≡ clos M δ
    → δ ⊢ M ⇓ V
      -----------
    → γ ⊢ ` x ⇓ V

  ⇓-lam : ∀{Γ}{γ : ClosEnv Γ}{M : Γ , ★ ⊢ ★}
    → γ ⊢ ƛ M ⇓ clos (ƛ M) γ

  ⇓-app : ∀{Γ}{γ : ClosEnv Γ}{L M : Γ ⊢ ★}{Δ}{δ : ClosEnv Δ}{N : Δ , ★ ⊢ ★}{V}
    → γ ⊢ L ⇓ clos (ƛ N) δ   →   (δ ,' clos M γ) ⊢ N ⇓ V
      ---------------------------------------------------
    → γ ⊢ L · M ⇓ V
anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.