Java 커뮤니티를 위해 F#이 .NET 커뮤니티를 위해 무엇을하는 기능을하는 기능적 언어가 있습니까?

StackOverflow https://stackoverflow.com/questions/169812

  •  05-07-2019
  •  | 
  •  

문제

Java 커뮤니티를 위해 F#이 .NET 커뮤니티를 위해 무엇을하는 기능을하는 기능적 언어가 있습니까?

JVM에 어떤 기능적 프로그래밍 언어를 사용할 수 있습니까?

도움이 되었습니까?

해결책

아마도 Clojure. 정적으로 입력되지는 않지만 F#보다 불변성과 동시성에 중점을 둡니다. 그러나 F# (및 일반적인 LISP와 달리)과 마찬가지로, 기본 플랫폼에서 OO 라이브러리를 소비하는 데 유용한 주로 기능적 언어입니다.

다른 팁

스칼라 언어가 될 것입니다.

엄격하게 기능적이지는 않지만 (기능적 및 객체 지향이 혼합되어 있음) Java ( .NET 버전의 스칼라), 그것은 JVM에서 F#과 가장 가까운 아날로그입니다.

내 마음에 오는 첫 번째 것은입니다 스칼라 하지만 정말 Ocaml-Java f#은 OCAML의 변형이므로 더 가깝습니다. 보다 Ocaml-Java를 Scala와 비교하는이 게시물:

OCAML 프로그래머는 일반적으로 광범위한 실제 작업을 위해 Java 또는 C ++ 프로그래머만큼 생산적입니다. 기본적으로 OOP 플랫폼을 기반으로 함에도 불구하고 F#은 OCAML (및 전체 ML 패밀리)의 생산성 향상 혜택을 포착하는 데 먼 길을갑니다. 대조적으로, Scala는 실제로 기본적인 것들을 포함하여 많은 혜택을 포착하지 못하며, 결과적으로 실제 ML보다 Scala에서 올바른 코드를 작성하는 것이 훨씬 어렵습니다.

더욱이 ML 언어 제품군은 간결하게 설계되었지만 Scala는 "Hello World!"의 모든 것에 불필요하게 장황합니다. 위로 향하여. ML 언어 패밀리는 광범위한 유형의 추론 (OCAML이 대부분)을 제공하지만 Scala는 비교할 때만 기초적인 추론 만 있습니다. OCAML은 비정상적으로 표현력있는 유형 시스템을 가지고 있지만 Scala는 실질적인 중요한 OOP에 거의 추가되지 않습니다.

지금은 스칼라를 말할 것입니다. 그러나 미래에는 요새를 살펴볼 것입니다. 사양의 첫 번째 구현은 2008 년 4 월 1 일에 출시되었습니다. 아니요, 그것은 농담이 아닙니다. 주요 인물은 다음과 같습니다.

  • 정적으로 입력했지만 혼란을 피하기 위해 많은 유형의 추론
  • 수학적 함수의 유니 코드 및 2D 렌더링
  • 병렬 실행을 위해 설계되었습니다 (각 기본값에 대해)
  • 맞춤형 라이브러리에 대한 강력한 지원 (Guy Steele의 영향)
  • 병치 작업 연산자를 포함한 연산자 과부하

더 많은 정보 프로젝트 요새 커뮤니티 웹 사이트 그리고 위키 백과 요새 페이지.

JVM에 꼬리 통화가없고 스택 소비와 관련하여 거의 모든 기능 코드를 강력하게 만들어야하기 때문에 논란의 여지가 없습니다.

JVM의 기능적 언어 구현에 가장 가까운 것은 Clojure, 스칼라 그리고 Ocaml-Java 프로젝트. 꼬리 통화 부족 (예 : 트램폴린)에 대한 해결 방법이 있지만, 이러한 언어 구현은 더 심각한 문제를 일으키기 때문에 이러한 언어 구현이이를 수행하지 않습니다.

Sun은 몇 년 동안 Tail Call에 대해 이야기 해 왔으며, 최근에는 그들이 그들을 임박하게 구현하려고한다고 지적했습니다. 그것이 끝나 자마자, 우리는 JVM, 특히 일부 생산 품질의 기능적 언어 구현에 대해 훨씬 더 많은 언어 다양성을 볼 것이라고 확신합니다. 그때까지 나는이 모든 언어를 장난감으로 간주합니다.

건배, Jon Harrop.

기능적 프로그래밍 패러다임 및 기타 패러다임 언어를 포함하여 JVM에 대한 프로그래밍 언어의 좋은 목록이 있습니다.

  • en.wikipedia.org/wiki/list_of_jvm_languages

첫 번째 선택은 Scala (Multi-Paradigm; OO & FP)입니다. 2009 년에 Scala를 5 개월 이상 보냈고 빠른 참조 시트를 만들었습니다 : bchiprog.blogspot.com/2009/05/scala-cheat-sheet.html

나는 흥미로운 다른 프로그래밍 패러다임이 있다는 것을 알았습니다. 다른 프로그래밍 패러다임은 X10, Fortress 및 Chapel과 같은 병렬 처리에 중점을 둡니다. X10은 Scala 위에서 구현됩니다. http://www.scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf

실제로 해결해야 할 문제를 해결 한 다음 가장 잘 해결할 수있는 언어를 선택해야합니다. 나는 개발자들이 어떤 유형의 문제를 쉽게 해결하고 간단하게 할 수있는 언어가 하나 있기를 바라는 것이 생각합니다.

@Marc Gravell- 기능 언어는 기업 등급 금융 시스템의 장에서 점점 더 많이 사용되고 있습니다. 우리는 내가 일하는 은행에서 많은 기능적 (순수 또는 "반지")을 사용합니다 ...

한편, 거기에 있습니다 FREGE, Haskell의 정신에서 순수한 기능적 비 스트릭 언어는 Java에 편집 한 다음 환경 (명령 줄 또는 Eclipse)에 따라 Javac 또는 Eclipse Compiler와 함께 추가로 컴파일됩니다.

사실, 나는 틀릴 수도 있지만 F#이 다른 .NET 언어만큼 주류가 될 것으로 기대하지는 않습니다. 몇 개의 원 (Academic, Compilers, 기타 몇 가지 시나리오)에 유용합니다. 그러나 잊지 마십시오. 씨# FP 사용을 제공하고 매번 더 좋아집니다. C# 1.2에는 대의원이 있습니다. C# 2.0에는 익명의 방법과 캡처/클로저가 있습니다. C# 3.0에는 단순성과 추상화 표현을위한 람다가 있습니다. 익명 유형 (C# 3.0) 공유 약간 튜플과의 유사성 (편의와 관련하여)이지만 분명히 매우 다른 짐승이므로 비슷한 비교는 아닙니다.

어쩌면 F#만큼 최적화되지 않았을 수도 있지만 대부분의 일상적인 FP 사용 케이스에 대해 충분합니다.

또한 불변성에 대한 더 나은 지원 (특히 스레딩에 대한)은 향후 고려할 C# 언어 팀의 마음에 매우 중요하다는 것도 분명합니다.

내 돈은 FP에서 C#을 개선하고 대부분의 일상적인 목적을 위해 .NET FP 제품이되는 것입니다. 물론, F# 사용법이있을 것입니다. 그러나 (순전히 주관적) 나는 단순히 큰 마이그레이션이있는 것을 보지 못합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top