I’m in the process of updating the rpm Provides/Requires generator for OCaml files to handle also *.cmx*
files.
I wonder why cma/cmi/cmo have just Interfaces, while cmx/cmxa/cmxs have both Interfaces and Implementations according to the ocamlobjinfo some.cmxa
output. What does Implementation
mean in this context?
I have not seen this (very old) discussion. Neither do I see how this thread would answer my question.
The bytecode compiler doesn’t do cross-module optimisations, so all it needs to know about other modules is their type (so .cmi
files).
The native compiler (both the default one and the flambda-enabled version) actually reads and exports information about implementations, and so the produced .cmx
file records which other .cmx
files it looked into during compilation. This allows checking at link time that every module is linked with the versions it was compiled against.