Sans doute celui-ci ne répond pas à votre question complètement, mais voici mon expérience concernant l'environnement de compilation:
J'apprécie vraiment OASIS. Il a une belle gamme de fonctionnalités, d'aider non seulement à construire le projet, mais aussi à écrire de la documentation et de support de l'environnement de test.
Système de construction
- OASIS génère
setup.ml
le fichier à partir de la spécification (_oasis
le fichier), qui travaille sur la base d'un script de construction. Il accepte -configure
, -build
, -test
, -distclean
drapeaux. J'ai bien utilisé, tout en travaillant avec différents GNU et d'autres projets qui utilisent habituellement les Makefiles et je trouve ça pratique qu'il est possible de les utiliser toutes automatiquement ici.
- Les Makefiles. Au lieu de générer
setup.ml
, il est également possible de générer un Makefile avec toutes les options décrites ci-dessus.
Structure
Habituellement mon projet qui est construit à l'OASIS dispose d'au moins trois répertoires: src
, _build
, scripts
et tests
.
- Dans l'ancien répertoire de tous les fichiers sources sont stockées dans un répertoire: source: (.ml) et de l'interface.mli) les fichiers sont stockés ensemble. Peut-être si le projet est trop grand, il vaut la peine d'introduire plus de sous-répertoires.
- L'
_build
répertoire est sous l'influence de l'OASIS de construction du système. Il stocke à la fois source et objet de fichiers, et j'aime créer des fichiers ne sont pas interféré avec les fichiers source, donc je peux facilement le supprimer dans le cas où quelque chose va mal.
- Je stocker plusieurs scripts shell dans l'
scripts
répertoire. Certains d'entre eux sont pour l'exécution de tests et de l'interface de génération de fichier.
- Toutes les entrées et les fichiers de sortie pour les tests je les stocker dans un répertoire séparé.
Interfaces/Documentation
L'utilisation de fichiers d'interface (.mli) a à la fois des avantages et des inconvénients pour moi. Il aide vraiment à trouver des erreurs de type, mais si vous les avez, vous avez à les modifier aussi bien lorsque vous apportez des modifications ou des améliorations dans votre code. Oublier parfois cela provoque méchant erreurs.
Mais la principale raison pourquoi j'aime les fichiers d'interface est de la documentation. J'utilise ocamldoc peut être de générer des OASIS (prend en charge cette fonctionnalité avec -doc
drapeau) des pages html avec des documents automatiquement. C'est à mon avis suffisant pour écrire des commentaires décrivant chaque fonction dans l'interface et de ne pas insérer des commentaires dans le milieu de code. En OCaml, les fonctions sont généralement courtes et concises, et si il y a une nécessité d'insérer l'ajout de commentaires là, peut-être que c'est mieux de diviser la fonction.
Également être conscients de l' -i
drapeau pour ocamlc
. Le compilateur peut générer automatiquement un fichier d'interface pour un module.
Tests
Je n'ai pas trouver une solution raisonnable pour le soutien des tests (je voudrais avoir quelques - ocamltest
application), c'est pourquoi je suis en utilisant mes propres scripts pour l'exécution et la vérification des cas d'utilisation. Heureusement, OASIS prend en charge l'exécution des commandes personnalisées lors de l' setup.ml
est exécuté avec -test
drapeau.
Je n'utilise pas d'OASIS pour un temps long et si quelqu'un sait toutes les autres caractéristiques intéressantes, j'aimerais aussi savoir à leur sujet.
Aussi, il vous ne sont pas conscients de l' OPAM, il est certainement intéressant de regarder. Sans elle, l'installation et la gestion de nouveaux paquets est un cauchemar.