[cwn] Attn: Development Editor, Latest Caml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Dec 27 10:42:04 PST 2011


Here is the latest Caml Weekly News, for the week of December 20 to 27, 

1) Barista 2.0-alpha2
2) Format OCaml Code
3) try ocaml website
4) Need help for a practical hacking book about ocaml
5) RFC: basename, dirname, PR#4549
6) Other Caml News

1) Barista 2.0-alpha2
** Xavier Clerc announced:

This post announces the 2.0-alpha2 release of the Barista project, whose 
is to provide
a library for Java class file construction and a Java [dis]assembler,
released under the LGPLv3.

Home page: <http://barista.x9c.fr>
Forge page: <https://forge.ocamlcore.org/projects/barista/>

Main changes since 2.0-alpha:
   - move from Java 1.6 to Java 1.7 as default version
   - syntax extension for 'exception pattern' (BARISTA_ERROR)
   - syntax extension for Unicode literals (@"string" and @'c')
   - InputStream.t and OutputStream.t can now be created from functions
   - better error reporting when a signature is invalid
   - helper functions for serialization
   - minor refactoring of code (with small impact on API)
   - removed dependency to 'Str' module
   - bug #73: uniform handling of depencies
   - bug #83: correct construction of constant pool w.r.t. LDC 

2) Format OCaml Code
** Haihao Shen asked, Mihamina Rakotomandimby replied, and Gabriel 
Scherer then said:

>> Does anyone know whether there is some tools or scripts to format 
>> ocaml
>> code in a unified format?
> If you mean having a "good" indentation, opening it in 
> Emacs+tuareg-mode
> then indenting will work fine.
> Note that it's a file by file way and it doesn not split uselessly 
> long
> lines to shorter ones: just indentation. Or I dont know how to fully 
> use
> tuareg-mode ;-).
> For a large set of files, I don't know how to ease the work.

Camlp4 parses Ocaml source, and can reprint it. You can't customize
the output much, it's defined by the pretty-printer (but you could
write your own pretty-printer), and it probably doesn't correspond to
your own OCaml style. If you're only looking for a way to normalize
indentation, you may be happy with that.

   camlp4o file.ml (* outputs in the console *)
   camlp4o file.ml -o output.ml

Note that piping/redirection `camlp4o file.ml > foo` doesn't work as
camlp4o sends a marshalled AST by default.
An issue with camlp4 is that it can sometimes move comments a bit: the
placement of comments in the reformatted source is approximative *with
respect to whitespace* (you sometimes have a blank inserted between a
phrase and the comment). That is not really an issue for the human
reader, but it tends to confuse `ocamldoc`, which relies on whitespace
heuristics to know which phrase a comment documents. You should think
twice if you wish to use both camlp4 and ocamldoc at the same time.

If you wanted to write your own pretty-printer (as a Camlp4 printer,
or based on your own or another parser), you could be interested in:
- The [Pprint] module of François Pottier, an interesting adaptation
of Daan Leijen's Haskell PPrint library
- The [easy-format] library of Martin Jambon
- The [Format] module of the standard library

I have only used Format and Pprint, and prefer Pprint (simpler to
understand and use).

** rixed then said and Jérémie Dimino replied:

> > Note that piping/redirection `camlp4o file.ml > foo` doesn't work as
> > camlp4o sends a marshalled AST by default.
> This is indeed annoying.
> Unfortunately, and quite surprisingly to me, using -o /dev/stdout does
> not help.

You can force camlp4 to use the pretty-printer with:

   camlp4o -printer o file.ml > foo

** Jun Furuse replied to the original post:

ocaml-indent may help you, at least around indentations:

3) try ocaml website
** Fabrice Le Fessant announced:

   We worked hard on our "Try OCaml" website, started by Çagdas, and we
managed to improve it enough, so that we think people can start using it
(and hopefully, improving it).

It is available here:


   There are 3 lessons, two lessons for "getting a taste of OCaml"
(totalling 10 steps), and the last one about some new features in 3.12.
You can use the "lessons()" command in the toplevel to get the current
list of lessons (in case we contribute more in the meantime !).

   We welcome any comment to improve it, bug reports, and new content.
The repository is on Github:


   You can easily fork it, compile it, modify it, and send us pull
requests if you want your content published on our site.

We will probably continue to focus on the first lessons (the "getting a
taste of OCaml" virtual section), but we are also looking for
contributions on advanced topics : we plan to make them start around
lesson 10, and focus on particular issues (modules, functors, labels,
objects, classes, polymorphic variants, etc.). Send us a mail if you
want to volunteer !

   As the engine is translated from OCaml to Javascript by js_of_ocaml,
you can even play with it offline, when you are disconnected.

4) Need help for a practical hacking book about ocaml
** bobzhang announced:

    I was writing(or collecting)  a hacking book about ocaml, now it's
already more than 100 pages :-)
   I would help to contribute it for free to the ocaml comunity.  Anyone
would like
  to help it?
  I put it here  <http://www.seas.upenn.edu/~hongboz/master.pdf>

  My book mainly focus on how to make ocaml programmers more productive,
quite different from other existing books. Btw, I collected a lot online
resources, anyone can tell me how to credit them?

  I have been digging haskell, ocaml, lisp for several years, honestly
speaking, I found ocaml is still the most productive language.

5) RFC: basename, dirname, PR#4549
** Damien Doligez asked:

I would like to get some comments from the OCaml community at large 
the problem raised in <http://caml.inria.fr/mantis/view.php?id=4549>

In a nutshell, the problem is that our version of basename and dirname
are not exactly the same as the Open Group's definition.

We can easily implement the standard behaviour for basename and dirname,
and it seems desirable, but there is a catch: we will have to change
the specification of the standard library slightly.

Currently, we specify this:

    [concat (dirname name) (basename name)] returns a file name
    which is equivalent to [name]. Moreover, after setting the
    current directory to [dirname name] (with {!Sys.chdir}),
    references to [basename name] (which is a relative file name)
    designate the same file as [name] before the call to {!Sys.chdir}.

With the Open Group basename and dirname, this becomes false for
names that include some trailing slashes, because such slashes
are removed by basename.  This means that a name "foo/bar/"
becomes "foo/bar" when put through
   [concat (dirname name) (basename name)]
and opening "foo/bar" may succeed if it is a file, while
opening "foo/bar/" would fail.

I would like to know if anyone relies on the precise behaviour
documented in the standard library, and for everyone else, would
you prefer the old behaviour or the new (standard) behaviour?

6) Other Caml News
** From the ocamlcore planet blog:

Thanks to Alp Mestan, we now include in the Caml Weekly News the links 
to the
recent posts from the ocamlcore planet blog at 

Beta-release of Coq 8.4:

Coq 8.3pl3 is out:

Announcing Baardskeerder:

Barista: 2.0-alpha2:

A Better (Gauss) Error Function:

Old cwn

If you happen to miss a CWN, you can send me a message
(alan.schmitt at polytechnique.org) and I'll mail it to you, or go take a 
look at
the archive (<http://alan.petitepomme.net/cwn/>) or the RSS feed of the
archives (<http://alan.petitepomme.net/cwn/cwn.rss>). If you also wish
to receive it every week by mail, you may subscribe online at
<http://lists.idyll.org/listinfo/caml-news-weekly/> .


More information about the caml-news-weekly mailing list