Version française
Home     About     Download     Resources     Contact us    
Browse thread
A propos de ocamldep
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Yann Coscoy <Yann.Coscoy@s...>
Subject: A propos de ocamldep

[English abstract :
  ocamldep do not use any real parser or typechecker, and consequently
fails on very simple examples (some are given at the end of this
message).]


  J'ai envie de râler après ocamldep. Il y de nombreux cas où ocamldep
échoue lamentablement (voir à fin du message). Cet utilitaire donne
l'impression d'avoir été écrit par quelqu'un qui ne disposait n'y d'un
parser ni d'un typechecker ocaml. Ce n'est bien entendu pas le cas,
mais cela en a tous les défauts.

  Aura-t-on un jour un ocamldep aussi fiable qu'un typechecker ?  Ce
que je réclame, c'est un générateur de dépendances qui fasse un
parsing complet et un peu de typechecking. Le compilo ocaml contient,
à mon avis, toutes les briques nécessaires pour le faire à peu de
frais.

  Je suis parfaitement conscient qu'il peu être commode d'avoir un
génerateur de dépendances qui se débrouille à peu près avec des
fichiers incorrects. Mais, cela devrait à mon avis pas l'empêcher de
fonctionner correctement avec des fichiers corrects.

    Cordialement,

             Yann Coscoy



============================================================
Premier cas, une dépendance qui manque :

======= fichier a.ml
()
=======

======= fichier b.ml
module M = A
=======

======= output ocamldep :
=======

======= dépendances correctes :
b.cmo: a.cmo 
b.cmx: a.cmx 
=======

============================================================
Deuxième cas une dépendance en trop :

======= fichier a.ml
module B = 
struct
  let i = 1
end

let j = B.i
=======

======= fichier b.ml
()
=======

======= output ocamldep :
a.cmo: b.cmo 
a.cmx: b.cmx 
=======

======= dépendances correctes :
=======

============================================================
  Il est bien sûr possible de raffiner le deuxième cas pour obtenir
des dépendances bouclées très peu appréciées par make.

======= fichier a.ml
module B = 
struct
  let i = 1
end

let j = B.i
=======

======= fichier b.ml
let k = A.j
=======

======= output ocamldep :
a.cmo: b.cmo 
a.cmx: b.cmx 
b.cmo: a.cmo 
b.cmx: a.cmx 
=======

======= dépendances correctes :
b.cmo: a.cmo 
b.cmx: a.cmx 
=======