LINUX.ORG.RU

Вышел GHC 7.4.1

 , ,


0

3

Вышел GHC 7.4.1 – новый релиз компилятора функционального языка программирования Haskell. Это первый релиз стабильной ветки 7.4, которая станет основой для будущих версий платформы Haskell. Предыдущая ветка 7.2 была скорее полигоном для новых идей.

Основные изменения по сравнению с веткой 7.0:

  • Класс типов Num более не наследуется от классов Eq и Show. Как следствие, многие функции получили явные ограничения Eq и Show.
  • Новая возможность Safe Haskell (-XSafe, -XTrustworthy, -XUnsafe). Позволяет ввести более строгую проверку безопасности типов во время компиляции, а также служит для компиляции и выполнения «ненадёжного» кода.
  • Новая возможность полиморфизм видов (kind polymorhphism) (-XPolyKinds).
  • Новая возможность виды-ограничения (constraint kinds) (-XConstraintKinds). Любой тип вида Constraint может использоваться как ограничение типа.
  • Теперь можно задавать любые объявления в строке ввода ghci.
  • Реализации профилирования и hpc (проверки покрытия кода программ) были объединены и капитально переработаны.
  • Теперь можно писать плагины для компилятора.
  • Поддержка DPH (Data Paralell Haskell) значительно улучшена.
  • Предварительная поддержка регистровой (registerised) компиляции для платформы ARM, использующей LLVM.

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

★★★

Проверено: maxcom ()
Последнее исправление: pitekantrop (всего исправлений: 1)

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

Тот :) И не первый раз его руками ставлю

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

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

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

На плюсах чаще натыкаешься на то, что способ, которым ты хочешь реализовать ту или иную фичу не поддерживается ни стандартом ни компилером. В хаскеле тоже самое. Но. Если в хаскеле с расширениями что-либо не получается означает неправильное мышление в рамках парадигмы, а правильное обычно красивее выходит, то в плюсах обычно приходится вставлять костыли и плодить кучу левого кода. Или юзать java-style, т.е. перебрасывать вещи известные в компил-тайм на рантайм и динамиккастить. Правда бывает и в хаскеле магический код писать приходится на пару строчек.

ЗЫ. Тот анонимус который собрал Yesod, мучал cabal и вспомнил про типизированный ракет - это я.

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

«Опенсорс» никому ничего не должен. ПО появляется как минимум по двум причинам: for fun, если разработчиков просто прет, и если оно (ПО) кому-то оказывается полезным. Если какое-то ПО не нужно лично Вам - так и скажите. Не следует отсюда делать вывод, что это не нужно никому вообще, даже если Вы не понимаете, как это ПО в принципе может оказаться полезным. Если же Вы просто раздражены частым появлением незнакомых технологий, в которых лень разбираться, - возможно, Вам не стоит связываться с IT. Возможно, вместо этого стоит заняться написанием следующей диссертации, уже докторской, которая безусловно станет прорывом в науке.

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

Это не говорит об их качестве. В моей практике плюсы используют различные энтерпрайз-быдлокодеры. Остальные используют специфические маленькие язычки.

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

Не звизди. Кабал мир не пересобирает, а создает новый рядом.

Хаскель-каббала: создай свой мир.

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

Некого ставить с хакейджа без правок.

Ставь с правками. cabal unpack, cd, cabal install (последнее — без параметров).

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

Ваша практика есть истина последней инстанции?

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

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

Не всегда есть возможность отдавать время только учебе :-( А знания... Специальность хорошая. Но вот устроиться по ней можно только в аспирантуру...

С такими размышлениями лучше завязываться с професси^W^W пожалуй да, программить вместо учебы

alienclaster ★★★
()

Хачкиль нинужен.
GHC - компилятор для одной программы (xmonad)
Уже седьмая версия компилятора, и ничего нужнее чем xmonad на нем нет, да и не будет.

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

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

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

Хотя на данный момент в любом случае посвящу себя учебе) Кажется, там начались интересные и полезные предметы.

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

в скандинавских и странах ближнего востока, говорят, весьма сытый фриланс

Кто говорит и в каком смысле сытый? В курсе, какие налоги в скандинавских странах? :)

rtvd ★★★★★
()

Еклмн! ЛОР. Топик про хаскель. И что же я вижу? 164 жалких коммента!!! Где срач? Где кидание какашками? Где градус неадеквата?

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

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

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

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

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

164 жалких коммента!!!

Я старался наплодить комментов. Но я - тварь довольно уравновешенная, так что срача не вышло, сорри.

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

Хачкиль нинужен.

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

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

