문제

F#은 OCAML에서 파생되었지만 어떤 주요 항목이 누락되거나 추가됩니까? 특히 OCAML 학습에 이용 가능한 리소스가 F#을 배우고 싶은 사람에게도 유용한 지 궁금합니다.

도움이 되었습니까?

해결책

주요 차이점은 F#이 지원하지 않는다는 것입니다.

  • 함수
  • OCAML 스타일 객체
  • 다형성 변이체
  • CAMLP4/5 사전 처리기 또는 확장 지점 (PPX)

또한 F#에는 레이블이 다른 구문과 선택적 매개 변수가 있습니다.

이론적으로 이러한 기능을 사용하지 않는 OCAML 프로그램은 F#로 컴파일 될 수 있습니다. OCAML을 배우는 것은 F#에 대한 완벽하게 합리적인 소개입니다 (그 반대도 마찬가지).

차이의 전체 목록은 다음과 같습니다 여기 (참고 : Archive.org Dead Link 교체).

다른 팁

이 질문은 지금 한동안 답변을 받았지만 대부분의 답변이 F#에서 OCAML 기능이 누락 된 내용을 말한 것에 놀랐습니다. 기존 OCAML 프로그램을 F# (아마도 이는 대부분의 참조 기사의 동기 부여). 그러나 F#가 다른 언어를 만드는 많은 기능이 있습니다 (.NET 용 OCAML의 제한된 버전이 아닙니다!) 여기 F#에 추가되는 몇 가지 사항이 있습니다.

  • 측정 단위 수치 계산을 다루는 코드를 입력 할 수 있습니다.
  • 메타 프로그래밍 인용문 사용 (F#에서 LINQ를 사용할 수 있으며 WebSharper 플랫폼과 같은 프로젝트를 약속하는 데 필수적입니다)
  • 활성 패턴 기능 데이터 유형에 대한 추상화를 만들기 위해 (일반적으로보다 복잡한 패턴 매칭 응용 프로그램에 매우 유용한 기능)
  • 계산 표현 그것은 뒤에 언어 기능입니다 비동기 워크 플로우 (비동기 I/O/웹 서비스/GUI 프로그래밍을위한 라이브러리)
  • .NET 호환 객체 시스템 따라서 .NET 플랫폼과 완전히 상호 작용할 수 있습니다 (OCAML은 객체에 대한 지원이 있지만 다른 시스템에는 몇 가지 이점이 있습니다).
  • 오버로드 된 연산자 - 내가 아는 한, OCAML은 오버로드 된 연산자가 없습니다. F#에서 사용할 수 있습니다. + 모든 숫자 유형과이를 지원하는 유형에 대해.

그리고 솔직히, 나는 또한 비주얼 스튜디오 IDE를 언급 할 가치가 있다고 생각합니다. 이것은 언어의 일부가 아니지만 실제로 사용자 경험을 향상시킵니다 (Visual Studio의 Intellisense 지원은 정말 좋습니다!)

목록을 보면 F#의 인기에 크게 기여한 많은 것들이 있으므로 "Functors없는 OCAML"이상의 것입니다. F#은 확실히 OCAML을 기반으로하며 (Haskell과 같은 다른 언어의 아이디어를 가져옵니다) 많은 측면을 공유하지만 다른 많은 것들도 있습니다. 비동기 워크 플로, .NET 스타일 OO 및 메타 프로그래밍과 같은 것들이 없으면 Microsoft Developer Division은 Visual Studio 2010에 F#을 포함하지 않을 것입니다.

OCAML에는 F#가 가지고 있지 않고 결코 얻지 못할 가능성이 높기 때문에 항상 f#을 OCAML의 사촌으로 묘사합니다. F#은 이전 CAML 언어와 더 밀접한 관련이 있습니다. 특히, F# 사물 그리고 다형성 변이체) 전혀.

일부 응답자가 작성한 내용과는 달리 F#는 레이블이 붙은 ( "명명") 및 선택적 인수에 대한 (제한된) 지원을 가지고 있습니다.

그러나 이것들은 모두 고급 기능이며 OCAML에 대한 리소스를 사용하여 소규모 OCAML 스타일 기능 프로그래밍의 기본 아이디어를 확실히 잡기 시작할 수 있습니다. 당신이 발견 할 첫 번째 주요 차이점은 OCAML과 F#에서 완전히 다른 방식으로 해결되는 캡슐화 및 추상화와 같은 대규모 문제입니다. F#에서이를 수행하는 방법을 배우고 싶다면 사용 가능한 유일한 문헌은 순수한 기능 데이터 구조에 관한이 기사.

또한 OCAML의 훌륭한 모듈 시스템은 유형 (예 : 데이터 구조)을 통해 코드를 쉽게 매개 변수화 할 수 있지만 OOP 대안은 끔찍할뿐만 아니라 .NET에서 거의 완전히 사용되지 않습니다. 또한, 우아하게 가발적으로 파라미터 화 된 데이터 구조를 작성하려고 할 때, 나는 아무도 전에는 이것을 시도하지 않았기 때문에 F# 컴파일러에서 수십 개의 버그를 쳤다. f# stdlib에는 멋진 데이터 구조 구현이 포함되어 있지만 사실상 재사용이 없습니다. 즉, Cut'n'paste 작업입니다.

F# 및 OC CAML은 ML 언어 제품군의 분류 학급이며, 여기에는 다른 이상한 동물의 전체 패스가 포함됩니다. F#은 OCAML보다 새롭고 functors [module -> module의 함수] 또는 행 유형 [객체 클래스 및 다형 변형]이 없습니다. 그들 사이에서,이 두 가지 단순화는 아마도 .NET 플랫폼에서 개발하는 누군가가 학습 곡선을 더 쉽게 만들 수 있습니다. 안타깝게도,이 두 언어 기능은 OCAML에서 매우 강력하므로 OCAML 문헌을 읽어 F#을 코딩하는 방법에 대한 통찰력을 얻는 것은 아마도 둘 다 이용 가능한 C#에 대한 훌륭한 대안 일 때 후자와의 좌절감을 초래할 것입니다.

F#는 OCAML 구문을 직접 지원합니다. 100% 호환되지는 않지만 매우 가깝다고 생각합니다.

http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html

차이점 목록은 다음과 같습니다 (최신 정보가 확실하지 않음)

http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html

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