[f#] F #이 OCaml로 변경됨 [닫힘]

F #은 OCaml에서 파생되었지만 누락되거나 추가 된 주요 항목은 무엇입니까? 특히 OCaml 학습에 사용할 수있는 리소스가 F #을 배우려는 사람에게도 유용한 지 궁금합니다.



답변

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

  • 펑터
  • OCaml 스타일 객체
  • 다형성 변이체
  • camlp4 / 5 전 처리기 또는 확장 점 (ppx)

또한 F #에는 레이블이 지정된 매개 변수 및 선택적 매개 변수에 대한 다른 구문이 있습니다.

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

차이점의 전체 목록은 여기 (참고 : dead.link의 archive.org 대체)입니다.


답변

이 질문은 한동안 답변을 받았지만 대부분의 답변이 F #에서 누락 된 OCaml 기능에 대해 말하고 있다는 사실에 상당히 놀랐습니다. 기존 OCaml 프로그램을 F #으로 이식하려는 경우 확실히 알 수 있습니다. 참고 문헌 대부분의 동기). 그러나 F #을 다른 언어로 만드는 많은 기능이 있습니다 (.NET 용 OCaml의 제한된 버전 만이 아닙니다!) F #에 추가 된 몇 가지 사항은 다음과 같습니다.

  • 숫자 계산을 처리하는 코드를 유형 검사 할 수 있는 측정 단위
  • 따옴표를 사용한 메타 프로그래밍 (F #에서 LINQ를 사용할 수 있으며 WebSharper 플랫폼과 같은 프로젝트를 승인하는 데 필수적 임)
  • 기능적 데이터 유형에 대한 추상화를 작성하기위한 활성 패턴 (보다 복잡한 패턴 일치 애플리케이션에 일반적으로 매우 유용한 기능)
  • 비동기 워크 플로우 ( 언어 화 I / O / 웹 서비스 / GUI 프로그래밍을위한 라이브러리 )의 언어 기능인 계산식
  • .NET 플랫폼과 완벽하게 상호 운용 될 수있는 .NET 호환 객체 시스템 (OCaml은 객체를 지원하지만 서로 다릅니다. 물론 두 시스템 모두에 이점이 있습니다).
  • 과부하 연산자 -내가 아는 한 OCaml에는 과부하 연산자가 없습니다. F # +에서는 모든 숫자 유형과이를 지원하는 유형에 모두 사용할 수 있습니다 .

그리고 솔직히 Visual Studio IDE에 대해서도 언급 할 가치가 있다고 생각합니다. 이것은 언어의 일부는 아니지만 사용자 경험을 향상시킵니다 (Visual Studio의 IntelliSense 지원은 정말 좋습니다!)

이 목록을 보면 F #의 인기에 크게 기여한 것이 많기 때문에 “펑터가없는 Ocaml”이상의 것입니다. F #은 분명히 OCaml을 기반으로하고 (하스켈과 같은 다른 언어의 아이디어를 취함) 그들과 많은 측면을 공유하지만 다른 것들도 많이 있습니다. 비동기 워크 플로, .NET 스타일 OO 및 메타 프로그래밍과 같은 것이 없으면 Microsoft Developer Division은 Visual Studio 2010에서 F #을 절대 포함하지 않을 것입니다.


답변

OCaml에는 F #에없는 기능이 많고 얻을 수없는 기능이 많으므로 항상 F #을 OCaml의 사촌으로 설명합니다. F #은 이전 CAML 언어와 더 밀접한 관련이 있습니다. 특히 F #은 추상화에 대한 지원이 매우 제한적이며 OCaml의 객체다형성 변형 과 같은 구조적 타이핑은 전혀 지원하지 않습니다 .

일부 응답자가 작성한 내용과 달리 F #은 레이블이 지정된 ( “named”) 및 선택적 인수를 제한적으로 지원합니다.

그러나 이러한 기능은 모두 고급 기능이므로 OCaml 관련 리소스를 사용하여 소규모 OCaml 스타일의 기능 프로그래밍의 기본 개념을 익히기 시작할 수 있습니다. 발견 할 첫 번째 주요 차이점은 캡슐화 및 추상화와 같은 대규모 문제로, OCaml과 F #에서 완전히 다른 방식으로 해결됩니다. F # 에서이 작업을 수행하는 방법을 배우려면 순전히 기능적인 데이터 구조에 대한이 기사 만 사용할 수 있습니다 .

또한 OCaml의 훌륭한 모듈 시스템을 사용하면 데이터 구조와 같은 유형의 코드를 쉽게 매개 변수화 할 수 있지만 OOP 대안은 끔찍할뿐만 아니라 .NET에서 거의 완전히 사용되지 않습니다. 또한, 매개 변수가 매끄럽게 매개 변수화 된 데이터 구조를 작성하려고 할 때 F # 컴파일러에서 수십 개의 버그가 발생했습니다. F # stdlib에는 멋진 데이터 구조 구현이 포함되어 있지만 사실상 재사용은 없습니다. 즉, 붙여 넣기 작업입니다.


답변

F #과 OCaml은 ML 언어의 분류 체계적으로 분류되며 다른 이상한 동물도 포함됩니다. F #은 OCaml보다 새로운 기능이며 아직 함수 (모듈의 기능-> 모듈) 나 행 유형 (개체 클래스 및 다형성 변형)이 없습니다. 그들 사이에서,이 두 가지 단순화는 아마도 .Net 플랫폼에서 개발하는 사람이 학습 곡선을 더 쉽게 만들어 줄 것입니다. 안타깝게도이 두 언어 기능은 OCaml에서 매우 강력하므로 F #을 코딩하는 방법에 대한 통찰력을 얻기 위해 OCaml 문헌을 읽으면 C #을 대체 할 수있는 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


답변