Скорее «Это технический раздел сайта linux.org.ru? Посоветуйте мне аниме.»

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

потому что у нас еще не удавалось сделать практически пригодный суперкомпилятор, а не proof of concept

CHSC и GHC/supercompiler не смотрели?

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

Пруф или таки нельзя.

У JHC довольно компактный рантайм и он генерирует си-код.

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

Не гони. GHC - компилятор для ДВУХ програм - xmonad и GHC!

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

А теперь в ghc все есть, только екстеншены включать не забывай.

:) Да бог с ними... с либами любой язык крут. Но ядро языка (и все программы на нём) должны быть легко понимаемы. Хацкелю мешает как сам язык, так и его парадигма. Точнее, не мешает, а резко уводит его в очень ограниченную область «крутых функциональщиков», о которых ещё Герцен говорил: «Страшно далеки они от народа...». :)

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

Где срач? Где кидание какашками? ... Да, приходится признать, что выход релизов хасклеля стал рядовым событием.

Всё намного хуже - таки ЗАКИДАЛИ. :) И теперь кроме унылых ухмылок Хацкель ничего не вызывает. Ну типа «Неуловимого Джо».

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

И теперь кроме унылых ухмылок

Ты только что добавил еще одну :(

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

а не судьба этим объектам заиметь общий интерфейс?

Который неизвестен на момент объявления массива, поскольку массив объявлен в либе и юзается не один раз с разными интерфейсами. Классический пример, когда всё решают шаблоны, но в моём случае они не очень удобны, поскольку ситуация несколько сложнее чем я описал (из-за них появляется сильно много букав). Дженерики были бы удобны, но они просто скрывают динамиккаст в наиболее популярных его использованиях. В хаскеле, думаю, моя задача решилась бы просто и элегантно, если хорошенько подумать, но для того чтоб придумывать и обсуждать это решение нужно сначала описать задачу полностью. Но зачем. Все-равно в моей конторе код на хаскеле не примут.

ЗЫ. Динамиккастинг - это новый вид троллинга. Как goto, только тоньше.

q0tw4 ★★★★
()

haskell, между прочим, это настоящая наука - это пример того как делать «не надо», это пример тупиковой ветви развития языков программирования, примерь ханжества, маразма и языковой метросексуальности. В то же время - это прогресс и блидинг эйдж

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

а не судьба этим объектам заиметь общий интерфейс?

В этом-самом мейнстрим ООП понятия «тип» и «интерфейс» неразрывно связаны. Фактически, ты предлагаешь стереть тип элементов массива до типа X (который будет связан с интерфейсом).

На практике — это Object. ;)

Кстати в GHC, то что ты предлагаешь делается через экзистенциальные типы.

Параметрический полиморфизм лучше рассматривать как различные логические «уровни» в твоей прогамме. Например, у тебя есть тип m a, тогда у тебя будет две группы вычислений: работающих на уровне m и работающих на уровне а.

А генерализацией этой идеи является пресловутый Monad.

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

Параметрический полиморфизм лучше рассматривать как различные логические «уровни» в твоей прогамме. Например, у тебя есть тип m a, тогда у тебя будет две группы вычислений: работающих на уровне m и работающих на уровне а.

А генерализацией этой идеи является пресловутый Monad.

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

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

сплошной туман

У тебя в голове. Я гарантирую, что вышеописанное ты неоднократно пытался реализовать в своих программах. Только криво, косо и исключительно ad-hoc.

Если уж брать классику типа GoF, то там почти каждый паттерн пытается реализовать разделение «уровней».

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

Из того что Вы успели рассказать у меня сложилось мнение, что Ваша программа мне не понравится и мне захочется ее отрефакторить

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

