2013-03-03 18 views
9

Wiem, że to pytanie jest dość ogólne i nawet nie wiem, jak lepiej zapytać.Jak powinienem zorganizować mój projekt OCaml?


nie mam dużo doświadczenia w C i Żałuję tylko mogę zrobić coś podobnego w SML jak w Javie.

Na przykład, w Java, normalnie utworzyć projekt (przy Eclipse lub innego IDE), to mają src katalog i folder bin. Wszystkie rzeczy compiled idą do bin.


Więc dla rozrusznika, jak mógłby zrobić coś tak prostego jak powyżej? wystarczy podzielić pliki źródłowe i kompilować pliki z łatwością?


Zwykle, w jaki sposób organizujesz pliki projektu OCaml?


Ostatnim pytaniem jest to, że powinno się używać mli lub module? Zauważyłem, że ocaml-batteries-included używa bardzo często numeru mli.

Odpowiedz

6

Istnieje wiele różnych opinii na ten temat w społeczności OCaml i to naprawdę zależy od tego, jaka jest struktura lub elastyczność. Sam używam makefile i ocamlbuild, jeśli jestem leniwy i oasis dla wszystkiego innego. Powinieneś sprawdzić kilka losowych projektów OCaml, aby zobaczyć, jak to działa i co chcesz. Na przykład projekt oazy może wyglądać tak: https://github.com/avsm/ocaml-github. Wystarczy spojrzeć na plik _oasis (pomyśl o tym jak pom.xml, jeśli kiedykolwiek używałeś maven). Uruchomienie oasis setup powinno wygenerować dla ciebie wszystkie pliki kompilacji. ocaml setup.ml -all, po której następuje ocaml setup.ml -install, zainstalowałbym bibliotekę w twoim systemie.

Jeśli chodzi o używanie mli. Jest w nich trochę kontrowersji. Oto dyskusja z list dyskusyjnych: http://www.mentby.com/Group/caml-list/why-should-i-use-mli-files.html

Moja własna opinia jest taka, że ​​są one opcjonalne, chyba że twoje moduły są częścią publicznego interfejsu API, z którego inni będą korzystać. W takim przypadku są one obowiązkowe.

7

Ładne pytanie! Będę naprawdę zainteresowany innymi odpowiedziami, ale oto jak organizuję swoje projekty:

Przede wszystkim używam Eclipse z doskonałym OCalIDE, jest to naprawdę fajna wtyczka eclipse, aktywnie utrzymywana.
Jeśli jesteś użytkownikiem Emacsa, możesz użyć TypeRex (która jest martwa, ale ponieważ społeczność OCaml porusza się bardzo powoli, masz cały swój czas). Jeśli jesteś użytkownikiem Vima, zawsze jest Omlet, ale nie ma naprawdę fajnego rozwiązania.

W Eclipse można wybrać "Zarządzany projekt Ocaml", co oznacza w zasadzie Nie chcę się martwić kompilacją i nigdy nie udostępnię tego projektu.
Zacznij od tego, wystarczy to do osobistych projektów i tymczasowych testów. Ale jeśli nie możesz, będziesz musiał wybrać między "Ocaml Makefile Project" a "Ocaml project with ocamlbuild". Wybierz Makefile, to znacznie bardziej elastyczne i łatwe rozwiązanie.

Eclipse dostarczy Ci a default Makefile for Ocaml projects, bardzo dobrze wyjaśnione w komentarzach. Polecam go użyć, jeśli nie jesteś zaznajomiony z systemem kompilacji Ocaml. Jeśli tak, polecam użyć własnego Makefile, ponieważ domyślny jest zbyt duży i nieczytelny (chyba).


Świetnie! Teraz mamy nasz projekt w naszym ulubionym edytorze i jesteśmy gotowi na globalną strukturę!

U podstaw projektu, śledzę konwencję klasycznego archiwum GNU, który powiedział:

/ 
|- 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 

Czasami nie ma katalogu lib, to dobrze. Ale powinieneś dostarczyć plik AUTHOR i README, ponieważ jest cichy pozytywny dla twojego projektu.


To była nudna część, a co z katalogiem src?

  1. Modułowy system OCaml jest bardzo pomocny w tworzeniu rzeczy we własnych pojemnikach. Pragnę zauważyć w moich własnych doświadczeń, że:
    • nie używam modułów wewnętrznych do niczego, ale funktorów
    • Trzymam moduły spójne przez siebie (rodzaj złotej reguły). W tym celu moje nazwy modułów są głównie związane z typami danych lub określonymi kontenerami ze stanami wewnętrznymi (które javaści nazywają Singletons).
    • Często tworzę dwa lub trzy oczywiście konkretne moduły: punkt wejścia, moduł zawierający wszystkie popularne typy i moduł która zawiera wszystkie powszechnie używane funkcje. Uniknie on zależności cyklicznej.
  2. I zachować wszystkie mieszkania w katalogu src/ chyba mogę naprawdę zobaczyć strukturę moich modułów (te są parsowania, to są AI computing, to są sieci ...). Tak samo jak w przypadku projektów C.

    OCaml to zwięzły język, więc powinieneś mieć niewiele plików. Jeśli chodzi o projekty C, spróbuj również zachować możliwie płaską architekturę katalogów, pamiętaj, że katalog nie jest częścią nazwy modułu ani przestrzeni nazw, a więc tylko dla wygody programistów!

  3. Część mli: to naprawdę zależy od celu projektu. To jest moja metodologia:
    • Jedyną ogólną zasadą jest: udokumentowanie mli, jeśli istnieje. Mlis są tutaj, aby pomóc programistom kompilatorom i.
    • Czy to dla ciebie? Dokumentuj w części ml i generuj tylko mli dla wpisywania wiązań lub zbyt dużego do przeglądania ml.
    • Chcesz rozpowszechniać swój projekt? Dokument w mli, ponieważ ten pierwszy plik zostanie odczytany, jeśli będziemy mieli wybór. Wybierz pliki, które chcesz wygenerować, interfejsy, być może niektóre są wbudowane i nie chcesz, aby były one czytane przez zwykłych użytkowników.
    • Są zawsze potrzebne, gdy mamy do czynienia z systemem obiektów OCaml, ponieważ może on bardzo szybko stać się brudny.

W ogólnym przypadku jestem szczęśliwy, aby moje MLI tak mało jak to możliwe, gościem będzie od razu wiedzieć, które pliki są dobrze wiedzieć, a które są wewnętrzne/zaawansowany.

Ponadto pomaga w refaktoryzacji, ponieważ nie mam ograniczeń typu, które powstrzymują mnie przed dalszymi działaniami.
Należy pamiętać, że pakiet testowy jest tutaj, aby upewnić się, że niczego nie zepsuł (patrz OUnit, Twoja dystrybucja powinna była dla ciebie spakowana.Jest bardzo prosty i wydajny, dobry projekt).

To wszystko, co widzę. Mam nadzieję, że pomoże każdemu!

Powiązane problemy