2013-03-03 4 views
9

나는이 질문이 아주 일반적이라는 것을 안다. 나는 더 잘 묻는 방법조차 모른다.OCaml 프로젝트를 어떻게 구성해야합니까?


나는 C에 많은 경험이 없어 난 그냥 자바로 OCaml의 비슷한 일을 할 수 바랍니다. Java에서 I 정상적으로 (Eclipse 또는 다른 IDE 사용) 프로젝트를 생성 예컨대

는 다음 I는 src 폴더 및 폴더 bin있다. compiled 건 모두 bin입니다.


그래서 초보자에게는 위와 같이 간단한 작업을 수행 할 수 있습니까? 그냥 소스 파일을 분할하고 쉽게 파일을 컴파일?


일반적으로 어떻게 OCaml 프로젝트 파일을 구성합니까?


마지막 질문은 내가 mli 또는 module를 사용해야입니까? ocaml-batteries-includedmli을 많이 사용하고있는 것으로 나타났습니다.

답변

6

OCaml 커뮤니티에서이 주제에 관해 많은 의견이 있으며, 실제로 구조 또는 유연성이 원하는 방식에 달려 있습니다. 나 자신이 게으르다면 나는 makefile과 ocamlbuild를 사용하고 다른 모든 것에 대해서는 oasis을 사용한다. 몇 가지 무작위 OCaml 프로젝트가 어떻게 작동하는지 그리고 무엇을 원하는지 확인해야합니다. 예를 들어, 오아시스 프로젝트는 다음과 같이 보일 수 있습니다 : https://github.com/avsm/ocaml-github. _oasis 파일을 살펴볼 필요가 있습니다 (maven을 사용했다면 pom.xml처럼 생각하면됩니다). oasis setup을 실행하면 모든 빌드 파일이 생성됩니다. ocaml setup.ml -all 다음에 ocaml setup.ml -install을 입력하면 시스템에 라이브러리가 설치됩니다.

mli 's를 사용하는 경우. 그들에 관한 논쟁이 조금 있습니다. 메일 링리스트의 토론은 다음과 같습니다. http://www.mentby.com/Group/caml-list/why-should-i-use-mli-files.html

다른 사람들이 사용할 공용 API에 모듈이 포함되어 있지 않으면 내 의견으로는 선택 사항입니다. 어떤 경우에는 필수 항목입니다.

7

좋은 질문! 다른 답변을 보는 데 정말로 관심이 있지만, 여기 내 프로젝트를 구성하는 방법은 다음과 같습니다.

우선 OCalIDE이라는 멋진 Eclipse를 사용합니다. 이클립스 플러그인은 정말 멋진 Eclipse 플러그인입니다.
이맥스 사용자라면 TypeRex을 사용할 수 있습니다 (죽었지 만 OCaml 커뮤니티가 매우 천천히 움직이기 때문에 모든 시간을 가질 수 있습니다). Vim 사용자 인 경우 Omlet이 있지만 항상 좋은 해결책은 없습니다.

이클립스에서 "Managed Ocaml Project"를 선택하면 기본적으로 을 의미합니다. 컴파일하는 것에 대해 걱정하고 싶지 않고이 프로젝트를 결코 공유하지 않을 것입니다..
개인 프로젝트 및 임시 테스트에는 충분합니다. 하지만 "Ocaml Makefile Project"와 "ocamlbuild가있는 Ocaml 프로젝트"중 하나를 선택해야합니다. Makefile을 선택하십시오. 훨씬 더 유연하고 쉬운 솔루션입니다.

Eclipse는 당신에게 a default Makefile for Ocaml projects을 제공 할 것이며, 코멘트에서 잘 설명됩니다. Ocaml 빌드 시스템에 익숙하지 않은 경우 사용하는 것이 좋습니다. 그렇다면 기본 Makefile이 너무 커서 읽고 읽을 수 없기 때문에 자신의 Makefile을 사용하는 것이 좋습니다.


