Какие плюсы / минусы для разных функциональных языков? - PullRequest
3 голосов
/ 31 января 2009

Я знаю несколько функциональных языков - F #, Lisp и его диалекты, R и другие. Однако, поскольку я никогда не использовал ни одного из них (хотя три из них, которые я упомянул, есть в моем списке «для изучения»), я задавался вопросом о плюсах / минусах различных функциональных языков. Существуют ли существенные плюсы / минусы как в изучении языка, так и в реальных приложениях этого языка?

Ответы [ 5 ]

3 голосов
/ 31 января 2009

Haskell является "экстремальным" (ленивым, чистым), имеет активных пользователей, много документации и делает работоспособными приложения.

SML является «менее экстремальным» (строгим, нечистым), имеет активных пользователей, формальную спецификацию, множество реализаций (SML / NJ, Mlton, Moscow ML и т. Д.). Реализация зависит от того, как приложения развертываются во время выполнения.

OCaml - это ML с отношением. Он имеет объектную ориентацию, активных пользователей, документацию, дополнения и позволяет запускать приложения.

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

F # похож на OCaml с поддержкой Microsoft и библиотеками .NET.

Scala работает на JVM и может использоваться как функциональный язык с расширенными функциями, или как просто расширенная версия Java, или и то, и другое. Гибкость названа недостатком изучения функционального языка, потому что легко вернуться к императивным способам Java. Конечно, это также является преимуществом, если вы хотите использовать существующие библиотеки JVM.

2 голосов
/ 31 января 2009

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

http://paulspontifications.blogspot.com/2007/08/no-silver-bullet-and-functional.html

Почему функциональное программирование имеет значение

Насколько отличаются функциональные языки:

Отличительные черты функциональных языков

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

Насколько вам следует учиться: выберите тот, который будет для вас удобным. Например, если вы используете .NET и Visual Studio, F # отлично подходит. (На самом деле, интеграция VS делает F # сильным соперником, и точка.) Книга " Как разрабатывать программы " (полный текст, бесплатно, онлайн) со схемой PLT также является хорошим выбором.

Я предвзят, но F #, похоже, обладает самым большим потенциалом "реального мира". Это происходит главным образом из-за хорошей интеграции IDE / .NET, позволяющей вам полностью задействовать .NET и OO, сохраняя при этом большую функциональную мощь (и расширяя ее несколькими способами). Scala может быть возможным соперником, но это скорее язык ОО, имеющий некоторые функциональные особенности; следовательно, производительность Scala не будет такой большой.

Редактировать: Просто отметить JavaScript и Ruby, прежде чем кто-то прокомментирует это :). Ruby - это еще кое-что, на что вы могли бы взглянуть, если вы работаете с веб-разработчиками такого типа, поскольку в нем много функциональных концепций, хотя и не так много, как в других языках.

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

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

1 голос
/ 31 января 2009

Lisp имеет плавную кривую обучения. Вы можете выучить основы за час, хотя, конечно, это займет больше времени, чтобы выучить идиомы и т. Д. С другой стороны, есть много диалектов Лисп, и трудно взаимодействовать с основными средами, такими как Java или .NET.

Я бы не рекомендовал R, если вам не нужна статистика. Это странный язык, и не совсем функциональный. Вы можете заниматься функциональным программированием на R, но большинство людей этого не делают.

Если вы знакомы со стеком инструментов Microsoft, в F # может быть легко попасть. За этим стоит огромная, хорошо проверенная библиотека, то есть CLR.

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

0 голосов
/ 31 января 2009

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

Однако я нашел это: Haskell на практике . Проверьте это, удивительно.

Характеристики функциональных парадигм иногда являются плюсами, а иногда минусами, в зависимости от ситуации / контекста. Вот некоторые из них:

  • высокий уровень
  • лямбда-функции
  • Ленивая оценка
  • Функции высшего порядка
  • рекурсия
  • вывод типа

Цитировать из Википедии:

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

Функциональные языки программирования имеют воспринимается как менее эффективный в их использование процессора и памяти, чем императивные языки, такие как C и Паскаль. [26] Однако для программ, которые выполнять интенсивные численные вычисления, функциональные языки такие как OCaml и Clean похожи в скорость до C. Для программы, которые обрабатывают большие матрицы и многомерные базы данных, массив функциональные языки (такие как J и K) были разработаны с оптимизацией скорости в виду.

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

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

0 голосов
/ 31 января 2009

семейство ML (SML / OCaml / F #):

Плюсы:

  • Довольно просто
  • Иметь эффективные реализации (на уровне с Java / C #)
  • Легко предсказуемое потребление ресурсов (по сравнению с ленивыми языками)
  • Считываемый синтаксис
  • Сильная модульная система
  • (для F #): доступна большая библиотека .Net
  • Имеет изменяемые переменные

Минусы:

  • Иногда слишком просто (нет классов типов => проблемы с перегрузкой)
  • (кроме F #): в стандартных библиотеках отсутствуют некоторые полезные вещи
  • Имеет изменяемые переменные:)
  • Не может иметь бесконечные структуры данных (не ленивый язык)

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

...