существуют ли статически типизированные функциональные языки? - PullRequest
13 голосов
/ 16 ноября 2011

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

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

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

Ответы [ 6 ]

20 голосов
/ 16 ноября 2011

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

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

15 голосов
/ 17 ноября 2011

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

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

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

7 голосов
/ 16 ноября 2011

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

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

5 голосов
/ 16 ноября 2011

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

2 голосов
/ 16 ноября 2011

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

1 голос
/ 31 мая 2016

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

без исключения хвостовых вызовов:

  • C # (1999-настоящее время)
  • Scala (2008-настоящее время)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...