LINUX.ORG.RU

Нубский взгляд на языки функционального программирования

 , , ,


1

7

Привет!

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

  • Haskell — чистый функциональный, библиотек много, развитая инфраструктура, высокий порог вхождения. Компиляторы, верификаторы, финансы.
  • SML/OCaml — классика функционального программирования, относительно низкий порог вхождения. В индустрии применяются жостаточно редко: компиляторы, верификаторы, финансы, числодробилки.
  • Scala — гибридный язык, развитая система типов, интероп с джавой. Высокий порог вхождения. Финансы, корпоративный сектор.
  • Agda/Coq — мощная система типов, экстрация программ в разные языки, верификация. Компиляторы, верификаторы.
  • F# — гибридный язык, дотнет/моно. Корпоративный сектор.

А теперь вопрос: с точки зрения изучения теории типов и прочего матана, который стоит за языками программирования, какой язык лучше взять?

Перемещено mono из talks



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

однотиповые языки не очень кошерны для изучения, имхо.

ymn ★★★★★
()

Haskell

библиотек много

И все какие

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

Agda, Idris

buddhist ★★★★★
()

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

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

а чего там изучать? ТС интересуется системами типизации, а эрланг в этом отношении не очень.

ymn ★★★★★
()

Без Эрланга этот список не более чем.

UPD:

А теперь вопрос: с точки зрения изучения теории типов и прочего матана

ну тогда понятно.

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

Самая простая система типов из перечисленных у Haskell, да и порог вхождения у него слишком преувеличен всякими статьями на лурках и оригинальнейшими высказываниями лорфагоф. Ну, может еще ML, но они не развиваются же.

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

Только Clojure. Common Lisp не является функциональным

Бгг

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

Agda, Idris

SML, Coq =))

По первому есть куча учебников + книжонка с теорией категорий на пальцах. Второе шире распространено + доступны учебники и миллион phd тезисов и всяких паперов с матаном и куртизанками.

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

а чего там изучать? ТС интересуется системами типизации, а эрланг в этом отношении не очень.

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

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

Изучать системы типов на примере SML - это примерно как изучать ракетные двигатели на примере палки.

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

для начала пойдет, после можно перелезть на кок.

ymn ★★★★★
()

Начни с хаскеля - он единственный юзабельный для «программирования» из списка. Если понравится, потыкай Агду/Кок/Идрис. На остальное говно можно даже не смотреть.

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

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

rikardoac
()

какой язык лучше взять?

1С, ABAP4, VisualBasic, C#, Java

</thread>

P.S.: функциональные языки пользуются заслуженой славо на ЛОРе и прочих гиковско-задротских ресурсах. В реальной жизни в 99.999% случаев не нужны.

no-dashi ★★★★★
()

А теперь вопрос: с точки зрения изучения теории типов и прочего матана, который стоит за языками программирования, какой язык лучше взять?

Никакого тайного знания ты там не найдешь и программировать ты лучше не станешь от этого. У функциональщины очень узкая ниша. Это тупые хипстеры, натрахавшись со своим ООП, ищут себе новый фетиш — и выбор чисто случайно упал на функциональщину.

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

Common Lisp не является функциональным

Вот и выросло поколение

Которое знает о том, что Common Lisp мультипарадигменный

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

И тем не менее что функционального есть в clojure чего нет в cl? Вообще что-нибудь есть кроме более тесного сношения с JVM?

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

Ага, скажи это erlang программистам.

Много ты софта на эрланге видел, живого, кроме ejabberd, конечно? Ну и как после этого оценивать перспективы эрланга?

no-dashi ★★★★★
()
Ответ на: комментарий от Norgat

ты же ничего не понимаешь в лиспах, зачем лезешь?

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

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

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

Я вообще-то абсолютно серьезно сказал.

я не спорю, я именно по этому и сказал, про человека, который не может прочитать 2 абзаца текста.

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

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

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

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

Из того, что вспомнил сразу - tsung, rabbitmq, couchdb, erlyvideo, riak.

Ну и на нем пишут больше не на паблик, а внутри.

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

И тем не менее что функционального есть в clojure чего нет в cl?

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

Если очень нужно, то нужно использовать атомы, которые гарантируют отсутствие гонок в многопоточной программе.

В CL не так. Если создать структуру, то используя setf можно поменять значение поля in-place, как, скажем, в C или Java. Так же в CL есть массивы, которые меняются in-place и ведут себя как стандартные массивы из C (меняются через setf in-place).

А теперь посмотрим на Haskell, Erlang, OCaml - ЯП функциональная природа которых очевидна и заявлена создателями. Там никаких in-place преобразований не допускается, т.е. пересоздание структуры данных. В F# аналогично, для базовых структур данных (List, Set, Seq) и есть дополнительный синтаксис, если хочется поменять значение переменной (т.о. по дефолту классы написанные на F# тоже иммутабельны, а для мутабельности нужно явно это указать). Про Scala ничего не скажу - не знаю её.

P.S. иммутабельность важная штука, т.к. позволяет практически «бесплатно» (с точки зрения времени программиста и усложнения кода) параллелить код. Имхо, это одна из тех фишек функциональных ЯП, которая действительно интересна, т.к. map+filter+reduce можно и на Java какой-нибудь писать, если захотеть (и часто это делают см. Google Guava), но вот гарантий целостности данных это не даст никаких.

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

Я считаю, что функциональный язык поддерживает только функциональную парадигму. А когда язык поддерживает несколько парадигм — он мультипарадигменный.

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

Ну смотри, дядя Вася — железячник. Но при этом он штангист, знаток схемотехники, и в случае чего может забить плату в неподходящий для нее разъем так, чтобы она работала. И не делает его не-железячником :)

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