LINUX.ORG.RU

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

 , , ,


1

7

Привет!

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

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

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

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



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

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

Любой язык, в котором о банальной ошибке вида

3 + True
узнаешь только в рантайме (а то и не узнаешь, лол, срань навроде питона радостно ответит
4
(!)), совершенно бесполезен для программирования чего бы то ни было.

anonymous
()

чистый функциональный

Есть I/O - не чистый.

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

совершенно бесполезен для программирования чего бы то ни было.

Я бы не был столь категоричен.

λ> cat test.c
#include <stdbool.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  printf("%d\n", 3 + true);
  return 0;
}
λ> gcc test.c -o test && ./test
4
Deleted
()
Ответ на: комментарий от Deleted

В данном языке это не считается ошибкой. Собственно, это тоже отрицательная сторона языка.

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

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

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

Вот тут бы и пригодился (мой) FAQ

можно ссылку?

betalor
() автор топика
Ответ на: комментарий от pseudo-cat

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

anonymous
()

В кложуре тоже можно плюнуть на всё и сделать alter-var-root посреди программы. И есть мутабельные транзиенты. Но пока количество такого кода не превышает какой-то определенный субъективный порог, код остается функциональным.

Согласен с утверждением, что парадигма языка определяется community. А community обычно отталкивается от видения создателя языка и первопроходцев. Если в языке допускается функциональное программирование, но оно не поощряется => язык не функциональный. И наоборот.

В CL поощряется ФП, но им не ограничивается; следовательно CL мультипарадигменный.

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

В CL поощряется ФП

Ну это не правда. Во всех lisp-2 ФП не поощряется, а наоборот считается менее предпочтительным.

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

мне же сказали... я хотел понять твои критерии отнесения ЯП к функциональному и, кажется, понял, ок

pseudo-cat ★★★
()
Ответ на: комментарий от comp00

хотя и зародыш ООП там есть.

Откуда вы все повылазили?

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