F #과 Scala의 가장 큰 차이점은 무엇입니까?


59

F #과 Scala는 개발자가 불변 데이터 유형 만 사용하도록 강요하지 않는 기능 프로그래밍 언어입니다. 둘 다 객체를 지원하고 다른 언어로 작성된 라이브러리를 사용하며 가상 머신에서 실행할 수 있습니다. 두 언어 모두 ML을 기반으로하는 것 같습니다.

F #이 .NET 용으로 설계되었고 Java 플랫폼 용 Scala로 설계 되었음에도 불구하고 F #과 Scala의 가장 큰 차이점은 무엇입니까?


2
투표 할 수 있고 이것이 유용한 질문이거나 아래에 유용한 답변이 있다고 생각되면 투표하십시오. 좋은 커뮤니티를 구축하려면 StackExchange 사이트에 투표가 필요합니다. 하루에 30 표를 낼 수 있고 낭비하지 마십시오. 명성이 높고 계산 횟수가 적은 사용자는 다음을 읽어보십시오. meta.programmers.stackexchange.com/questions/393/…
Maniero

functional programming langugages that don't force the developer to only use immutable datatypes-장난감 언어를 제외하고는 있습니까?
Ingo

1
@Ingo, ML과 Ocaml이 가변성을 허용하기 때문에 함수형 프로그래밍 언어로 적합하지 않다고 생각되면 정의를 조정해야합니다!
Frank Shearar

3
+ 프랭크, 당신은 오해했을 것입니다 : 내 말은, Haskell조차도 변경 가능한 데이터 타입을 가지고 있다는 것을 의미합니다. 따라서 @Jonas가 어떤 언어를 사용하여 불변의 데이터 유형 만 사용하도록 강요하는지 알고 싶습니다.
Ingo

답변:


61

주요 차이점 :

  • 스칼라와 F #은 OO- 제한 프로그래밍과 기능 프로그래밍을 하나의 언어로 결합합니다. 패러다임의 통일에 대한 그들의 접근 방식은 크게 다릅니다. 스칼라는 두 패러다임을 하나로 통합 하려고 시도하지만 ( 물리적 기능 패러다임이라고 함) F #은 두 패러다임을 나란히 제공합니다. 예를 들어, F #의 대수 데이터 형식은 순전히 기능이없는 구조이며, 스칼라의 ADT는 여전히 일반 클래스 및 개체입니다. (참고 : CLR 바이트 코드로 컴파일하는 과정에서 F # ADT조차 클래스와 객체가되지만 소스 레벨에서는 F # 프로그래머에게 보이지 않습니다.)

  • F #에는 전체 Hindley-Milner 스타일 형식 유추가 있습니다. 스칼라는 부분적인 유형 유추가 있습니다. 서브 타이핑 및 순수 OO-ness를 지원하므로 Hindley-Milner 스타일 유형 유추가 Scala에 불가능합니다.

  • 스칼라는 F #보다 훨씬 최소한의 언어입니다. 스칼라는 언어 전체에서 재사용되는 매우 작은 직교 구조를 가지고 있습니다. F #은 모든 작은 일에 새로운 구문을 도입하는 것으로 보이므로 스칼라에 비해 구문이 매우 무겁습니다. (Scala에는 40 개의 키워드가 있고 F #에는 97 개의 키워드가 있습니다.

  • Microsoft 언어 인 F #은 Visual Studio 형식으로 뛰어난 IDE 지원을 제공합니다. 스칼라 쪽에서는 상황이 좋지 않습니다. Eclipse 플러그인은 여전히 ​​표시에 미치지 않습니다. NetBeans 플러그인도 마찬가지입니다. IDEA는 현재 가장 좋은 방법으로 보이지만 Java IDE로 얻는 것에 가깝지는 않습니다. (Emacs 팬에게는 ENSIME이 있습니다.이 패키지에 대해 많은 좋은 소식을 들었지만 아직 시도하지는 않았습니다.)

  • 스칼라는 F #보다 훨씬 강력하고 복잡한 유형 시스템을 가지고 있습니다.


다른 차이점 :

  • F # 기능은 기본적으로 커리입니다. 스칼라에서는 커리가 가능하지만 자주 사용되지는 않습니다.

  • 스칼라의 구문은 Java, Standard ML, Haskell, Erlang 및 기타 여러 언어의 구문입니다. F # 구문은 OCaml, C # 및 Haskell의 구문에서 영감을 얻었습니다.

  • 스칼라는 더 높은 종류와 타입 클래스를 지원합니다. F #은 그렇지 않습니다.

  • 스칼라는 F #보다 DSL에 훨씬 더 적합합니다.


추신 : 나는 스칼라와 F #을 모두 좋아하며 앞으로 각 플랫폼의 주요 언어가되기를 바랍니다. :-)


