Существуют ли статистически типизированные функциональные языки?

Это сложно для Google, может быть, у SO есть лучшие ответы?

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

один ответ для запуска: ActionScript 3 статически типизирован и предлагает некоторые функциональные парадигмы, хотя программы AS3 часто не используют их.

Ответ 1

Есть много. Haskell, OCaml и F # приходят на ум. Если вы разработчик Windows, F # очень хорош и хорошо поддерживается Microsoft (наряду с очень сильным сообществом StackOverflow). Lisp семейные языки (общий Lisp, схема, Clojure) являются примерами динамических функциональных языков.

ActionScript 3 имеет необязательную статическую типизацию. С другой стороны, компиляторы Haskell, OCaml и F # используют вывод типа для детерминированных типов вывода. Когда вы впервые просматриваете код, написанный в OCaml, отсутствие явных типов дает ему беспорядочный вид динамически типизированного языка с типом безопасности статического ввода. Я считаю, что факультативное статическое типирование для динамических языков (отличная идея) в конечном итоге будет заменено на вывод типа и что через 10 лет статические и динамические дискуссии будут спорными.

Ответ 2

Моя рекомендация для кого-то вроде вас (предположительно со статически типизированным, OO, обязательным фоном) Scala. Scala - это функционально-функциональный гибрид с лучшей поддержкой OO, чем Java и большинство других языков. Scala компилируется в байт-код JVM (поддержка также поддерживается, хотя и используется значительно меньше), и обеспечивает совместимость Java с непревзойденными языками JVM, отличными от Java. Я использую Scala в мой компилятор и нашел, что писать Scala код исключительно весело и удовлетворительно. Лучшим ресурсом для обучения Scala является Программирование в Scala, написанное самим разработчиком языка.

Если вы не хотите гибридный язык и вместо этого предпочитаете прыгать прямо в бой FP, я бы пошел с Haskell. Haskell - чисто функциональный язык; нет (первоклассного) понятия изменчивости или эффекта. Мой любимый ресурс Haskell - остроумный Учите вас Haskell для Great Good!. На самом деле, я бы настоятельно рекомендовал прочитать некоторые из LYAH, намерены ли вы пойти с Haskell, так как это фантастическое введение в мир статически типизированных FP. Я бы начал читать его, даже подумав о выборе языка.

Надеюсь, что этот ответ был полезен.

Ответ 3

Теория типов была впервые применена к функциональному программированию (типизированное лямбда-исчисление) задолго до любых императивных языков.

Для самых продвинутых систем статического типа (вы не найдете ничего сопоставимого в императивном мире), проверьте Coq и Agda.

Ответ 4

haskell бросается в глаза (хотя его система типов, вероятно, наиболее продвинута там), семейство языков ML, F # AFAIK.

Ответ 5

Если вы знакомы с экосистемой Java, очень похожий на Haskell язык Frege может стоить того, что он компилирует на Java исходный код.

Ответ 6

Некоторые статически типизированные языки с первоклассными лексическими замыканиями и гарантированным устранением хвостового вызова:

без устранения хвостового вызова:

  • С# (с 1999 года по настоящее время)
  • Scala (с 2008 года по настоящее время)