LINUX.ORG.RU

Glasgow Haskell Compiler 6.8.1


0

0

Вышла новая стабильная версия свободного компилятора языка Haskell — GHC 6.8.1.

  • Добавлен отладчик в GHCi
  • Проведена работа по реогранизации основных библиотек
  • Профилирующий инструментарий Haskell Program Coverage для оценки покрытия кода
  • Множество других изменений
GHC включает в себя оптимизирующий компилятор, создающий код для нескольких платформ, который также может работать в интерактивном режиме (GHCi), средства профилирования, множество библиотек, а так же интерфейсы к другим языкам программирования.

Набор GHC доступен для GNU/Linux, *BSD и альтернативных ОС.

>>> Release notes

Ответ на: комментарий от ero-sennin

>давно бы лисперам собраться всем вместе и придумать новый лисп с человеческим лицом.
>ero-sennin

Нафиг оно не надо! Надо с блэк джеком и шлюхами! :)

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

2anonymous (*) (05.11.2007 15:33:34):

>> Весь CL — заскорузлый old school, примерно как Фортран-77.

> А чем тебе Схема не угодила?

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

Но Схема на фоне CL непрактична. Слишком многословна там, где не надо и не настолько гибка. Возьмите хотя бы функции. Где возможность определять необязательные параметры или параметры доступные по ключу? Где объектная ориентированность? И т.д. Там, где в CL компактный loop, в Схеме приходится с рекурсией извращаться. Там, где в CL наглядный выход из блока, в Схеме call/cc. Круто! Но непрактично.

Для обучения годится, для работы не очень. Если же брать расширенные реализации, то они уже поближе к CL, но тогда проще уж CL.

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

>Но Схема на фоне CL непрактична. Слишком многословна там, где не надо и не настолько гибка.

Да ладно вам, define-macro в руки и вперед (да, его нет в R5RS, но он есть в любой реализации схемы, причем с одинаковой семантикой). Хотя вас понять тоже можно --- в CL уже все готово и везде одинаково (ибо есть стандарт),но к гибкости языка это отношения не имеет (это называется мощность стандартной библиотеки). А работа... ну она разная бывает, не надо так категорично :)

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

>>> Да ладно вам, define-macro в руки и вперед (да, его нет в R5RS, но он есть в любой реализации схемы, причем с одинаковой семантикой). Хотя вас понять тоже можно --- в CL уже все готово и везде одинаково (ибо есть стандарт),но к гибкости языка это отношения не имеет (это называется мощность стандартной библиотеки). А работа... ну она разная бывает, не надо так категорично :)

Имеет-имеет. Где в схеме loop подобный лисповскому? По религиозным причинам не может быть там такого мощного loop. А он, однако, зачастую позволяет очень компактно изложить то, что в Scheme тупо-религиозно будет делаться через рекурсию. Где гибкость в определении аргументов функций? Тоже нет ничего подобного. Где банальное определение констант? Язык-то всё-таки не чисто функциональный. Неплохо бы и константы определять, как константы. И так далее, и так далее.

В том и дело, что R5RS очень беден. Отсюда и ограниченность использования Scheme. А уж что там в расширениях - это другой вопрос. Если только с расширениями бедный Scheme начинает приобретать более-менее юзабельный вид, то Scheme уже можно почти назвать Common Lisp. Для обкатывания всяких теорий и обучения - да, вполне пойдёт. И даже очень.

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

> Что значит "вычисляться" применительно к структуре данных?

Ладно, согласен, бред сказал :-)

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

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

>Тем не менее, хочется увидеть добавление в такое дерево на окамле.

Ну так напиши на Хаскеле сначала, потом попробуем перевести на Ocaml. Можно, например, упорядоченное несбалансированное двоичное дерево, где каждый узел знает о родителе. Нужна функция, добавляющая новый элемент в такое дерево, и константа "пустое дерево".

data Tree a = Nil | Node a (Tree a) (Tree a) (Tree a) empty = Nil insert :: Tree a -> a -> Tree a

Проверяем как-то так:

print (foldl insert empty [2, 1, 3])

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

Пардон, форматирование.

data Tree a = Nil | Node a (Tree a) (Tree a) (Tree a)
empty = Nil
insert :: Tree a -> a -> Tree a

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

>Если же брать расширенные реализации, то они уже поближе к CL, но тогда проще уж CL.

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

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

Вот что вышло. Тут даже с демонстрацией знания о родителях в print :-)

data Tree a = Nil | Node a (Tree a) (Tree a) (Tree a)

instance Show a => Show (Tree a) where
    show Nil = "Nil"
    show (Node d l r p) = "(me: " ++ (show d) ++ " (" ++ (show l) ++ ", " ++ (show r) ++ ", " ++ (show' p) ++ ")"

show' (Node a _ _ _) = show a
show' Nil = "Nil"
            
empty = Nil

insert :: Ord a => Tree a -> a -> Tree a
insert n@(Node a l r p) d | d>=a = Node a l (insert' n r d) p
                          | d<a = Node a (insert' n l d) r p
    where
      insert' n Nil d = Node d Nil Nil (insert n d) -- laziness
      insert' _ n d = insert n d
insert Nil d = Node d Nil Nil Nil -- for root 

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

> А чем тебе Схема не угодила?

Анонимус, спасибо за просветляющий вопрос. :) До сих пор я воспринимал Схему скорее как учебный и встраемый язык, но вот сейчас посмотрел на Chicken и остался очень доволен. Обязательно попробую что-нибудь написать и заценить.

ero-sennin ★★
()
Ответ на: комментарий от pierre

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

Если заменить insert' n Nil d = Node d Nil Nil (insert n d) на insert' n Nil d = Node d Nil Nil n

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

Если же нужна подобная бесконечная структура, опять же ссылки и указатели не нужны -- достаточно вместо самого предка хранить функцию без параметров, возвращающую предка (стандартный способ задержки вычислений). Ну и для удобства сделать функцию parent_of:

let parent_of = function | Nil -> Nil | Node (_, _, _, p) -> p ()

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

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

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

Мне вообще непонятен смысл такой структуры. Допустим делаем свёртку списка [2, 1, 3] в дерево. Из узла 1 мы никак не сможем добраться до узла 3, потому что при добавлении узла 1 его родительский узел 2 не содержал потомка 3.

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

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

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

> Не хаскелем единым...

Clean делают сплошные вантузойды, и это сильно сказывается. %( Я так и не осилил его собрать в своё время, да и на AMD-64 его фиг знает, когда портируют. Хотя после прочтения мануала впечатление осталось приятное, и uniqueness typing, на мой неискушённый взгляд, гораздо понятнее человеческом мозгу, чем монады.

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

Вот вот. Много приятных мелочей, хорошая скорость. Но никакого коммтюнити и саппорта. А жаль.

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

2anonymous (*) (06.11.2007 12:55:20):

>>> Вот это далеко не факт. Что мешает выбрать для проекта одну, подходящую реализацию и использовать только её? Религиозные соображение типа переносимости кода оставим фанатикам -- это в большинстве случаев непрактично.

А смысл выбирать вообще какую-то реализацию Схемы, если Схема сильно уступает CL? Я уже выше изложил все её недостатки, которые никакими расширениями не лечатся.

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

>Вот вот. Много приятных мелочей, хорошая скорость. Но никакого коммтюнити и саппорта. А жаль.

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

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

>Я уже выше изложил все её недостатки, которые никакими расширениями не лечатся.

Это бред. На Схеме можно реализовать всё, что есть в CL.

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