6
이 답변은 몇 가지 오해를 영속시킵니다. 차례로 차례로 열거하겠습니다. "F #의 대수 데이터 형식은 OO'ness가없는 순전히 기능적인 구문이지만 F #의 대수 데이터 형식은 클래스 일 뿐이며 특히 OO 인스턴스 / 정적 멤버 및 속성을 사용하여 기능 보강을 지원합니다.
Jon Harrop

7
"Scala는 두 패러다임을 하나로 통합하려고합니다 (우리는 객체 기능 패러다임이라고 부릅니다). 그러나 Scala에는 일반적인 테일 콜 제거 기능이 없기 때문에 사소하지 않은 기능 코드 (연속 통과와 같은 거의 모든 기존의 기능 관용구 포함) 스타일과 재귀 매듭 묶기)는 스칼라에서 오버플로가 발생하기 쉽기 때문에 실제로는 쓸모가 없습니다.
Jon Harrop

4
@JonHarrop : Scala는 ADT를 특별히 취급하지 않습니다. 그들은 정규 수업처럼 취급됩니다. Thereofre Some(2)스칼라는 유형이 Some[Int]아니라 Option[Int]IMO 바람직하다. 반면에 F #은 ADT에 대한 특수 구문 및 처리 방식을 가지 Some 2므로 as 유형을 올바르게 유추 할 수 있습니다 int option. 따라서 ADT의 F # 인코딩은 Scala의 것 (물론 IMO)보다 더 좋습니다 . 나는 그것이 열등하다는 것을 암시하려고하지 않았으며, 그것이 그렇게 길면 미안합니다.
missingfaktor

9
@JonHarrop : JVM에 TCO가 없다고해서 많은 스칼라 개발자들이 방해하지 않았습니다. 당신이 생각하는 것만 큼 큰 문제는 아닙니다. 대부분의 경우 명시적인 재귀 대신에 고차 함수를 사용하고 있습니다. 스칼라에서 가장 높은 차수 함수는 재귀가 아닌 루프로 구현됩니다. 따라서 TCO 부족은 중요하지 않습니다.
missingfaktor

8
나는이 모든 대답이 스칼라에 약간 편향되어 있다고 생각합니다. 예를 들어 스칼라는 F #보다 훨씬 더 미니멀 한 언어 로, 좀 더 복잡한 유형 시스템의 주장 / 나중에 반대되는 것 같습니다.
Adam Gent

9
  • F #은 기능적 측면에서 정해지고, scala는 객체 지향적 측면을 기반으로합니다.
  • F #은 Visual Studio에서 더 나은 IDE 지원을 제공 하지만 Scala의 이클립스 플러그인은 오픈 소스 IDE 용이며 비교적 느립니다.
  • Scala보다 ML과 유사한 F #은 OCaml, Standard ML 및 Scheme과 같은 람다 미적분의 느낌을 최소화합니다. F #은 상당히 간단한 언어 인 것 같습니다.

4
"F #은 상당히 간단한 언어 인 것 같습니다." << 아니, 그렇지 않다. 스칼라보다 훨씬 큽니다. 이 주제에 관한 기사를 작성해야합니다.
missingfaktor

4
"Scala는 객체 지향 측면을 기반으로합니다." << 잘못되었습니다. 스칼라는 OOP와 함수형 프로그래밍을 융합하려고 시도합니다. 나는 개인적으로 객체 지향 기능을 거의 사용하지 않습니다. 우리가하는 대부분의 일은 순전히 기능적입니다.
missingfaktor

@missingfaktor : "스칼라보다 훨씬 큽니다." 문법이 얼마나 큽니까?
Jon Harrop

1
상황이 바뀌 었는지 모르겠습니다. 플러그인이 여전히 오픈 소스 인 IntelliJ의 스칼라.
Colliot

0

작지만 중요한 점은 라이센스입니다. Scala는 BSD (거의 가장 관대 한 자유 소프트웨어 라이센스)입니다. F #은 "Microsoft Research Shared Source 라이센스 계약"이었지만 현재는 상용 제품입니다 (아래 @Lorenzo에 따라, 더 구체적인 라이센스 계약을 찾을 수는 없지만).


3
실제로 F #은 현재 오픈 소스이고 Scala는 이제 Martin Odersky의 회사 인 Scala Solutions의 상용 제품입니다.
Jon Harrop

4
@Jon Harrop : Scala Solutions가 Scala 관련 도구, 서비스, 교육 등을 판매하고 있다고 생각합니다. 언어 자체는 여전히 BSD 라이센스하에있는 것 같습니다.
Joonas Pulakka

2
@Joonas : 정확히 F #도 마찬가지입니다.
Jon Harrop

5
@ JonHarrop : 스칼라는 오픈 소스로 남아 있습니다. 잘못된 정보를 퍼 뜨리지 마십시오.
missingfaktor

2
@ missingfaktor : Scala가 비공개 소스라고 말하지 않았습니다.
Jon Harrop
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.