2010-11-21 2 views
16

안녕하세요. 전체가OCaml과 F 사이의 코드 호환성 #

OCaml에서 작은 취미 프로젝트를 개발 중입니다. F #으로 마이그레이션하는 것이 얼마나 쉬운 지 궁금합니다. F #에는 OCaml이 제공하지 않는 몇 가지 기능이 있지만 OCaml 코드를 포팅하려면 약간의 노력이 필요합니다. 반드시 마이그레이션하고 싶지는 않습니다. 두 플랫폼에서 유지/개발하고 싶습니다. 사전에

감사합니다, 마이클

+2

당신은 http://stackoverflow.com/questions/179492/f-and-ocaml을보아야합니다. –

답변

0

나는 어떤 OCaml의 F에 #의 -porting를 완료하지 않은,하지만 난 F 번호가 마음에 OCaml의 호환성 설계되었습니다 알고있다. 내가 아는 한, F #은 대부분 기본 OCaml의 상위 집합이다.

대부분의 OCaml 키워드를 지원해야하고 (코어 라이브러리 (또는 .Net 프레임 워크)에서 대부분의 표준 기능과 동등한 기능을 지니고 있어야합니다. #light). 그래서 적어도 취미 프로젝트를 위해서는 포팅이 실제로 쉬워야한다고 생각합니다.

F #에는 OCaml의 고급 모듈 시스템이 없으므로, 예를 들어. 펑터.

+0

이것은 수년 전에 사실 이었지만 더 이상 정확하지 않다고 생각합니다. 오랫동안 OCaml에서 갈라진 F #의 기본적인 것들이 많이 있습니다. 예를 들어, 배열을 인덱싱하는 것은 OCaml에서'a. (i)'이지만 F #에서 타입 주석을 갖는'a. [i]'입니다. 부동 소수점 숫자 ('+ .','* .' 등)에 대한 OCaml의 기본 산술 연산자는 더 이상 F #에서 올바르게 작동하지 않습니다. –

+1

F #은 대부분 OCaml의 상위 집합이 아니라 확장자가 약간있는 하위 집합 (활성 패턴 등)입니다. Jon의 대답은 F #에서 지원하지 않는 OCaml의 일부 기능을 나열합니다. –

13

크로스 컴파일 코드를 작성하는 것은 나에게 고통의 세계처럼 보입니다. Coherent PDF의 John Whitington은 내가 진정으로이 일을 시도한 사람 중 내가 아는 유일한 사람입니다.

많은 OCaml 코드를 F # (아마도 세계 어느 곳보다 많은 언어)에서 번역했고 주요한 문제는 #light 구문이며, 사소한 OCaml 기능 (객체, 다형성 변형, 상위 주문 모듈, 레이블 및 선택적 인수 등), 라이브러리 (예 : lablgl, lablgtk, ocamlgraph, laziness), 매크로 (구문 분석, 스트림, 패턴 일치 확장) 및 배열 색인과 같은 기본 구문의 변경. 예를 들어, 방금 Almabench benchmark을 OCaml에서 F #으로 이식하려고 시도했는데 F # 컴파일러의 버그로 인해 을 a.(i)에 다시 작성해야하므로 몇 시간이 걸렸습니다. OCaml 호환 모드는 다음과 같습니다. 아주 약해.

그래서 크로스 컴파일보다는 언어 선택을 권장합니다.

+0

고마워. 내가 피하고 싶었던 것은 여분의 언어를 배우는 것이 었습니다. .NET (C#)에 대한 실무 지식과 OCaml에 대한 기본 지식이 있으므로 (Func. 프로그래밍 과정에서) F #이 (거의) 주어졌지만. 분명히 그렇지 않습니다. :) – user515232

+1

문제 없습니다. OCaml과 F #을 동시에 배우기 때문에 방해가되는 것보다 더 많은 도움을 얻을 수있을 것입니다.하지만 그것들은 매우 유사하기 때문에 차이점을 발견 할 수있을 것입니다. –