위대한! 이제 우리는 우리가 가장 좋아하는 편집자로 프로젝트를 진행했으며 글로벌 구조를 만들 준비가되었습니다!

/ 
|- src/  # source files 
|- lib/  # dependencies 
|- test/ # tests files and test binaries 
|- _build/ # binaries and object files, sometimes managed by ocamlbuild 
|- AUTHORS # who did that marvelous stuff 
|- README # what is it 
|- Makefile # *always* provide a Makefile, you never know... 
|- _tags # when I use ocamlbuild 
|- _oasis # when I use oasis 

때때로, 아니 lib 디렉토리가없는, 즉 좋은 : 프로젝트의 루트에서

, 나는 말했다 고전 GNU 타르볼의 규칙을 따릅니다. 하지만 프로젝트에 긍정적 인 영향을주기 때문에 AUTHOR 및 README 파일을 제공해야합니다.


그건 지루한 부분이었습니다. src 디렉토리는 어떻습니까?

  1. OCaml 모듈러 시스템은 자신의 컨테이너에 물건을 만드는 데 매우 유용합니다. (황금 규칙의 일종) 내가 스스로 내 모듈 일관성을 유지 이
    • 내가 펑
    • 하지만 아무것도 내부 모듈을 사용하지 않는 : 나는 나의 자신의 경험에 유의하십시오. 그 때문에 내 모듈 이름은 주로 내부 상태 (javaists가 Singleton이라고 부르는)와 관련된 데이터 유형 또는 특정 컨테이너와 관련이 있습니다.
    • 종종 두 개 또는 세 개의 명확한 모듈을 만듭니다. 진입 점, 모든 공통 유형을 포함하는 모듈 및 모듈 일반적으로 사용되는 모든 기능을 포함합니다. 순환 종속성을 피할 수 있습니다. 난 정말 내 모듈의 구조를 볼 수 있습니다하지 않는 한
  2. 내가 src/ 디렉토리에있는 모든 평면 유지 (사람들은 파싱을, 사람들은 AI 컴퓨팅 있으며, 사람들은 ... 네트워크입니다). C 프로젝트와 같은 방식입니다.

    OCaml은 간결한 언어이므로 몇 개의 파일이 있어야합니다. C 프로젝트의 경우 디렉토리 구조를 가능한 한 평평하게 유지하십시오. 디렉토리는 모듈 이름 또는 네임 스페이스의 일부가 아니므로 프로그래머가 편리하게 사용할 수 있습니다.

  3. mli 부분 : 실제로 프로젝트의 목표에 달려 있습니다. 이것은 나의 방법론입니다.
    • 일반적인 규칙은 다음과 같습니다. mli가있는 경우 문서화하십시오. Mlis는 컴파일러 프로그래머를 돕기 위해 있습니다.
    • 너에게 맞습니까? ml 부분을 문서화하고 제약 조건을 입력하거나 너무 큰 -mult-to-browse ml에 대해 mli 만 생성하십시오.
    • 프로젝트를 배포 하시겠습니까? mli에 문서화하기 때문에 우리는 선택의 여지가 있다면 우리가 읽을 첫 번째 파일입니다. 인터페이스를 생성 할 파일을 선택하십시오. 일부는 내부 용이며 일반 사용자는 해당 파일을 읽을 수 없습니다.
    • OCaml 객체 시스템을 처리 할 때 이들은 항상 지저분해질 수 있으므로 항상 필요합니다.일반적인 경우

은 그래서 게스트 즉시 알고 좋은 및/고급 내부에있는 어떤 파일 알 가능한 한 적은 수의 내 MLI를 유지하는 것이 행복 해요.

또한 내가 앞서가는 것을 막는 유형 제약이 없기 때문에 리팩토링에 도움이됩니다.
테스트 스위트는 우리가 아무 것도 깨지 않았 음을 명심하십시오. (OUnit, 배포판이 패키지되어 있어야합니다.) 매우 간단하고 효율적이며 좋은 프로젝트입니다.

그게 전부입니다. 희망은 누구를 도울 것입니다!

관련 문제