From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 7D64A7FAEE for ; Tue, 18 Nov 2014 10:07:07 +0100 (CET) Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of gabriel.scherer@gmail.com) identity=pra; client-ip=209.85.218.45; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of gabriel.scherer@gmail.com designates 209.85.218.45 as permitted sender) identity=mailfrom; client-ip=209.85.218.45; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-oi0-f45.google.com) identity=helo; client-ip=209.85.218.45; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="postmaster@mail-oi0-f45.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AoUBABMLa1TRVdotm2dsb2JhbABbg2NZBIMCyRuHRQKBCQcWAQEBAQERAQEBAQEGCwsJFC6EAwEBBBIRHQEbHQEDDAYFCw0CAiYCAiEBAREBBQEcBhMiiAkBAxINrRU9MYs7gXODEYpLChknDWiFeAEBAQEGAQEBARgBBQ6BH4lDg10dgh4HgneBVAWFKQKRGmeFFoIUgTM9jUxIgmyCDhgphTY8MAGCSgEBAQ X-IPAS-Result: AoUBABMLa1TRVdotm2dsb2JhbABbg2NZBIMCyRuHRQKBCQcWAQEBAQERAQEBAQEGCwsJFC6EAwEBBBIRHQEbHQEDDAYFCw0CAiYCAiEBAREBBQEcBhMiiAkBAxINrRU9MYs7gXODEYpLChknDWiFeAEBAQEGAQEBARgBBQ6BH4lDg10dgh4HgneBVAWFKQKRGmeFFoIUgTM9jUxIgmyCDhgphTY8MAGCSgEBAQ X-IronPort-AV: E=Sophos;i="5.07,408,1413237600"; d="scan'208";a="89013525" Received: from mail-oi0-f45.google.com ([209.85.218.45]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/RC4-SHA; 18 Nov 2014 10:07:04 +0100 Received: by mail-oi0-f45.google.com with SMTP id a141so8144794oig.4 for ; Tue, 18 Nov 2014 01:07:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=mRL7s1A3QvsqISo/DsNQjpf8Xurtk0qmFoFazzEClbM=; b=RWAwEeBsNBba9XxYnH1/NefGqkymJjZ82tAWxsHb9Mrxr6AVnhMt2W113OccFAQePv sxxeIB7zLAcRXS5r6CSWLujShj3eYzaFPsC5kTRADUQ5xuuMV7aaBL9ESNDVMZaPoK2q RAZB6xVRePlr1Q3Aq8aMT8LCsyNtlB2ZC723DMkTFKtLN006qQPaYNQRirbcFONwQsbL 0oEmbF6BmXWVirPg+e/8OlLFtEGiFTcG2naNzImaoPBpqJZyjFaGP//8nGRo9JPZ1FB9 wGurxoBrvL+H0YA0GBzpA3mhXELfS2OGQghg+oIsYtpRmUOFmpry8QknVnD3F1iUAYb0 JLiQ== X-Received: by 10.182.135.170 with SMTP id pt10mr6454857obb.30.1416301625565; Tue, 18 Nov 2014 01:07:05 -0800 (PST) MIME-Version: 1.0 Received: by 10.76.90.197 with HTTP; Tue, 18 Nov 2014 01:06:25 -0800 (PST) In-Reply-To: References: From: Gabriel Scherer Date: Tue, 18 Nov 2014 10:06:25 +0100 Message-ID: To: Kenneth Adam Miller Cc: caml users Content-Type: text/plain; charset=UTF-8 Subject: Re: [Caml-list] Go Oracle like facility for Ocaml? (One can find a description of Go oracle's design in https://docs.google.com/document/d/1WmMHBUjQiuy15JfEnT8YBROQmEv-7K6bV-Y_K53oi5Y/view and its user manual in https://docs.google.com/document/d/1SLk36YRjjMgKqe490mSRzOPYEDe0Y_WQNRv-EiFYUyw/view#heading=h.kthq8ap0mdwi ) The ecosystem of OCaml tooling is not as refined as Go's (but contributions are welcome). There is no centralized tool provider with a common interface, but several contributors have developped separate tool to anayze different aspects of OCaml programs: - ocamlspotter: https://bitbucket.org/camlspotter/ocamlspot - ocp-index: http://typerex.ocamlpro.com/ocp-index.html - pfff: https://github.com/facebook/pfff - merlin: http://the-lambda-church.github.io/merlin/ These tool provide a relatively complete coverage of the information that can easily be retrieved from the typedtree of a program (>=4.01 versions of the OCaml compiler have the option to generate a reified typedtree for external tools): the occurences of a declared/defined name, the definition place of a name, the type of an expression, etc. As far as I'm aware, there is not much in the direction of the more advanced static analysis feature Go's oracle supports: points-to information, "who may update this mutable field", etc. I'm not familiar with Pfff's capabilities, it may be the more advanced in this regard. (There is also more experimental work going on, for example Thomas Blanc's work on static analysis of exception flow at OCamlPro: https://github.com/OCamlPro/socaml-analyzer ) I think merlin is the best-positioned tool to deal with partially-incorrect files (typical of an edition session) and incrementality. It also incorporates some query/analysis feature, but it's unclear whether those should grow inside a monolithic tool (eg. it could encompass the current feature set of ocp-index and ocamlspotter, if it does not already), or rather try to communicate with external analysis/query plugins. It also interacts with existing editors through a reasonable query-answer interface, but does not provide a direct command-line interface (anyone interested in this could work on it, it may be relatively easy to implement). There are fairly orthogonal aspects to a "answering questions about programs" toolbox, among which: 1) user-interface, interactive use, and interface with existing editors 2) support for incrementality and robustness under partially-incorrect files 3) knowledge of what the "project", or whole program, is; which dependencies are required to understand the work? (build system knowledge) 4) implementation of various program analyses and transformations Is it possible to provide them in separate programs and have them interact to form a useful whole? Or would it be easier, faster and more robust to implement them all in a monolithic program? What are the necessary interdependence between these aspects and what interface should them provide to each other? On Tue, Nov 18, 2014 at 6:00 AM, Kenneth Adam Miller wrote: > If anybody knows what Go's oracle is you'll know that its a great > accelerator for your time; it allows expressive and meaningful searches to > be done over a source repository. It's fast and dead useful. Opengrok is > much the same, but to a lesser extent (having links is nice, but not quite > as powerful as oracle, I could be wrong). > > Is there anything like this for OCaml?