LINUX.ORG.RU

Вышел Glasgow Haskell Compiler 7.10.1

 ,


1

4

27 Марта 2015 года вышла новая версия компилятора и интерпретатора функционального языка программирования Haskell.

Из интересного:

  • Новое расширение StaticPointers для распределенных вычислений: обзор
  • Поддержка плагинов в модуль проверки типов
  • GHC начал понимать опцию -g, которая добавляет отладочную DWARF секцию для отладчиков (например, gdb) и профилировщиков (например, perf)
  • Встроенная библиотека работы с числами Integer использует более эффективный распределитель памяти.
  • Улучшена поддержка динамических библиотек на архитуетурах PowerPC, SPARC, Itanium
  • Исправлено непомерное потребление памяти при компиляции типов с большим числом конструкторов в режиме -O2 (SpecConstr bug)
  • И многое другое

Изменения, влияющие на обратную совместимость:

>>> Все изменения

★★

Проверено: Shaman007 ()

Изменения, влияющие на обратную совместимость:

Готов для интерпрайза.

olibjerd ★★★★★ ()

надо сюда что-то вбросить, но не знаю что
что-то про лисп или про ентерпрайз

У хаскеля есть стандарт? Гхц подсаживает на свои расширения?

Bad_ptr ★★★★ ()

Какие планы по суперкомпиляции?

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

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

gns ★★★★ ()

GHC начал понимать опцию -g, которая добавляет отладочную DWARF секцию для отладчиков (например, gdb) и профилировщиков (например, perf)

Вау. Т.е. если я сделаю дебажный билд, грузану его в гдб, то можно пошагово отладить код на хаскеле? :) Это же фантастика.

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

Особенно доставляет с учётом, того, что по номеру это баг-фик выпуск. Либо простыня написана для 7.10 на самом деле.

Vudod ★★★★★ ()

Monad instances теперь требуют Applicative instances (в миру AMP)

Это же вроде как перемога в хацкель-сообществе, да? Или перемога будет, когда это попадёт в стандарт?

nemyax ()

на архитуетурах
Проверено: Shaman007 (29.03.2015 9:27:22)

Все-таки хорошо, что есть вещи, которые не меняются.

в миру

Когда это GHC перешел в лоно церкви (видимо, протестантской)?

А вообще, ура. Пускай этот монстр продолжает пухнуть.

Virtuos86 ★★★★★ ()

По прочтении подробностей у меня возникло подозрение, что оно компилируется в нативный код, я правильно понял?

С хаскелем дел не имел, извиняйте, если что...

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

Архитуетура - это же классный неологизм для обозначения некоторых «орхитектур»...

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

FTP много лет пытались ввести, но вот только сейчас (после открытого голосования) решили, что FTP важнее пречитаний профессуры, что Haskell станет сложнее (sic!) учить.

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

P.S. Давно готов. Но не могли бы вы уточнить, что такое «интерпрайз», а то я нигде нормального определения не находил.

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

Интерпрайз — это когда ничего не ломается годами.

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

оно компилируется в нативный код, я правильно понял?

Конечно, иначе зачем он нужен? Тем более с такими поломками.

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

Беглое гугление показывает, что в оплоте интерзпрайза — Jav'е — тоже есть «breaking changes».

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

vanzef ()

Реквестирую пример популярной програмы, написаной с испольованием хаскеля

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

Факториал популярен разве что в академической среде. Да и там он всасывает на фоне интеграла по поверхности

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

На Хаскеле не может быть написан сервер.

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

Вот это поворот. Сервер есть, но написан быть не может.

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

Скорее всего это не сервер, а что-то вроде парсера конфигов. На языке, который считает себя «чистым» не может быть написан сервер (как и любая другая интерактивная программа).

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

Что характерно, на замечания о «нечистоте» хаскеля всегда подобные ответы. Больно признавать что этот язык совсем не такой элитарный, каким его фанаты пытаются представить.

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

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

Ты не шаришь. На хаскелле написана чистая программа, которая при запуске генерирует сервер. Всё схвачено, не ссы.

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

Таких оправданий я еще не слышал.

gcc main.c

Вот вам и чистый язык.

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

Не, вот это уже уныло. Попробуй ещё раз. Ты можешь лучше, я верю в тебя.

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

не могли бы вы уточнить, что такое «интерпрайз»

