ocaml-obuild / obuild

simple package build system for ocaml
BSD 2-Clause "Simplified" License
55 stars 20 forks source link

better than ocamldep? #162

Open UnixJunkie opened 7 years ago

UnixJunkie commented 7 years ago

Today on caml-list: [ANN] codept 0.9: an alternative dependency analyzer for ocaml projects

Dear all,

It is my pleasure to announce the release on opam of codept's first alpha version: codept is a dependency analyzer for OCaml projects and an alternative to ocamldep: https://github.com/Octachron/codept .

Compared to ocamldep, codept major features are:

− whole project analysis
− extensive warning and error messages
− uniform handling of delayed alias dependencies (aka "-no-alias-deps")
− experimental full dependencies, when dependencies up to transitive closure are not precise enough

Both ocamldep and codept compute an over-approximation of the dependency graph of OCaml projects. However, codept uses whole project analysis to reduce the number of fictitious dependencies inferred at the project scale, whereas ocamldep is, by design, limited to local file-by-file analysis.

Consequently, bugs notwithstanding, codept computes an exact dependency graph in any situation that does not involve unknown external modules or first class modules, and is still reliable in some standard use cases of first class modules.

Moreover, codept will emit warning messages any time it encounters a source of potential inaccuracies in the dependency graph, thus ensuring that computed dependencies are always exact in the absence of warning messages.

Another important point is that codept's whole project analysis feature makes it possible to handle uniformly the delayed dependency aspect of module aliases introduced by the "-no-alias-deps" option.

At last, in situation where dependencies up to transitive closure are not precise enough, codept's experimental "-expand-deps" option can track more precisely type aliases induced dependencies, making it easier to track all cmi files required to compile a given file for instance.

Basic performance measures indicate that the average time increase when compared to ocamldep.opt ranges between 10% to 50%.

Codept can be used directly as a drop-in replacement to ocamldep. However, to be fully effective codept needs to be feed information on the whole project. Consequently, some build systems require some adaptations. As a first step, codept is distributed with an ocamlbuild plugin subpackage that adapts ocamlbuild dependency computation to codept's needs. Integration with other build tools is still a work in progress.

More information is available at https://github.com/Octachron/codept .

− octachron