Ł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?
- 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.
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!
- 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!