F #은 OCaml에서 파생되었지만 누락되거나 추가 된 주요 항목은 무엇입니까? 특히 OCaml 학습에 사용할 수있는 리소스가 F #을 배우려는 사람에게도 유용한 지 궁금합니다.
F #은 OCaml에서 파생되었지만 누락되거나 추가 된 주요 항목은 무엇입니까? 특히 OCaml 학습에 사용할 수있는 리소스가 F #을 배우려는 사람에게도 유용한 지 궁금합니다.
답변:
주요 차이점은 F #이 지원하지 않는다는 것입니다.
또한 F #에는 레이블이 지정된 매개 변수 및 선택적 매개 변수에 대한 다른 구문이 있습니다.
이론적으로 이러한 기능을 사용하지 않는 OCaml 프로그램은 F #으로 컴파일 할 수 있습니다. Learning OCaml은 F #을 완벽하게 합리적으로 소개합니다 (그리고 그 반대도 마찬가지입니다).
차이점의 전체 목록은 여기 (참고 : dead.link의 archive.org 대체)입니다.
이 질문은 한동안 답변을 받았지만 대부분의 답변이 F #에서 누락 된 OCaml 기능에 대해 말하고 있다는 사실에 상당히 놀랐습니다. 기존 OCaml 프로그램을 F #으로 이식하려는 경우 확실히 알 수 있습니다. 참고 문헌 대부분의 동기). 그러나 F #을 다른 언어로 만드는 많은 기능이 있습니다 (.NET 용 OCaml의 제한된 버전 만이 아닙니다!) F #에 추가 된 몇 가지 사항은 다음과 같습니다.
+
에서는 모든 숫자 유형과이를 지원하는 유형에 모두 사용할 수 있습니다 .그리고 솔직히 Visual Studio IDE에 대해서도 언급 할 가치가 있다고 생각합니다. 이것은 언어의 일부는 아니지만 사용자 경험을 향상시킵니다 (Visual Studio의 IntelliSense 지원은 정말 좋습니다!)
이 목록을 보면 F #의 인기에 크게 기여한 것이 많기 때문에 "펑터가없는 Ocaml"이상의 것입니다. F #은 분명히 OCaml을 기반으로하고 (하스켈과 같은 다른 언어의 아이디어를 취함) 그들과 많은 측면을 공유하지만 다른 것들도 많이 있습니다. 비동기 워크 플로, .NET 스타일 OO 및 메타 프로그래밍과 같은 것이 없으면 Microsoft Developer Division은 Visual Studio 2010에서 F #을 절대 포함하지 않을 것입니다.
<@ a @>
타입 정의는 물론, 언 바운드 변수를 가진 표현식을 인용 <@ type t = int @>
할 수 없으며, Camlp4와 같이 확장 성이 낮은 어휘 분석기와 파서보다 임의의 문법을 처리 할 수 없습니다. 적절한 매크로 시스템의 부족은 하나의 결함이지만 IMHO는 F #에 대한 적절한 어휘 분석기와 파서가 없다는 것이 훨씬 더 심각한 장애입니다. 실제로 개발자는 OCaml을 사용하여 어휘 분석기와 파서를 작성하여 F #이 지원하는 서브 세트로 제한하고 OCaml의 우수한 도구 지원을 활용하기 위해 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