caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] [ANN] Beta-release of Merlin
@ 2013-02-20 23:10 Frédéric Bour
  2013-02-21  9:20 ` Gabriel Scherer
  0 siblings, 1 reply; 3+ messages in thread
From: Frédéric Bour @ 2013-02-20 23:10 UTC (permalink / raw)
  To: caml-list

We are very pleased to announce the beta release of Merlin. Merlin is a tool
which providessmart completion, among other things, in your favorite editor.
As of today, Vim and Emacs are supported.

See it at work:
https://github.com/def-lkb/merlin#screenshots

Its features include:
- completion of values, constructorsand modules based on local scope
- retrieving type of identifiers and/or expressions under cursor
- integration of findlib to manage buildpath
- highlighting of syntax errors, type errors and warnings inside the editor
- to a certain amount, resilience to syntax and type errors

It works only with Ocaml 4.00.1 (may works with newer versions).

If you happen to have an opam installation with the right version
(opam switch 4.00.1), you can try it right away with:

$ opam remote add kiwi http://kiwi.iuwt.fr/~asmanur/opam/.git 
<http://kiwi.iuwt.fr/%7Easmanur/opam/.git>
$ opam install merlin

Then to get started and set-up your editor:
- https://github.com/def-lkb/merlin#setting-up-vim
- https://github.com/def-lkb/merlin#emacs-interface

Check it out at: https://github.com/def-lkb/merlin

The current version still needs to be tested under various systems and
configurations, your feedback iswelcome.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] [ANN] Beta-release of Merlin
  2013-02-20 23:10 [Caml-list] [ANN] Beta-release of Merlin Frédéric Bour
@ 2013-02-21  9:20 ` Gabriel Scherer
  2013-02-21  9:31   ` Simon Cruanes
  0 siblings, 1 reply; 3+ messages in thread
From: Gabriel Scherer @ 2013-02-21  9:20 UTC (permalink / raw)
  To: caml users; +Cc: Frédéric Bour

[-- Attachment #1: Type: text/plain, Size: 5526 bytes --]

I looked into Merlin in the last few days, so here is a bit more
information if you, like me, are interested in design information about
projects before deciding whether to use (and potentially contribute to)
them.

Interface-wise: using Merlin (at least on emacs) feels a lot like
ProofGeneral (or CoqIde): there is a "checked zone" from the start of the
buffer to the first error, and reliable type information is available in
all this checked zone. The interface is rather simple and easy to use.

(If you're considering porting Merlin to another editor: merlin is an OCaml
program that inputs and outputs JSON queries, so it seems rather easy to
port to any editor having plugin support in any language with JSON support.
Given its youth, you should however expect Merlin's protocol to evolve over
the next development period, so editor plugin developers would need to
follow Merlin's internal changes for now.)

The major difference between Merlin and -annot-based tools such as
Ocamlspotter or Typerex2 is that Merlin does the work of parsing OCaml
sentences into chunks and sending them incrementally to the type-checker,
instead of sending the whole buffer at once and using the output. This
means that Merlin is much more robust with respect to files that have
errors and cannot be compiled as a whole: you'll get reliable type
information from the start of the file upto the first error (and some
resilience heuristic to have more after). The OCaml type-checker is in fact
able to provide some typing information even for incorrect programs, so
-annot-based tools do support some of those features, but in a less
reliable and more coarse-grained way.
The design trade-off is that Merlin has to copy/adapt more logic from the
compiler: it embeds an OCaml parser derived from the compiler's one (you
won't get parsing bugs as with regexpy elisp modes), and currently also
copies and slightly modifies the type-checker (I hope this can be changed
in the future, possibly by adding some flexibility to the type-checker
regarding eg. production of warnings). This means more maintenance work to
port Merlin to future OCaml versions. On the other hand, it's probably not
reasonable to expect the compiler type-checker to be re-engineered for
optimal incrementality support, so having an external implementation of
incrementality that piggybacks on the batch typer interface makes sense.

My personal intuition is that Merlin's design is a good long-term choice
for an editor service (as opposed to code-analysis services). You want
tools such as ocamldoc, dead code analysis, or everything concerned with
analysis of an existing correct codebase to be based on -bin-annot and work
on the typedtrees directly (without local support for parsing and typing
programs). You want tools designed to work on incomplete programs in the
process of being created to embed incrementality logic (insofar as it
hasn't been pushed into the compiler), understanding partial files and
local modifications to cleverly control the parsing&typing process with
reactivity in mind. The One True Editor Mode will merge both aspects,
working on .cmt of already-compiled dependencies on one side, and
partial/incremental information in edition buffers on the other. Merlin can
evolve in this way, as its type-directed analyses (those performed in the
"checked zone") work directly on the typedtree, so could work with .cmt
files.

On Thu, Feb 21, 2013 at 12:10 AM, Frédéric Bour
<frederic.bour@lakaban.net>wrote:

> We are very pleased to announce the beta release of Merlin. Merlin is a
> tool
> which provides smart completion, among other things, in your favorite
> editor.
> As of today, Vim and Emacs are supported.
>
> See it at work:
> https://github.com/def-lkb/**merlin#screenshots<https://github.com/def-lkb/merlin#screenshots>
>
> Its features include:
> - completion of values, constructorsand modules based on local scope
> - retrieving type of identifiers and/or expressions under cursor
> - integration of findlib to manage buildpath
> - highlighting of syntax errors, type errors and warnings inside the editor
> - to a certain amount, resilience to syntax and type errors
>
> It works only with Ocaml 4.00.1 (may works with newer versions).
>
> If you happen to have an opam installation with the right version
> (opam switch 4.00.1), you can try it right away with:
>
> $ opam remote add kiwi http://kiwi.iuwt.fr/~asmanur/**opam/.git<http://kiwi.iuwt.fr/~asmanur/opam/.git><
> http://kiwi.iuwt.fr/%**7Easmanur/opam/.git<http://kiwi.iuwt.fr/%7Easmanur/opam/.git>
> >
> $ opam install merlin
>
> Then to get started and set-up your editor:
> - https://github.com/def-lkb/**merlin#setting-up-vim<https://github.com/def-lkb/merlin#setting-up-vim>
> - https://github.com/def-lkb/**merlin#emacs-interface<https://github.com/def-lkb/merlin#emacs-interface>
>
> Check it out at: https://github.com/def-lkb/**merlin<https://github.com/def-lkb/merlin>
>
> The current version still needs to be tested under various systems and
> configurations, your feedback iswelcome.
>
>
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/**arc/caml-list<https://sympa.inria.fr/sympa/arc/caml-list>
> Beginner's list: http://groups.yahoo.com/group/**ocaml_beginners<http://groups.yahoo.com/group/ocaml_beginners>
> Bug reports: http://caml.inria.fr/bin/caml-**bugs<http://caml.inria.fr/bin/caml-bugs>
>

[-- Attachment #2: Type: text/html, Size: 6284 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] [ANN] Beta-release of Merlin
  2013-02-21  9:20 ` Gabriel Scherer
