LINUX.ORG.RU

Функциональщина. Что выбрать?


0

0

Решил в свободное время заняться изучением модного нынче функционального программирования. Встал естественный вопрос: что выбрать? Этих всяких лиспов, хацкелей, оцамлей и т.п. вагон и маленькая тележка. Чтобы не распыляться выбрал Scheme, т.к. его используют в SICP, но настораживает его не слишком большая распространённость и «академичность». С другой стороны, лямбды и прочие «вкусности» потихоньку приходят и во всякие там питоны и даже плюсы. Не холивара окаянного ради, а сугубо для просвещения и развития спрашиваю: что изучать, чтобы не лежало оно потом мёртвым грузом? У каких языков какие плюсы, минусы и области применения?

★★★★

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

Scheme это прежде всего Lisp, а уже потом в некоторой степени функциональный язык. Если речь именно о выборе функционального языка, то фактически стоит выбирать между Haskell и Erlang.

P.S. «всякие лиспы» к функциональному программированию уже лет как 30 отношения не имеют.

archimag ★★★
()

Начни изучать Haskell.
Впрочем, Лиспы тоже надо знать.

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

> Если речь именно о выборе функционального языка, то фактически стоит выбирать между Haskell и Erlang.

Это почему? Что не так с Ocaml (на основе которого сделан F#) или Scala (которой всё пророчат будущее новой Явы)?

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

clojure вполне себе ФП язык, если ты относишь к ФЯ и ерланг...

ott ★★★★★
()

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

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

у хаскеля достаточно высокий порог вхождения...

ott ★★★★★
()

Я думаю, что стоит начинать с хаскеля. И вот, почему:

Хаскель сразу «заставит» тебя отказаться от императивного программрования. Особенно, если сначала не лезть в монады (а на самом деле и монады то ты тоже поначалу не сможешь эффективно применять). То есть ты скорее всего будешь писать плохие функциональные программы, но все-же функциональные. В то время, как в лиспе вполне можно(и главное эффективно) будет писать императивно.

Конечно, лисп тоже необходимо выучить. Но если цель именно ФП, то ИМХО лучше с хаскеля начинать.

Waterlaz ★★★★★
()

>модного нынче

но настораживает его не слишком большая распространённость и «академичность»


ретэйл изучай

dimon555 ★★★★★
()

«Чистая» функциональщина в стиле хаскеля это просто теоретические изыскания. Оно интересно, может быть, но не более. Не практично.
Scheme может и функциональная, для всяких там теоретических изысканий в CS, потому как лисп по своей природе и имеет всякие там call/cc, но непрактична опять же, и еще менее интересна, чем хаскель.
CL это метаязык плюс крутое ооп, а не функциональщина совсем.
Clojure - уродский гибрид жабы с cl и еще чем-то, интересен не столько функциональщиной, которая к тому же затруднена по причине платформы, сколько моделью многопоточности.
Других лиспов по-факту нет(emacs lisp, newlisp, autolisp и прочие мелкие скриптовые можно не считать).
У Erlang фича тоже не в функциональщине а скорее в подходе к реализации многопоточности.
OCaml уродлив и неудобен. Кроме того, по слухам, помер. F# просто уродлив. О прелестях функциональщины там думать особо не тянет.

scala, vala, ruby, python и пр. скриптота с претензиями на функциональщину внимания просто не заслуживает.

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

Scheme может и функциональная, для всяких там теоретических изысканий в CS, потому как лисп по своей природе и имеет всякие там call/cc, но непрактична опять же, и еще менее интересна, чем хаскель.

Схема функциональная, легкая и подходит для изучения ФП.

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

I think we may have made a mistake in thinking that hackers are turned off by Lisp's strangeness. This comforting illusion may have prevented us from seeing the real problem with Lisp, or at least Common Lisp, which is that it sucks for doing what hackers want to do. A hacker's language needs powerful libraries and something to hack. Common Lisp has neither. A hacker's language is terse and hackable. Common Lisp is not.

(c) Paul Graham

Как говорится, комментарии излишни.

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

> Scheme может и функциональная, для всяких там теоретических изысканий в CS, потому как лисп по своей природе и имеет всякие там call/cc, но непрактична опять же, и еще менее интересна, чем хаскель.

CL это метаязык плюс крутое ооп, а не функциональщина совсем.


Scheme стандарта R6RS более метаязык, чем CL когда либо был.

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

> У Erlang фича тоже не в функциональщин

OCaml уродлив и неудобен. Кроме того, по слухам, помер. F# просто уродлив

«Всё-то вы знаете, товарищ прапорщик, везде-то в бывали» (с)

scala, vala, ruby, python и пр. скриптота

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

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

Человека, который придумал идиотский язык arc и упорно пишет кучу ветвящихся if вместо cond глупо воспринимать всерьез когда дело заходит до дизайне языков программирования и «потребностях хакеров».

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

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

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

Что такое лисп?
Вообще говоря, если объеденить все языки этого семейства, включая kernel lisp какой-нибудь или T, получится что место лиспу - везде.

Другое дело что CL место не совсем везде. Тому, что на уровне драйверов для операционной системы, к примеру, ему не место, если это не лисп-система. А все что выше - вполне себе.

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

И еще такой интересный момент - а знает ли тот, кто о лиспе понятия не имеет, где оному место? И, главное, если знает - откуда?

Love5an
()

Может проще лямбда-исчисление и теорию категорий почитать?

Глобально, красиво, надежно.

А те языки, которые сейчас есть, лет через 5-10 почти все исчезнут.

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

Scala остался единственным языком, способным конкурировать с C# 4.0

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

>И еще такой интересный момент - а знает ли тот, кто о лиспе понятия не имеет, где оному место?

Ты считаешь, что лиспу есть место в IT? Ты и доказывай. Нельзя доказывать отрицание, вроде «лиспу не место в IT».

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

>теорию категорий

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

лямбда-исчисление

формализм, эквивалентный машине Тьюринга, на практике не нужен и неудобен( эквивалентен программированию на брейнфаке).

Глобально, красиво, надежно.

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

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

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

P.S. Собственно это не мое мнение, скорее пересказ очевидных для всех фактов. Вряд ли кто-то в здравом уме будет оспаривать приведённые выше высказывания.

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

>А те языки, которые сейчас есть, лет через 5-10 почти все исчезнут.

сколько там десятилетий common lisp исчезает? :)

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