[code=Haskell] {-# LANGUAGE RankNTypes, ExistentialQuantification #-}

module Test where

class Base_ a where get :: a -> Int

data Base = forall a. (Base_ a) => Base a

mysum :: [Base] -> Int mysum = sum . (map $ \(Base b) -> get b)

class Custom_ a where title :: a -> String

data Custom = forall a. (Custom_ a) => Custom a

firstTitle :: [Custom] -> String firstTitle ((Custom x) : _) = title x

newtype MyInt = MyInt { toint :: Int }

instance Base_ MyInt where get = toint

instance Custom_ MyInt where title = show . toint

newtype MyStr = MyStr { tostr :: String }

instance Base_ MyStr where get = length . tostr

instance Custom_ MyStr where title = tostr

data Both = forall a. (Base_ a, Custom_ a) => Both a

myarr :: [Both] myarr = [Both $ MyInt 5, Both $ MyStr «Hello»]

toBase :: [Both] -> [Base] toBase = map (\(Both b) -> Base b)

toCustom :: [Both] -> [Custom] toCustom = map (\(Both b) -> Custom b)

main :: IO () main = do putStrLn $ show $ mysum $ toBase myarr putStrLn $ firstTitle $ toCustom myarr [/code]

Накидал примерно решение, но я думаю оно не самое элегантное. По крайней мере из него видно, что поставленную задачу хаскель решает на ура: это динамиккаст с тайп чеком. Другое дело что таким путём нельзя мешать объекты поддерживающие интерфейс и не поддерживающие, но для таких случаев есть что-то вроде Maybe.

q0tw4 ★★★★
()
Ответ на: комментарий от q0tw4
{-# LANGUAGE RankNTypes, ExistentialQuantification #-}

module Test where

class Base_ a where
  get :: a -> Int

data Base = forall a. (Base_ a) => Base a

mysum :: [Base] -> Int
mysum = sum . (map $ \(Base b) -> get b)

class Custom_ a where
  title :: a -> String

data Custom = forall a. (Custom_ a) => Custom a

firstTitle :: [Custom] -> String
firstTitle ((Custom x) : _) = title x

newtype MyInt = MyInt { toint :: Int }

instance Base_ MyInt where
  get = toint

instance Custom_ MyInt where
  title = show . toint

newtype MyStr = MyStr { tostr :: String }

instance Base_ MyStr where
  get = length . tostr

instance Custom_ MyStr where
  title = tostr

data Both = forall a. (Base_ a, Custom_ a) => Both a

myarr :: [Both]
myarr = [Both $ MyInt 5, Both $ MyStr "Hello"]

toBase :: [Both] -> [Base]
toBase = map (\(Both b) -> Base b)

toCustom :: [Both] -> [Custom]
toCustom = map (\(Both b) -> Custom b)

main :: IO ()
main = do putStrLn $ show $ mysum $ toBase myarr
          putStrLn $ firstTitle $ toCustom myarr

Накидал примерно решение, но я думаю оно не самое элегантное. По крайней мере из него видно, что поставленную задачу хаскель решает на ура: это динамиккаст с тайп чеком. Другое дело что таким путём нельзя мешать объекты поддерживающие интерфейс и не поддерживающие, но для таких случаев есть что-то вроде Maybe.

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

Ладно, погорячился. Но если б я писал сразу на хаскеле, то врядли вышло так что я сохранил где-то массив интерфейсного типа а потом его кастил. Я просто зарефакторил бы так что вышло бы примерно это.

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

Вопрос на самом деле не в потенциальной возможности, а в удобстве. Кстати, первый кусок кода за 4 страницы запостил. И то не про новшества 7.4. Где же код, ребята? Надо ж обсуждать конкретно.

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

но я все еще не знаю haskell, так что мне пока бесполезно рассказывать

Про хаскель в моем посте две строчки: про экзистенциальные типы и Monad.

Читай работы Л. Корделли, читай работы Одерского. По крайней мере эти двое достаточно хорошо разбираются в ООП.

А уж работу «On Understanding Types, Data Abstraction, and Polymorphism» должен в процессе обучения читать любой ООП-программист. Кстати, смотрим на год издания, улыбаемся и машем.

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

Еклмн! ЛОР. Топик про хаскель. И что же я вижу? 164 жалких коммента!!! Где срач? Где кидание какашками? Где градус неадеквата?

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

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

Неадекваты на какацкеле кодят, ЧСВ повышают. А адекватным с неадекватами говорить просто не о чем, не поймут-с.

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

Неадекваты на какацкеле кодят, ЧСВ повышают

Камрад, ты ошибаешься. Хаскель ЧСВ как раз охрененно понижает. В отличие от всяких сюшек с плюсами.

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

ЧСВ как раз охрененно понижает. В отличие от всяких сюшек

доо

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

Хаскель ЧСВ как раз охрененно понижает.

Это когда не выходит закодить? Ну так не у всех не выходит.

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

haskell, между прочим, это настоящая наука - это пример того как делать «не надо», это пример тупиковой ветви развития языков программирования, примерь ханжества, маразма и языковой метросексуальности. В то же время - это прогресс и блидинг эйдж

Ох мой дорогой, а о влиянии Хаскеля на другие языки вы тоже ни чего ни читали и не слышали? Хаскел как был тестовой площадкой для M$R так и будет, а в итоге положительные черты будут проявляться во всяких F#, .Net, C#, а за ними в java, python, ...

AlexVR ★★★★★
()

посоны! блин, это же хаскель! Где срачччъ? Походу, придётся выучить его только для того, чтобы говорить, что не гавно :-D

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