OCaml Changelog

RSS

Official stable release announcements and updates from the OCaml compiler, OCaml infrastructure and the OCaml Platform Tools.

See full changelog
  • new vim binding
  • support for ppx lwt keywords
  • fixed indentation at BOF and EOF in some cases
  • back-alignment of '&&' and '||' disabled
  • tweaks to functor, struct and module indentation
  • support for ppx attributes
  • lots of fixes and tweaks
See full changelog
  • backend:

    • locate: merlin refused to locate things when it had no context (happens when the buffer didn't parse for example) claiming it was at the "definition point". Fixed.
    • locate: use the cmt path when no ml file was found in the source path (this might not be such a good idea, the cases when this work are the ones where the user configuration is wrong...)
    • destruct: qualify introduced constructors
    • destruct: eliminate "impossible" GADT branches
    • parser: handle '%' as an operator for 4.00 and 4.01 ( #345 )
  • fake:

    • add typerep support
    • never generate '_ type variables.
  • vim:

    • show duplicated outlines in CtrlP
    • sort outlines by name length in CtrlP
    • when split method is set to 'tab' always open a new tab.

This release also contains contributions from: Geoff Gole, Rudi Grinberg, Markus Mottl, Roman Vorobets and Arthur Wendling.

See full changelog
  • backend:

    • add PPX support
    • make use of context before locating (#308, #316, #318).
    • generate match patterns for arbitrary expressions and missing patterns for incomplete matchings (#123).
    • reintroduce type expansion (asking the times of the same expression several times will resolve type aliases).
    • "smart" (a.k.a "do what I mean") completion: L.m will expand to List.map ; List.m... ; ListLabels.map ; ... if L doesn't exist.
    • simplify incremental parser and typer interfaces
    • locate: better handling of packed modules (supposedly)
    • more precise recovery on patterns (before the recovery was done at the expression level, so the whole match was discarded, now only the pattern is)
  • emacs:

    • don't use fringe in emacs23 (broken)
    • remove obsolete aliases: merlin-occurences => merlin-occurrences merlin-to-end => merlin-error-check
    • disable merlin-mode on type buffer
    • require caml-types (needed for highlighting) (#331).
  • misc:

    • update README (#301).
  • vim:

    • add a type history buffer (#313, #322) -- only available for vim > 7.3.
    • highlight types when displaying them in the command line -- only for vim > 7.3
    • add tab completion for the argument of the :Locate command
    • add support for text objects based on type enclosing
    • introduce an interactive version of :Rename
    • locate results can now be shown in a new or existing tab (#335)
    • use fileencoding where necessary (#332)
    • ctrlp bindings for outline and locate

Utop 1.17

See full changelog
  • re-export Config.load_path as UTop.load_path (Peter Zotov)
  • enable utop-command to be buffer-local (Mads Hartmann Jensen)
  • fix 4.01 compatibility (Peter Zotov)

Utop 1.16

See full changelog
  • make camlp4 support optional
  • require OCaml 4.01.0 or newer
  • implement wrapper for -safe-string

We are very proud to announce the availability of OPAM 1.2.0.

Upgrade from 1.1

Simply follow the usual instructions, using your preferred method (package from your distribution, binary, source, etc.) as documented on the homepage.

NOTE: There are small changes to the internal repository format (~/.opam). It will be transparently updated on first run, but in case you might want to go back and have anything precious there, you're advised to back it up.

Usability

Lot of work has been put into providing a cleaner interface, with helpful behaviour and messages in case of errors.

The documentation pages also have been largely rewritten for consistency and clarity.

New features

This is just the top of the list:

  • A extended and versatile opam pin command. See the Simplified packaging workflow
  • More expressive queries, see for example opam source
  • New metadata fields, including source repositories, bug-trackers, and finer control of package behaviour
  • An opam lint command to check the quality of packages

For more detail, see the announcement for the beta, the full changelog, and the bug-tracker.

Package format

The package format has been extended to the benefit of both packagers and users. The repository already accepts packages in the 1.2 format, and this won't affect 1.1 users as a rewrite is done on the server for compatibility with 1.1.

If you are hosting a repository, you may be interested in these administration scripts to quickly take advantage of the new features or retain compatibility.

After a few months of development, we are pleased to announce the stable release of Merlin 2.0. Supported OCaml versions range from 4.00.1 to 4.02.1.

Overview

Merlin is a tool focused on helping you code in OCaml by providing features such as:

  • automatic completion of identifiers, using scope and type information,
  • interactively typing definitions and expressions during edition,
  • jumping to the definition of any identifier,
  • quickly reporting errors in the editor.

We provide integration into Vim and Emacs. An external plugin is also available for Sublime Text.

What's new

This release provides great improvements in robustness and quality of analysis. Files that changed on disk are now automatically reloaded. The parsing process is finer grained to provide more accurate recovery and error messages. Integration with Jane Street Core and js_of_ocaml has also improved.

Vim & Emacs are still the main targeted editors. Thanks to Luc Rocher, preliminary support for Sublime Text is also available, see Sublime-text-merlin. Help is welcome to improve and extend supported editing environments.

Windows support also received some fixes. Merlin is now distributed in WODI. Integration in OCaml-on-windows is planned.

Installation

This new version of Merlin is already available with opam using opam install merlin, and can also be built from the sources which are available at the-lambda-church/merlin.

See full changelog

This is a major release which we worked on for several months, rewriting many parts of the codebase. An exhaustive list of changes is therefore impossible to give, but here are some key points (from an user perspective):

  • support for OCaml 4.02.{0,1}
  • more precise recovery in presence of syntax errors
  • more user-friendly messages for syntax errors
  • locate now works on MLI files
  • automatic reloading of .merlin files (when they are update or created), it is no longer necessary to restart Merlin
  • introduced a small refactoring command: rename, who renames all occurrences of an identifier.

This release also contains contributions from: Yotam Barnoy, Jacques-Pascal Deplaix, Geoff Gole, Rudi Grinberg, Steve Purcell and Jan Rehders.

We also thank Gabriel Scherer and Jane Street for their continued support.

Minor update to installation procedure

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

See full changelog

This release also marks the apparition of a proper opam install script.

  • backend:

    • fixes on locate
    • print manifests even when -short-paths is set
    • add an "occurrences" command to list every occurrence of an identifier ( #156 )
    • new "version" command ( #180 )
    • add CPU time to log files ( #192 )
    • better error reporting from locate ( #190 )
  • documentation:

    • update vim doc file ( #204 )
    • typo correction in the README by Philippe Wang ( #195 )
  • emacs:

    • fix most byte compilation warnings, by Geoff Gole ( #209 )
    • numerous fixes
  • vim:

    • add error list independent from syntastic
    • fix completion for vim<=703 (#223)

Most package managers support some pin functionality to ensure that a given package remains at a particular version without being upgraded. The stable OPAM 1.1 already supported this by allowing any existing package to be pinned to a target, which could be a specific released version, a local filesystem path, or a remote version-controlled repository.

However, the OPAM 1.1 pinning workflow only lets you pin packages that already exist in your OPAM repositories. To declare a new package, you had to go through creating a local repository, registering it in OPAM, and adding your package definition there. That workflow, while reasonably clear, required the user to know about the repository format and the configuration of an internal repository in OPAM before actually getting to writing a package. Besides, you were on your own for writing the package definition, and the edit-test loop wasn't as friendly as it could have been.

A natural, simpler workflow emerged from allowing users to pin new package names that don't yet exist in an OPAM repository:

  1. choose a name for your new package
  2. opam pin add in the development source tree
  3. the package is created on-the-fly and registered locally.

To make it even easier, OPAM can now interactively help you write the package definition, and you can test your updates with a single command. This blog post explains this new OPAM 1.2 functionality in more detail; you may also want to check out the new Packaging tutorial relying on this workflow.

From source to package

For illustration purposes in this post I'll use a tiny tool that I wrote some time ago and never released: ocp-reloc. It's a simple binary that fixes up the headers of OCaml bytecode files to make them relocatable, which I'd like to release into the public OPAM repository.

"opam pin add"

The command opam pin add <name> <target> pins package <name> to <target>. We're interested in pinning the ocp-reloc package name to the project's source directory.

cd ocp-reloc
opam pin add ocp-reloc .

If ocp-reloc were an existing package, the metadata would be fetched from the package description in the OPAM repositories. Since the package doesn't yet exist, OPAM 1.2 will instead prompt for on-the-fly creation:

Package ocp-reloc does not exist, create as a NEW package ? [Y/n] y
ocp-reloc is now path-pinned to ~/src/ocp-reloc

NOTE: if you are using beta4, you may get a version-control-pin instead, because we added auto-detection of version-controlled repos. This turned out to be confusing (issue #1582), because your changes wouldn't be reflected until you commit, so this has been reverted in favor of a warning. Add the --kind path option to make sure that you get a path-pin.

OPAM Package Template

Now your package still needs some kind of definition for OPAM to acknowledge it; that's where templates kick in, the above triggering an editor with a pre-filled opam file that you just have to complete. This not only saves time in looking up the documentation, it also helps getting consistent package definitions, reduces errors, and promotes filling in optional but recommended fields (homepage, etc.).

opam-version: "1.2"
name: "ocp-reloc"
version: "0.1"
maintainer: "Louis Gesbert <louis.gesbert@ocamlpro.com>"
authors: "Louis Gesbert <louis.gesbert@ocamlpro.com>"
homepage: ""
bug-reports: ""
license: ""
build: [
  ["./configure" "--prefix=%{prefix}%"]
  [make]
]
install: [make "install"]
remove: ["ocamlfind" "remove" "ocp-reloc"]
depends: "ocamlfind" {build}

After adding some details (most importantly the dependencies and build instructions), I can just save and exit. Much like other system tools such as visudo, it checks for syntax errors immediately:

[ERROR] File "/home/lg/.opam/4.01.0/overlay/ocp-reloc/opam", line 13, character 35-36: '.' is not a valid token.
Errors in /home/lg/.opam/4.01.0/overlay/ocp-reloc/opam, retry editing ? [Y/n]

Installation

You probably want to try your brand new package right away, so OPAM's default action is to try and install it (unless you specified -n):

ocp-reloc needs to be installed.
The following actions will be performed:
 - install   cmdliner.0.9.5                        [required by ocp-reloc]
 - install   ocp-reloc.0.1*
=== 1 to install ===
Do you want to continue ? [Y/n]

I usually don't get it working the first time around, but opam pin edit ocp-reloc and opam install ocp-reloc -v can be used to edit and retry until it does.

Package Updates

How do you keep working on your project as you edit the source code, now that you are installing through OPAM? This is as simple as:

opam upgrade ocp-reloc

This will pick up changes from your source repository and reinstall any packages that are dependent on ocp-reloc as well, if any.

So far, we've been dealing with the metadata locally used by your OPAM installation, but you'll probably want to share this among developers of your project even if you're not releasing anything yet. OPAM takes care of this by prompting you to save the opam file back to your source tree, where you can commit it directly into your code repository.

cd ocp-reloc
git add opam
git commit -m 'Add OPAM metadata'
git push

Publishing your New Package

The above information is sufficient to use OPAM locally to integrate new code into an OPAM installation. Let's look at how other developers can share this metadata.

Picking up your development package

If another developer wants to pick up ocp-reloc, they can directly use your existing metadata by cloning a copy of your repository and issuing their own pin.

git clone git://github.com/OCamlPro/ocp-reloc.git
opam pin add ocp-reloc/

Even specifying the package name is optional since this is documented in ocp-reloc/opam. They can start hacking, and if needed use opam pin edit to amend the opam file too. No need for a repository, no need to share anything more than a versioned opam file within your project.

Cloning already existing packages

We have been focusing on an unreleased package, but the same functionality is also of great help in handling existing packages, whether you need to quickly hack into them or are just curious. Let's consider how to modify the omd Markdown library.

opam source omd --pin
cd omd.0.9.7
...patch...
opam upgrade omd

The new opam source command will clone the source code of the library you specify, and the --pin option will also pin it locally to ensure it is used in preference to all other versions. This will also take care of recompiling any installed packages that are dependent on omd using your patched version so that you notice any issues right away.

There's a new OPAM field available in 1.2 called dev-repo. If you specify this in your metadata, you can directly pin to the upstream repository via opam source --dev-repo --pin.

If the upstream repository for the package contains an opam file, that file will be picked up in preference to the one from the OPAM repository as soon as you pin the package. The idea is to have:

  • a development opam file that is versioned along with your source code (and thus accurately tracks the latest dependencies for your package).
  • a release opam file that is published on the OPAM repository and can be updated independently without making a new release of the source code.

How to get from the former to the latter will be the subject of another post! In the meantime, all users of the beta are welcome to share their experience and thoughts on the new workflow on the bug tracker.

Utop 1.12

See full changelog
  • supports -require for scripts
  • support for React 1.0.0
  • make utop.el compatible with melpa: http://melpa.milkbox.net
See full changelog
  • backend:

    • small memory leak fix
    • major improvements and bugfixes for locate (i.e. "jump to definition")
  • emacs:

    • fixed bug preventing merlin restart ( #167 )
    • removed keybindings reserved to users ( #170 ) the full list is:
      • C-c l previously bound to merlin-use
      • C-c r previously bound to merlin-restart-process
      • C-c t previously bound to merlin-type-expr
    • removed keybindings on C-<up> and C-<down> as these already have a meaning in emacs ( #129 ) They were bound to merlin-type-enclosing-go-up and merlin-type-enclosing-go-down respectively.
    • the emacs mode is now compiled (contribution from Jacques-Pascal Deplaix #158 , with a follow up from Rudy Grinberg #165 )
    • improved efficiency of completion at point
  • extensions:

    • added support for variantslib ( #132 )
    • updated fieldslib support ( #169 , #185 )
    • fix pa_lwt translation ( #182 )
    • added support for pa_enumerate ( #187 )
  • vim:

    • the split method for locate can now be configured

Utop 1.11

See full changelog
  • update the async hook following the renaming of Async_core to Async_kernel
  • fix tab completion not working on some emacs
  • complete #load_rec the same way as #load

We are proud to announce that OPAM 1.1.1 has just been released.

This minor release features mostly stability and UI/doc improvements over OPAM 1.1.0, but also focuses on improving the API and tools to be a better base for the platform (functions for opam-doc, interface with tools like opamfu and opam-installer). Lots of bigger changes are in the works, and will be merged progressively after this release.

Installing

Installation instructions are available on the wiki.

Note that some packages may take a few days until they get out of the pipeline. If you're eager to get 1.1.1, either use our binary installer or compile from source.

The 'official' package repository is now hosted at opam.ocaml.org, synchronised with the Git repository at http://github.com/ocaml/opam-repository, where you can contribute new packages descriptions. Those are under a CC0 license, a.k.a. public domain, to ensure they will always belong to the community.

Thanks to all of you who have helped build this repository and made OPAM such a success.

See full changelog

From the changelog:

  • Fix opam-admin make <packages> -r (#990)
  • Explicitly prettyprint list of lists, to fix opam-admin depexts (#997)
  • Tell the user which fields is invalid in a configuration file (#1016)
  • Add OpamSolver.empty_universe for flexible universe instantiation (#1033)
  • Add OpamFormula.eval_relop and OpamFormula.check_relop (#1042)
  • Change OpamCompiler.compare to match Pervasives.compare (#1042)
  • Add OpamCompiler.eval_relop (#1042)
  • Add OpamPackage.Name.compare (#1046)
  • Add types version_constraint and version_formula to OpamFormula (#1046)
  • Clearer command aliases. Made info an alias for show and added the alias uninstall (#944)
  • Fixed opam init --root=<relative path> (#1047)
  • Display OS constraints in opam info (#1052)
  • Add a new 'opam-installer' script to make .install files usable outside of opam (#1026)
  • Add a --resolve option to opam-admin make that builds just the archives you need for a specific installation (#1031)
  • Fixed handling of spaces in filenames in internal files (#1014)
  • Replace calls to which by a more portable call (#1061)
  • Fixed generation of the init scripts in some cases (#1011)
  • Better reports on package patch errors (#987, #988)
  • More accurate warnings for unknown package dependencies (#1079)
  • Added opam config report to help with bug reports (#1034)
  • Do not reinstall dev packages with opam upgrade <pkg> (#1001)
  • Be more careful with opam init to a non-empty root directory (#974)
  • Cleanup build-dir after successful compiler installation to save on space (#1006)
  • Improved OSX compatibility in the external solver tools (#1074)
  • Fixed messages printed on update that were plain wrong (#1030)
  • Improved detection of meaningful changes from upstream packages to trigger recompilation
See full changelog
  • OCaml 4.01.0 warnings fix
  • fixed indent of lwt try/finally
  • sort Jane Street tests by priority
  • added support for BENCH syntax
  • added support for the new {xx| |xx} quotation syntax
  • emacs mode: cleaner loading
  • emacs mode: fixed the 'syntax' option
  • emacs mode: workaround an auto-complete.el display bug
  • emacs and vim modes: install in editor-specific directories
  • refactored build system. Install through opam-installer, register libs as ocamlfind sub-packages
See full changelog
  • backend:

    • better handling of paths (both sources and build)
    • split build path into cmi and cmt path. New directives "CMI" and "CMT" are now available in .merlin files ("B" still works as previously)
    • doesn't get confused anymore when the user switch between buffers (the state is cleaned)
  • emacs:

    • adds ability to enable/disable extensions manually
    • adds a command to clear all the errors from a buffer
    • displaying of errors can now be disabled
  • extensions

    • updated bin_prot for version >= 109.45.00
    • bugfix for [with compare] in presence of parametrized types
    • added support for "here" (when activated adds [val here : Lexing.position])
    • added support for [assert_lwt]
    • fixed typing of [while_lwt]
  • vim:

    • vim plugin can be installed into a custom directory and has its own makefile target (contribution from Vsevolod Velichko)
    • added "ClearEnclosing" command to remove merlin's overlay after a call to TypeOf.

Utop 1.10

See full changelog
  • add the -require command line argument to specify packages on the command line

Utop 1.9

See full changelog
  • automatically load all files in $OCAML_TOPLEVEL_PATH/autoload at startup. Can be disabled with autoload: false in ~/.utoprc or -no-autoload.
  • fix #38: handle errors from custom camlp4 ast filters
  • fix #7: avoid a stack overflow in UTop_lexer
See full changelog
  • license change: lessening the GPL to make ocp-indent easier to use as a library
  • removed indent by default after most common operators (when align_ops is set)
  • removed extra-indent in some pattern-matching cases
  • fixed a few bugs related to records, lazy as pattern, "module with"
  • added support for the cstruct syntax extension
  • fixed Makefile to properly install all cmi files, working around an ocp-build bug

Utop 1.8

See full changelog
  • handle new syntax errors
  • extend #typeof to values and modules. Thanks to Thomas Refis for this feature

Utop 1.6

See full changelog
  • hide topfind messages by default
  • more predefined prompts available via #utop_prompt_XXX
  • fix a bug in #require when passing multiple packages
  • display errors in ~/.lambda-term-inputrc nicely
  • doc update
  • fix an issue when using first-class modules

Utop 1.5

See full changelog
  • when evaluating a region/buffer in emacs, evaluate all phrases instead of just the first one. Thanks to Matthias Andreas Benkard for this feature
  • change the default prompt from # to $ to match the standard toplevel
  • add the option UTop.show_box to allow one to hide the completion bar
  • enhance the lwt/async hooks for automatically waiting on a thread/deferred. Hooks were not triggered when the type of the expression was a type alias

Utop 1.4.0

See full changelog
  • hide identifiers starting with _. This can be disabled with UTop.set_hide_reserved false.
  • automatically load camlp4 parsing (with original syntax) when trying to load a syntax extension
  • fix a small bug when using camlp4, causing an exception to be raised when pressing Enter in the middle of a comment

Utop 1.3.0

See full changelog
  • allow to automatically wait for ascync deferred values
  • added the -short-paths options for OCaml >= 4.01.0 (and make it the default)

Utop 1.2.1

See full changelog
  • fix: do not expunge Toploop
  • install a non-expunged version of utop: utop-full
See full changelog
  • Large API rewrite, offering much more flexibility and functionality
  • Still some bug fixes (comments at end, nested ocamldoc tags, etc.)
  • Man-page fixes (thanks to Kaustuv Chaudhuri)
  • Temporarily disabled the non-functional state-marshalling function
  • Emacs mode: auto-disabling indent-tabs-mode by default, it's not compatible anyways.
See full changelog
  • Fixed critical bug with the parsing of the --syntax option
  • a few indent fixes (functor sigs, comments in expressions)
See full changelog
  • Fixed bugs with GADTs, comments at end of modules
  • Fixed compilation with OCaml trunk (warnings as errors)
  • New vim script, contributed by Jonathan Derque
  • New option "strict_else" to allow unindenting after else
See full changelog
  • Lots of fixes
  • Switched most operators and constructs with parentheses to column aligned by default (can be disabled with option align_ops)
  • Better handling of records
  • Some code cleanup (record fields with meaningful names)
  • Documentation and manpage (now relying on cmdliner)
  • Added an option (max_indent) to limit over-indent in the most annoying cases
  • Syntax extensions can now be enabled from the configuration files
See full changelog
  • Small fixes, stabilised ocamldoc indentation
  • Support for configuration files, either user or project-wide
See full changelog
  • Supporting indentation of ocamldoc. In particular, code within ocamldoc blocks {[...]} should be automatically indented
  • Fixed the emacs mode not to set the mark
  • A few new configuration options (strict_with, strict_comments, align_params)
  • A few tweaks and improvements (better empty line indent, etc.)
  • Bugfixes (#43, #47)
See full changelog
  • Indentation of comments now follows ocamldoc conventions properly
  • Partial indent adapts more closely to manual indentation
  • Various small fixes (indent on empty lines, freeform comments...)

After a while staged as RC, we are proud to announce the final release of OPAM 1.1.0!

Thanks again to those who have helped testing and fixing the last few issues.

Important note

The repository format has been improved with incompatible new features; to account for this, the new repository is now hosted at [opam.ocaml.org][], and the legacy repository at [opam.ocamlpro.com][] is kept to support OPAM 1.0 installations, but is unlikely to benefit from many package updates. Migration to [opam.ocaml.org][] will be done automatically as soon as you upgrade your OPAM version.

You're still free, of course, to use any third-party repositories instead or in addition.

Installing

NOTE: When switching from 1.0, the internal state will need to be upgraded. THIS PROCESS CANNOT BE REVERTED. We have tried hard to make it fault- resistant, but failures might happen. In case you have precious data in your ~/.opam folder, it is advised to backup that folder before you upgrade to 1.1.0.

Using the binary installer:

  • download and run http://www.ocamlpro.com/pub/opam_installer.sh

Using the .deb packages from Anil's PPA (binaries are [currently syncing][1]): add-apt-repository ppa:avsm/ppa apt-get update sudo apt-get install opam

For OSX users, the homebrew package will be updated shortly.

or build it from sources at :

  • http://www.ocamlpro.com/pub/opam-full-1.1.0.tar.gz
  • https://github.com/ocaml/opam/releases/tag/1.1.0

For those who haven't been paying attention

OPAM is a source-based package manager for OCaml. It supports multiple simultaneous compiler installations, flexible package constraints, and a Git-friendly development workflow. OPAM is edited and maintained by OCamlPro, with continuous support from OCamlLabs and the community at large (including its main industrial users such as Jane-Street and Citrix).

The 'official' package repository is now hosted at [opam.ocaml.org][], synchronised with the Git repository at [http://github.com/ocaml/opam-repository][repo], where you can contribute new packages descriptions. Those are under a CC0 license, a.k.a. public domain, to ensure they will always belong to the community.

Thanks to all of you who have helped build this repository and made OPAM such a success.

See full changelog

Too many to list here, see https://raw.github.com/OCamlPro/opam/1.1.0/CHANGES

For packagers, some new fields have appeared in the OPAM description format:

  • depexts provides facilities for dealing with system (non ocaml) dependencies
  • messages, post-messages can be used to notify the user eg. of licensing information, or help her troobleshoot at package installation.
  • available supersedes ocaml-version and os constraints, and can contain more expressive formulas

Also, we have integrated the main package repository with Travis, which will help us to improve the quality of contributions (see Anil's post).

See full changelog
  • documentation:

    • updates of the emacs section of the readme by Ronan Lehy.
  • emacs:

    • bugfix for ac-mode: merlin-ac-prefix wasn't called.
    • better formatting for completion suggestions.
  • vim:

    • bugfix for the "selectPhrase" command, an overflow on 32b plateform was causing complete desynchronisation between vim and merlin.
    • better formatting for completion suggestions.
See full changelog
  • backend:

    • lazy processing of open directives makes merlin much faster
    • simplified buffer management
    • tweak signal handling to improve windows compatibility
    • track verbosity of query: repeated queries are considered more "verbose"
    • type expansion: expand type aliases for verbose query
    • add support for OUnit-like Benchmark extension
    • more tolerant type checker, to provide completion on ill-typed expressions
    • proper version reporting with git revision
    • refactored logging subsystem
    • add support "val constructs" in implementation: report errors but add definition to current environment
    • add FLG, EXT and PRJ in .merlin
    • "locate" command now works in much more situations
    • one distribution for 4.00 and 4.01, introduced common interface between both, typers now live in https://github.com/def-lkb/merlin-typers
    • new implementation of the main merlin state tracking ast & types
    • better error reporting thanks to a contribution from Ronan Lehy
  • documentation:

    • started a wiki (https://github.com/def-lkb/merlin/wiki)
    • wrote 'from-scratch' guides to ease setting-up merlin in your editor
  • emacs

    • during completion with auto-complete, you can hit C-c C-l on a candidate to jump on its definition
    • made communication with merlin asynchronous (using transfer queues) hence improving responsiveness
    • when running a merlin command, the errors present in all phrases but the current one are displayed
    • fixed buffer cleaning
    • successive call to C-c C-t do not climb the typed tree but improve merlin's verbosity. To move inside the tree use C-down and C-up (which implements phrase movement if there is no enclosing started).
    • customize data for merlin
    • refactoring and numerous bugfixes
If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.