Ненене, я не предлагаю решать реальные задачи с помощью лямбда исчисления и теории категорий.
Я предлагаю ТС почитать (даже просто посмотреть, не обязательно перепроверять доказательства теорем) это, чтобы понимать, что _на_самом_деле_ скрываются за рекламой этого всего. Хотя бы для того, чтобы делать такие же суждения как ваши, находить достоинства и недостатки, подбирать лучшие для задачи инструменты.

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

А лисп все гниет и гниет, никак сгнить не может. Как зомби.

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

> Я предлагаю ТС почитать (даже просто посмотреть, не обязательно перепроверять доказательства теорем) это, чтобы понимать, что _на_самом_деле_ скрываются за рекламой этого всего. Хотя бы для того, чтобы делать такие же суждения как ваши, находить достоинства и недостатки, подбирать лучшие для задачи инструменты.

По крайней мере, мне кажется, что так будет.

doctor
()

> что изучать, чтобы не лежало оно потом мёртвым грузом?

скалю.

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

> статическая типизация ненужна и была придумана исключительно для повышения производительности

Статическая типизация была придумана для получения более надежных программ.

слабого железа 70-80х.

Почему не 60-х?

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

> Статическая типизация была придумана для получения

более надежных программ.


Фигня. Я писал на разных языках, с разными подходами к проверке типов, и никакой особой разницы в количестве ошибок не заметил (их очень мало), ну, в Common Lisp их проще и быстрее находить и устранять, это да. А так, надёжность программ - это свойство программиста, а не языка.

Почему не 60-х?

Ну, дык, придумали то не сразу :) Сначала думали в чём проблема, потом думали как решить, потом пытались реализовать, а тут глядишь - оказывается уже и не нужно... обидно, да?

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

> Ну так назови тех, кто не исчезнет.Поименно - список-то у тебя небольшой.

ничего не знаю, я не местный:)
P.S. пойду уроки делать, завтра контрольная в школе:)

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

> сколько там десятилетий common lisp исчезает?

правильный вопрос был бы о периоде полуисчезания

оценить его можно, глядя на частоту запросов «lisp» в гугле за последние 5 лет

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

>Я писал на разных языках, с разными подходами к проверке типов, и никакой особой разницы в количестве ошибок не заметил
Каких языках?

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

/me делает пометку о Love5an в своем маленьком черном блокноте.

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

> Я писал на разных языках, с разными подходами к проверке типов, и никакой особой разницы в количестве ошибок не заметил

Я тоже писал на разных языках блабла, и заметил, что в статически типизированных ошибок, связанных с неверными типами, от «нет» до «мало».

(их очень мало)

А, ну это просто ты сам по себе суперпрограммист.

Почему не 60-х?

Ну, дык, придумали то не сразу :)

Эээ... ты Петросян? Algol 6[08], Pascal - родом из 60-х и статически типизированы.

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

> Я предлагаю ТС почитать (даже просто посмотреть, не обязательно перепроверять доказательства теорем) это, чтобы понимать, что _на_самом_деле_ скрываются за рекламой этого всего. Хотя бы для того, чтобы делать такие же суждения как ваши, находить достоинства и недостатки, подбирать лучшие для задачи инструменты.

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

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

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

Возможно. Я сам в этом не особо разбираюсь.

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

> Algol 6[08], Pascal - родом из 60-х и статически типизированы.

Дык, тогда это не было стремление к оптимизации, просто по другому то вообще сделать не могли :) Ну и по сути, та проверка типов весьма существенно отличается от используемой в ML, Haskell и т.д.

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

>Фигня. Я писал на разных языках, с разными подходами к проверке типов, и никакой особой разницы в количестве ошибок не заметил (их очень мало), ну, в Common Lisp их проще и быстрее находить и устранять, это да. А так, надёжность программ - это свойство программиста, а не языка.

Ну что я могу сказать? Значит ты нихрена ничего не писал.

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