LINUX.ORG.RU

Racket vs Haskell

 , ,


1

8

Подскажите чем принципиально отличается Haskell от других функциональных языков, в частности — Racket (typed/racket в основном) с точки зрения системы типов и других возможностей?

Из того, что сразу в голову приходит: аппликативный и нормальный порядок вычислений, да чистота Haskell. Что это на практике даёт Haskell'ю? Можно ли писать на Racket в стиле Haskell и получить его преимущества?

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

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

Пример, call-by-need упомянутый выше приводит к интересным эффектам. Например можно последовательно применить функцию lines к полному содержимому файла, разбив файл на строки, преобразовав каждую строку, а потом unlines, преобразовав все назад в строку и записав файл. В отличии от практически любого ЯП программа не упадет на терабайтном файле, так как вышеописаное - декларативный алгоритм трансформаций и не требует явного наличия промежуточных результатов.

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

Концепция монад, которая вообще не главная фича хаскелля, но ее постоянно приплетают, есть во многих языках. Просто абстракция цепочек вычислений, сам backend которых резко отделен от них самих. Тоесть у тебя есть вычисления, но ты их можешь запускать последовательно, параллельно, в транзакциях, с логированием, в рамках нескольких раздельных HTTP запросов и вообще как тебе позволяют те таблетки которые ты принимаешь или голоса в голове.

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

какая нибудь scala

В хаскелле ограничена adhoc polymorphism, в scala помимо нее есть subtype polymorphism (умное название обычного полиморфизма любого подзаборного ЯП), которая нужна скорее всего в 90% случаев

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

Однако, в скале нет полноценных тайпклассов, AFAIK, поэтому речь о ней здесь не шла. Если не прав, прошу прощения. С вашим утверждением, конечно, согласен :)

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

call-by-need упомянутый выше приводит к интересным эффектам.

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

Круто. По-идее все это можно реализовать через lazy/racket (если уже не реализовано)

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

Оборачивая все в свои монады и трансформаторы

КО говорит что монадами можно пользоваться, а не писатьс свои. Причем пользоваться не отстреливая что они такое. В Scala точно можна, потом через пол года окажется что «везде монады» OSHI, даже список и массив!

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

Я не знаю в каких еденицах проверяется полноценность, возможно в джоулях или ньютонах. Но вообщем они просто сделаны не так как в Haskell, но делают такой же adhoc compile time polymorphism

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

Да, это красивая концепция, я так когда то олимпиадные задачки дома на Stream в Scala посчитал.

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

Не люблю аналогии, но если хотите — я всегда думаю как бы чего нибудь более вкусного есть, а если придется дублировать код, то это не очень вкусные блины или шашлык.

Так а я о чем? Просто каждый подход имеет право на жизнь, но его целесообразно использовать там, где он эффективнее. А так на макросах одних можно что угодно написать, но будет ли это хорошо? Аналогично - ООП.

Нет. ООП пусть будет — иногда очень полезно => шаблоны в функциональщине нужны?

А вот давайте не будем сравнивать ООП и шаблоны. Это вещи сильно разыне

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

Нет, не пишу, просто посмотрел для того, чтобы проникнуться духом ООП. Сказать могу, что ООП там практически идеально. Кстати, сейчас в него как раз хотят вернуть скобочки :)

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

:-D Весело. Будет «лисп на стероидах». «Лисп на наркотиках» уже есть)

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

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

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

стоит туда соваться не зная хорошо java?

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

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

Learn Haskell For The Great Food

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

// не удержался :)

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

А вот давайте не будем сравнивать ООП и шаблоны. Это вещи сильно разыне

А я их и не сравниваю, мы говорили о том почему эти концепции включены в язык.

Так а я о чем? Просто каждый подход имеет право на жизнь, но его целесообразно использовать там, где он эффективнее. А так на макросах одних можно что угодно написать, но будет ли это хорошо? Аналогично - ООП.

Отсюда вывод — чем больше парадигм язык поддерживает — тем лучше.

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

Привет.
А как с трудоустройством на scala (СПб) и её будующем?
Сейчас работаю на java, но язык кажется безумно скучным особено после perl. Сейчас для расширения сознания и получения кармических плюшек сижу под haskell. Всё нравится, всё красиво. Сложно ли будет войти scala?

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

Писал предложения медлено и с перерывами, поэтому такая дрянь вышла.

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

у тебя есть, какая-нибудь статистика, которая может подтвердить твои слова?

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

Clean - хорошая альтернатива однопоточному Ocaml. Только лицензия у него какая-то странная. Так и не понял зачем они ее такой сделали.

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

Довольно забавным выглядит противопоставление Scala против Haskell, потому что первая вобрала в себя очень многое из второго.

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

Отсюда вывод — чем больше парадигм язык поддерживает — тем лучше.

С чего это? Вон питон - поддерживает почти все что только можно, но от этого стал помойкой.

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

Тогда советую Tcl. Он очень интересен. Более наркоманский, нежели perl.

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

С чего это?

Это вывод на основе предпосылок. «Помойка» это не объективное понятие, а просто ярлык, да и вы про язык или про стандартную библиотеку? Про язык, я уверен, многие не согласятся.

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

Это вывод на основе предпосылок. «Помойка» это не объективное понятие, а просто ярлык, да и вы про язык или про стандартную библиотеку? Про язык, я уверен, многие не согласятся.

Разве? А как назвать это адское смешение всех подряд парадигм, из-за чего не реализована нормально ни одна из них?

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

Тут не соглашусь. То, как и что реализовано в Haskell стандарте - стройно и красиво

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

Пожалуй, третий компонент - самый важный.

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