OCaml Weekly News Previous week Up Next week

Hello

Here is the latest OCaml Weekly News, for the week of January 21 to 28, 2014.

  1. Releases of xtmpl, ocaml-rdf, stog, stog-rdf, stog-writing and genet
  2. Announcing yet another Makefile for OCaml
  3. Other OCaml News

Releases of xtmpl, ocaml-rdf, stog, stog-rdf, stog-writing and genet

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2014-01/msg00183.html

Maxence Guesdon announced:
It is my pleasure to announce new releases of various tools and
libraries of mine. The opam packages are already submitted and will be
available soon.

# Xtmpl 0.8 [http://zoggy.github.io/xtmpl/]

Xtmpl is a small XML templating library for OCaml.
This release changes the API to allow fold-like style rewriting.


# OCaml-RDF 0.8.0 [http://zoggy.github.io/ocaml-rdf/]

OCaml-RDF is an OCaml library to manipulate RDF graphs and execute
Sparql queries. This release fix a small bug and adds convenient
functions.


# Stog 0.10.0 [http://zoggy.github.io/stog/]

Stog is a static web site compiler. It is able to handle blog posts as
well are regular pages.
This release contains a lot of changes, listed here:
  http://zoggy.github.io/stog/posts/release-0.10.0.html


# Stog-rdf 0.10.0 [http://zoggy.github.io/stog/plugins/rdf.html]

This Stog plugin allows to easily specify RDF triples within elements,
to produce a RDF graph for the whole generated site. It also permits
executing Sparql queries to include data in the generated pages. 
This release follows Stog's new architecture.


# Stog-writing 0.10.0 [http://zoggy.github.io/stog/plugins/writing.html]

This plugin adds new rewrite rules to use foonotes and bibliographies
in generated pages, with also auto generation of paragraph ids. 
This release follows Stog's new architecture, and include some minor
changes.


# Genet 0.6 [http://zoggy.github.io/genet/]

Genet is tool to build a continuous integration platform. It is
particulary adapted to developments involving various tools working in
chain, that is some tools producing files used by other tools and so
on. This release follows the new API of Xtmpl 0.8.
      

Announcing yet another Makefile for OCaml

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2014-01/msg00187.html

Christian Rinderknecht announced:
I would like to announce a Makefile for small OCaml projects.

Although this list is read by many seasoned programmers who likely use
ocamlbuild, those who prefer total control over the build process and
beginners alike may find it useful. It is distributed along with a
manual and a detailed documentation in ASCII. The requirements, beyond
the obvious, are GNU Make 3.82 or 4.00 (later recommended for
paralellism), GNU Sed, Linux (with GNU coreutils) or Darwin (OS X) and
dash or bash.

Particular emphasis has been brought to reporting only independent
errors and minimising recompilations. The makefile has no interface
with control version systems, but it detects modifications, deletions
and creations of source files between build cycles, and it reacts
appropriately so there is no need to restart a build cycle from a
clean slate to correct an inconsistency. Note that, as usual with
makefiles, this build system relies only on time stamps to determine
its actions.

Since this is a beta release, you are very welcome to report any
errors. Let me also know if you improve portability (e.g., the sed
regular expressions are mostly compatible with BSD sed, but not
quite).

The urls are

http://pnyf.inf.elte.hu/rinderkn/Software/OCaml/Makefile
http://pnyf.inf.elte.hu/rinderkn/Software/OCaml/Makefile.man
http://pnyf.inf.elte.hu/rinderkn/Software/OCaml/Makefile.doc
      
William R then asked and Christian Rinderknecht replied:
> could you explain differences with OCamlMakefile

This is a fair question, since Markus' work has been around for quite
a while, but I am afraid that I never used it. Nevertheless, I went
through the documentation and the source code and here are the main
differences I can see at the moment (my apologies to Markus if I am
mistaken):

OCamlMakefile vs my Makefile
* User specifies SOURCES and RESULT vs optional OBJ and BIN
* Order of linking must be specified vs optional
* Builds library and toplevels vs none
* Supports -pack/-for-pack and profiling vs none
* Preprocessors in special comments, no command-line options per
source file vs one tag file per source file + global options
* Generates documentation vs none
* Subprojects vs mono-project
* Support for ocamlfind vs none
* Included in another Makefile vs includes another Makefile
* One native code compilation vs two
* 1300 lines vs 830 lines
* Plethora of phony targets vs two
* Short documentation vs long