Точное определение вы вряд ли найдёте, но просто представьте, что ваша программа используется для управления светофорами всего города. То есть:
1. Она должна быть надёжна как молоток. Никакие левые данные не могут её грохнуть, нет никаких утечек памяти, делений на ноль, данных шрёдингера и прочей аномалии.
2. Программа не может обновляться еженедельно, ибо тестируется месяцами(!) на малозначимых участках и только потом попадает в продакшен. То есть перед тем, как вы отдадите программу, вы со всей серьёзностью должны подойти к тому, что ранее полугода вам не дадут ничего исправлять/патчить/перезагружать и т.п.
3. У «интыпрайза» крайне дорогое время простоя (а представьте себе биржу!!). Запущенная система не может ждать, пока ты сконвертишь данные или перестроишь граф связей - всё должно быть максимально быстро.
4. Интыпрайз - это как правило ещё и интеграция со всем легаси-дерьмом, которое писалось годами на всяких коболо-фортранах, плагинах на бейсиках, сервисах на PL/1 и все они имеют свои форматы, поменять которые уже никто не сможет. Добро пожаловать в каменный век!
5. Интыпрайз крайне инертен. Нельзя так просто взять и сменить XML на JSON (даже если это влечёт море профита) - потому что к вашей системе прилепили ещё десяток системочек, которые увы, кроме XML ничего не разумеют. Кроме того, такие апгрэйды ещё придётся тестировать, проверять корректность, мама не горюй!
6. Интыпрайз не торопится за прогрессом и в плане железа - если по городу установлены платы, старые как говно мамонта и у всех RS232, можешь забыть про свой «симметричный USB» - бери кабель и ищи такое же совместимое дерьмо, через которое можно прошивать этот хлам. Это одна из самых грустных частей.

Вот кое-какие признаки интыпрайза, так что это не только «богема ИТ», но и своего рода болото, торопиться в которое не следует :)

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

Какие планы по суперкомпиляции?

Механизм (либа hoopl) давно есть и используется в GHC для мелочей типа constant folding.

Более радикальные эксперименты (supero) приводят к классным результатам (особенно для маленьких программ), но в некоторых случаях размер программ слишком сильно растет (4x).

http://community.haskell.org/~ndm/temp/supero.pdf https://ghc.haskell.org/trac/ghc/wiki/Supercompilation

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

На Хаскеле не может быть написан сервер.

а пацаны-то и не знают

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

Скорее всего это не сервер, а что-то вроде парсера конфигов. На языке, который считает себя «чистым» не может быть написан сервер (как и любая другая интерактивная программа).

Вовсе нет :)

В одним из первых прототипов haskell IO представлялся обычными списками: Страница 22, пункт 7.1, figure 3

main :: Behaviour
main ~(Success : ~((Str userInput) : ~(Success : ~(r4 : _))))
    = [ AppendChan stdout "enter filename\n",
        ReadChan stdin,
        AppendChan stdout name,
        ReadFile name,
        AppendChan stdout
            (case r4 of
                 Str contents -> contents
                 Failure ioerr -> "can’t open file")
      ] where (name : _) = lines userInpu

Типы тоже являлись чистыми:

type Behaviour = [Response] -> [Request]

data Request = ReadFile Name
             | WriteFile Name String
             | AppendFile Name String
             | DeleteFile Name
             | ...
data Response = Success
              | Str String
              | Failure IOError
              | ...

Фокус в том, что синтезировать новые IO операции можно из существующих, которые выполняются рантаймом языка.

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

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

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

Болото

Это не болото, а стабильность, которая не слишком торопится за bleeding endge. И это правильно. Пусть сурки набивают шишки, кушают кактусы и подготавливают продукт для серьёзных дядек.

PS: а так всё правильно описано.

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

Every function in Haskell is a function in the mathematical sense (i.e., «pure»). Even side-effecting IO operations are but a description of what to do, produced by pure code. There are no statements or instructions, only expressions which cannot mutate variables (local or global) nor access state like time or random numbers.

Что-то не так?

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

Под это определение подходит любой компилятор.

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

При чем тут компилятор?

Любой ли? Вопрос на засыпку: есть ли тут «only expressions which cannot mutate variables (local or global)»?

int main(){
  int a = 0;
  ++a;
  return 0;
}
vanzef ()
Ответ на: комментарий от vanzef

Можешь считать mutable variable'ом клиента, который общается с твоим сервером. Лжет ваша агитка хаскелева.

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

Зачем удалил коммент про использование хаскела в интерпрайзе? Неужели пруфов не нашлось?

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