@ 2013-02-21  9:31   ` Simon Cruanes
  0 siblings, 0 replies; 3+ messages in thread
From: Simon Cruanes @ 2013-02-21  9:31 UTC (permalink / raw)
  To: caml-list

I started using Merlin a few days ago, on vim, and I must say it's a
pleasure to have direct access to completion/type checking/type
querying. Per-project configuration is really simple (just define a list
of source directories, build directories, and ocamlfind-able packages);
then completion and type-checking work seamlessly even with external
code. Maybe that's no big deal for emacs users, but on vim I think this
is quite a big improvement.

It's already very useful for me, so I'd like to thank the authors :)

Cheers,

Simon

On 02/21/2013 10:20 AM, Gabriel Scherer wrote:
> I looked into Merlin in the last few days, so here is a bit more
> information if you, like me, are interested in design information about
> projects before deciding whether to use (and potentially contribute to)
> them.
> 
> Interface-wise: using Merlin (at least on emacs) feels a lot like
> ProofGeneral (or CoqIde): there is a "checked zone" from the start of
> the buffer to the first error, and reliable type information is
> available in all this checked zone. The interface is rather simple and
> easy to use.
> 
> (If you're considering porting Merlin to another editor: merlin is an
> OCaml program that inputs and outputs JSON queries, so it seems rather
> easy to port to any editor having plugin support in any language with
> JSON support. Given its youth, you should however expect Merlin's
> protocol to evolve over the next development period, so editor plugin
> developers would need to follow Merlin's internal changes for now.)
> 
> The major difference between Merlin and -annot-based tools such as
> Ocamlspotter or Typerex2 is that Merlin does the work of parsing OCaml
> sentences into chunks and sending them incrementally to the
> type-checker, instead of sending the whole buffer at once and using the
> output. This means that Merlin is much more robust with respect to files
> that have errors and cannot be compiled as a whole: you'll get reliable
> type information from the start of the file upto the first error (and
> some resilience heuristic to have more after). The OCaml type-checker is
> in fact able to provide some typing information even for incorrect
> programs, so -annot-based tools do support some of those features, but
> in a less reliable and more coarse-grained way.
> The design trade-off is that Merlin has to copy/adapt more logic from
> the compiler: it embeds an OCaml parser derived from the compiler's one
> (you won't get parsing bugs as with regexpy elisp modes), and currently
> also copies and slightly modifies the type-checker (I hope this can be
> changed in the future, possibly by adding some flexibility to the
> type-checker regarding eg. production of warnings). This means more
> maintenance work to port Merlin to future OCaml versions. On the other
> hand, it's probably not reasonable to expect the compiler type-checker
> to be re-engineered for optimal incrementality support, so having an
> external implementation of incrementality that piggybacks on the batch
> typer interface makes sense.
> 
> My personal intuition is that Merlin's design is a good long-term choice
> for an editor service (as opposed to code-analysis services). You want
> tools such as ocamldoc, dead code analysis, or everything concerned with
> analysis of an existing correct codebase to be based on -bin-annot and
> work on the typedtrees directly (without local support for parsing and
> typing programs). You want tools designed to work on incomplete programs
> in the process of being created to embed incrementality logic (insofar
> as it hasn't been pushed into the compiler), understanding partial files
> and local modifications to cleverly control the parsing&typing process
> with reactivity in mind. The One True Editor Mode will merge both
> aspects, working on .cmt of already-compiled dependencies on one side,
> and partial/incremental information in edition buffers on the other.
> Merlin can evolve in this way, as its type-directed analyses (those
> performed in the "checked zone") work directly on the typedtree, so
> could work with .cmt files.
> 
> On Thu, Feb 21, 2013 at 12:10 AM, Frédéric Bour
> <frederic.bour@lakaban.net <mailto:frederic.bour@lakaban.net>> wrote:
> 
>     We are very pleased to announce the beta release of Merlin. Merlin
>     is a tool
>     which provides smart completion, among other things, in your
>     favorite editor.
>     As of today, Vim and Emacs are supported.
> 
>     See it at work:
>     https://github.com/def-lkb/__merlin#screenshots
>     <https://github.com/def-lkb/merlin#screenshots>
> 
>     Its features include:
>     - completion of values, constructorsand modules based on local scope
>     - retrieving type of identifiers and/or expressions under cursor
>     - integration of findlib to manage buildpath
>     - highlighting of syntax errors, type errors and warnings inside the
>     editor
>     - to a certain amount, resilience to syntax and type errors
> 
>     It works only with Ocaml 4.00.1 (may works with newer versions).
> 
>     If you happen to have an opam installation with the right version
>     (opam switch 4.00.1), you can try it right away with:
> 
>     $ opam remote add kiwi http://kiwi.iuwt.fr/~asmanur/__opam/.git
>     <http://kiwi.iuwt.fr/~asmanur/opam/.git>
>     <http://kiwi.iuwt.fr/%__7Easmanur/opam/.git
>     <http://kiwi.iuwt.fr/%7Easmanur/opam/.git>>
>     $ opam install merlin
> 
>     Then to get started and set-up your editor:
>     - https://github.com/def-lkb/__merlin#setting-up-vim
>     <https://github.com/def-lkb/merlin#setting-up-vim>
>     - https://github.com/def-lkb/__merlin#emacs-interface
>     <https://github.com/def-lkb/merlin#emacs-interface>
> 
>     Check it out at: https://github.com/def-lkb/__merlin
>     <https://github.com/def-lkb/merlin>
> 
>     The current version still needs to be tested under various systems and
>     configurations, your feedback iswelcome.
> 
> 
>     -- 
>     Caml-list mailing list.  Subscription management and archives:
>     https://sympa.inria.fr/sympa/__arc/caml-list
>     <https://sympa.inria.fr/sympa/arc/caml-list>
>     Beginner's list: http://groups.yahoo.com/group/__ocaml_beginners
>     <http://groups.yahoo.com/group/ocaml_beginners>
>     Bug reports: http://caml.inria.fr/bin/caml-__bugs
>     <http://caml.inria.fr/bin/caml-bugs>
> 
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-02-21  9:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-20 23:10 [Caml-list] [ANN] Beta-release of Merlin Frédéric Bour
2013-02-21  9:20 ` Gabriel Scherer
2013-02-21  9:31   ` Simon Cruanes

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).