OCamlMakefile supports more features than I do, although I use tag
files à la ocamlbuild. This is not surprising, as my makefile was not
developed to cover many use-cases, just mine and those of
beginners. Accordingly, I put an extreme emphasis on different issues,
like having the laziest makefile possible: it works a lot in order to
compile as little as possible and requires the programmer to configure
as little as possible. The output on the terminal is entirely
generated by the Makefile, not by the tools it calls, and, if
available, it leverages the --output-sync option of GNU Make 4.0 to
keep everything readable while using parallelism. Also, there is an
impact analysis in case of errors, so there are no redundant error
messages (one error implying another in another module) and no useless
recompilations (bound to fail). Another feature is that my makefile
keeps track of source deletions, which are a major source of
inconsistencies, while updating compilation dependencies locally, and,
generally speaking, the main design principle is that you should
*never* have to do [make clean] if you don't really want to (the only
case where you should is compiling to native code when maximising
cross-module optimisations and inlining).

> why not contribute to this project if you introduced compatible
> clever ideas ?

OCamlMakefile and my Makefile address different crowds, but these can
actually benefit from each other, you are right. I will keep that in
mind, but before I add more features à la OCamlMakefile, or the other
way around, I would like to have bug reports.

You can simply try my makefile by putting it in a single-directory
project and setting BIN to the main module's basename in
Makefile.cfg. (Each file requiring camlp4 or special options for
certain tools require a tag file. See Makefile.man)
      
John Whitington then replied:
To correct a few: in OCamlmakefile:

> * Builds library and toplevels vs none

make top, make byte-code-no-link, make native-code-nolink

> * Generates documentation vs none

make htdoc/ltdoc/psdoc/pdfdoc

> * Support for ocamlfind vs none

PACKS = camlpdf

to use ocamlfind packages.

To get it to use ocamlfind all over, use

REAL_OCAMLFIND=ocamlfind

(not documented)
      
Goswin von Brederlow said and Christian Rinderknecht replied:
> No ocamlfind? That realy sucks. Anything non trivial will require
> some extras, if only batteries, core or unix. You realy need support
> for ocamlfind so adding libraries becomes easy.

If you want to use ocamlfind as a driver to ocamldep, the compilers
ocamlc and ocamlopt and the linkers, you can simply prefix the calls
to these in the Makefile like so:

instead of ${OCAMLC} ....
write ocamlfind ${OCAMLC} ...

Then use the tag files for .mli, .ml and for the two linkers
(byte-code and native-code), to pass options specific to ocamlfind as
if they were for ocamlc, ocamlopt etc.

Adding libraries and performing queries should be done outside the
Makefile.
      
Christian Rinderknecht then added:
I committed the very simple fix I suggested to you in my last
email. Now you can simply set

OCAMLFIND := ocamlfind

in Makefile.cfg and you use the tag files as usual, except the command
lines will be passed to ocamlfind. For example, a tag file may be

ocamldep: -syntax camlp4o
ocamlc: -syntax camlp4o

(Note: the warnings emitted by [ocamlfind ocamldep ...] are printed
the first time and lost.)

The urls are

http://pnyf.inf.elte.hu/rinderkn/Software/OCaml/Makefile
http://pnyf.inf.elte.hu/rinderkn/Software/OCaml/Makefile.man
http://pnyf.inf.elte.hu/rinderkn/Software/OCaml/Makefile.doc
      
Malcolm Matalka also replied to the original post:
FWIW, I have my own Makefile approach, with ocamlfind support.  I
started it because I wanted to understand how to compile things in Ocaml
and the various files needed to build different variables.  Since then
it's grown into the base for all of my Ocaml.

I should probably use ocamlbuild but I've never really found it that
compelling and my Makefile solution handles making and running tests and
examples for me just how I like it.

It is in a repo I clone from whenever I start a new repo:

https://github.com/orbitz/ocaml-template

I don't actually suggest using it unless one understands Makefile's a
bit, it's made specifically for things I want.
      

Other OCaml News

From the ocamlcore planet blog:
Thanks to Alp Mestan, we now include in the OCaml Weekly News the links to the
recent posts from the ocamlcore planet blog at http://planet.ocaml.org/.

Pattern synonyms, arbitrary patterns as expressions:
  http://gallium.inria.fr/blog/pattern-synonyms-as-expressions

Batteries 2.2 released:
  https://forge.ocamlcore.org/forum/forum.php?forum_id=895

Full Time: Software Developer (Functional Programming) at Jane Street in New York, NY; London, UK; Hong Kong:
  http://jobs.github.com/positions/0a9333c4-71da-11e0-9ac7-692793c00b45
      

Old cwn

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.

If you also wish to receive it every week by mail, you may subscribe online.


Alan Schmitt