caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "David Allsopp" <dra-news@metastack.com>
To: "'Jun Furuse'" <jun.furuse@gmail.com>, <caml-list@yquem.inria.fr>
Subject: RE: [Caml-list] [ANN] OCamlSpotter: OCaml compiler extension for source	browsing, version 1.0
Date: Fri, 26 Dec 2008 11:15:05 -0000	[thread overview]
Message-ID: <00a201c9674b$362aea00$a280be00$@com> (raw)
In-Reply-To: <5160b4200812250547l35a1536fuf687d9e277999bd0@mail.gmail.com>

This sounds really cool - but is it really necessary to patch OCaml 3.11.0
to achieve it? The .annot files produced by OCaml 3.11 give external
reference information already...

e.g.

[Test.ml]
open List;;

rev [];;

# ocamlc -c -annot Test.ml

[Test.annot]
"Test.ml" 3 15 15 "Test.ml" 3 15 18
type(
  'a list -> 'a list
)
ident(
  ext_ref List.rev
)
<snip>

The second entry in the .annot file shows the full module path required for
the call to rev - taking into account all open, include statements and
giving the full path in terms of packed modules and so on.

Surely all you need once armed with the .annot file is the command line
which was used to compile the module so that you can translate the module
paths into actual files .cm* files (and then look for corresponding .ml
files) - the code for tools such as cmigrep (not to mention the compiler
itself) should contain everything necessary for analysing .cm[ox], .cmi and
.cm{x,}a files to turn a given module path into the actual file reference.

Capturing the command line used to make the .annot file would seem to me to
be a better job for ocamlfind - I would have thought that you're more likely
to get Gerd to accept a patch for a simple hook interface in findlib than to
get a patch which emits additional output files accepted by the OCaml team
(however, it might be worth raising a feature request for the OCaml team to
add an entry to .annot files which records the command line used in the
.annot file itself as I can't imagine that's particularly hard or a
maintenance problem)...

Happy Boxing Day, everyone!


David


> -----Original Message-----
> From: caml-list-bounces@yquem.inria.fr [mailto:caml-list-
> bounces@yquem.inria.fr] On Behalf Of Jun Furuse
> Sent: 25 December 2008 13:47
> To: caml-list@yquem.inria.fr
> Subject: [Caml-list] [ANN] OCamlSpotter: OCaml compiler extension for
> source browsing, version 1.0
> 
> Hi, OCaml programmers,
> 
> Here is your free holiday gift, OCamlSpotter version 1.0, a small
> patch for OCaml 3.11.0.
> 
> OCamlSpotter : OCaml source browsing
> ====================================
> 
>   Camel spotter: Oh, it was extremely interesting, very, very -
>     quite... it was dull; dull, dull, dull, oh God it was dull.
>     Sitting in the Waterloo waiting room. ...
> 
>                                      from You're No Fun Anymore,
>                                     Monty Python's Flying Circus
> 
> OCaml module language is powerful. So extremely powerful that you can
> be lost yourself easily inside a huge OCaml project with tons of
> modules.
> Spotting the definition of a variable is sometimes "extremely
> interesting".
> Let's see such an "exciting" example:
> 
>   include M
>   open N
>   open O
>   let _ = f 1
> 
> Suppose you are not familiar with the function f and want to spot its
> definition. Where to find it? Just from the code you are looking at,
> it is not sure: if you are enough lucky it may be f in m.ml, n.ml or
> o.ml. Otherwise, it may be O.f in n.ml. Or probably N.O.f in
> m.ml. If you are unlucky and the project is so sophisticated, there
> could
> be complex module operations in m.ml (i.e includes, functor
> applications)
> and therefore the definition might be found somewhere completely
> unexpected.
> Module packing, module load paths and library installation without .ml
> files
> complicate the situation even worse.
> 
> You first days after joining a large OCaml project should be this kind
> of manual value definition spotting with find + grep commands. Yes,
> actually
> it is very educational: you can learn a lot about the project
> struggling
> in the source tree (only if your collegues have organized things very
> well :-P), but it is still a dull job...
> 
> To say short, OCamlSpotter is a tool which does this dull job
> automatically
> for you and permits your energy for something more "interesting" like
> Yeti
> spotting:
> 
>  - The -annot option of ocamlc and ocamlopt is extended and creates
>    <module>.spot files (<module>.spit for .mli), which record the
> location
>    information of the names defined and used in the module.
> 
>  - A small application ocamlspot provides automatic where-about
> spotting
>    of the definition of the name you are interested in.
> 
>  - ocamlspot.el provides interactive ocaml-spotting of definition
>    locations in emacs.
> 
>  - Interfaces for other editors such as vi can be built easily, if you
> want.
> 
> Donwload
> =======
> http://www.furuse.info/jun/hacks/ocamlspotter/ocamlspotter-
> 1.0.tgz?attredirects=0
> 
> Have fun, and have a good new year.
> 
> Jun FURUSE
> 
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs


  reply	other threads:[~2008-12-26 11:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-25 13:47 Jun Furuse
2008-12-26 11:15 ` David Allsopp [this message]
2008-12-26 19:34   ` [Caml-list] " Jun Furuse
2008-12-26 22:51     ` David Allsopp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='00a201c9674b$362aea00$a280be00$@com' \
    --to=dra-news@metastack.com \
    --cc=caml-list@yquem.inria.fr \
    --cc=jun.furuse@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).