Previous week Up Next week


Here is the latest Caml Weekly News, for the week of 30 December 2003 to 06 January 2004.

  1. pagoda core foundation cf-0.0
  2. CamlTemplate 0.7.0 released
  3. Findlib-1.0 released
  4. Equeue-2.0 (also about Shell pkg)
  5. GODI news

pagoda core foundation cf-0.0

James Woodyatt announced:
Happy New Year!  I am pleased to announce the long-delayed premiere
release of the core foundation library from my personal Pagoda project.

Highlighted features include:

- Functional streams and stream processors (extended).
- Functional bootstrapped skew-binomial heap.
- Functional red-black binary tree (associative array).
- Functional sets based on red-black binary tree.
- Functional real-time catenable deque.
- Functional LL(x) parsing using state-exception monad.
- Functional lazy deterministic finite automaton (DFA).
- Functional lexical analyzer (using lazy DFA and monadic parser).
- Functional substring list manipulation (message buffer chains).
- Gregorian calendar date manipulation.
- Standard time manipulation.
- System time in Temps Atomique Internationale (TAI).
- Unicode transcoding.
- Extended socket interface (supports IPv6).
- Universal resource identifier (URI) manipulation.
- I/O event multiplexing (with

This library was developed on Mac OS X 10.2 and 10.3.  Some porting may
be required to use it under Linux or another POSIX-like environment.
The extended socket interface and I/O multiplexing may need extensive
porting to use under WIN32.

Choose either of the following two links to download the source
(depending on your preferred compressor):

The reference documentation is generated with ocamldoc, and it is
available online at this location:

The source code for this library is released under the two-clause
BSD-style license.  I invite the Caml team at INRIA to consider lifting
some or all of this library into their Objective Caml distribution.
Sylvain Le Gall asked and James Woodyatt answered:
>Does this library replace IOX ? ( i have made a little package of it
>debian and i don't have yet released... maybe i could directly use this
>library rather than IOX )

It does not 'replace' Iox, but the fact is I haven't worked on
improving Iox in quite some time.  I didn't like the semantics of the
Iox library after I started trying to build complicated components with

So I went back to the drawing board, and looked at more things that
others have done-- particularly in the area of using functional   
programming techniques for interactive applications.  I carefully
studied Thomas Hallgren's and Magnus Carlsson's Ph.D. thesis on the
Fudget system in Haskell.  (See for details.)  I've been
experimenting around that for several months now, and I'm pretty sure I
like my new approach over the old one.

I quickly discovered, however, that I needed a core foundation of
miscellaneous code that didn't really belong in the I/O component
framework itself.  That core foundation is what you now see in this
release.  (I decided I needed to get some code published before it  
started to grow mold on it and die.)

In addition to the core foundation, I am currently working on several
other libraries that are all part of my Pagoda project:

- Iom   a replacement for Iox built with Cf_gadget and Cf_socket.
- Mime  parsing/emitting MIME entities and content-transfer encodings
- Xml   yet another wrapper around Expat, plus some glue for Cf parsers
- Beep  a general implementation of RFC 3080 and RFC 3081 using Iom

These are all in various states of unreleasable incompleteness.
Though, the Iom, Mime and Xml libraries are fairly close (they just
need reference documentation).

I also plan to write a DNS resolver for Iom.  I hope to support  
Multicast DNS with it too, i.e. Rendezvous.  I also want to write a
RADIUS client, and I will need a good wrapper around OpenSSL if I'm
going to implement the required TLS profile for RFC 3081.  Eventually,
I'd like to have a nice implementation of RFC 3341, 3342 and 3343 using

>What is pagoda project ?

It's a project I fart around with in my limited spare time, mostly for
research purposes.  The Iox library came from research early in my
Pagoda project.  I called it "Pagoda" because that was where I started
stacking up all my bits and bobs of componentry that I hope will be
useful in building distributed network service applications.  In
actuality, it appears to be a dark, mysterious tower filled with shiny
bits of seemingly useless artifacts whose guardians regard as sacred
relics.  A pagoda.

CamlTemplate 0.7.0 released

Benjamin Geer announced:
CamlTemplate is a small template processor library for Objective Caml.
It can be used to generate web pages, scripts, SQL queries, XML
documents and other sorts of text.

Version 0.7.0 has been released, and can be downloaded from:

New in version 0.7.0:

  * Added support for floating-point values.

  * Implemented nested scopes: macros have their own scope.
    Setting values in a template no longer changes the model.

  * Added a simple macro namespace system.  Each template
    provides a namespace for its macros; to use macros
    defined in another template, you now have to use the new
    #open statement.

  * Added a bracket operator for calculating a hash key at
    run time.

  * Added a virtual class to replace the two separate
    functions for loading and checking template source code.

  * Shortened template model type names.

  * Added some design documentation.

  * Added licence exception allowing CamlTemplate to be
    linked with Apache.

  * Several bug fixes.

For full details of the changes, please see the ChangeLog.

Findlib-1.0 released

Gerd Stolpmann announced:
I have just released version 1.0 of findlib, the library manager for
O'Caml. This is a rather big step, as the list of changes is very long.
Nevertheless, this version of findlib is backward-compatible with
previous versions. However, O'Caml 3.07 is required for installation.

The most prominent changes:

- It is now possible that a package has subpackages. This is very
  useful to express intra-package dependencies.

- There are a number of new features for META files, e.g. it is
  possible to append to variables, and to negate predicates.

- There is now ocamldoc documentation

- There is a subversion repository

The detailed list of changes is included in the README file, see here:

The whole (updated) documentation is available here:

Gerd Stolpmann added:
There is now also a new version of findlib-browser. Unfortunately, I had
to fix one file in findlib to do this, so there is again a new version
of findlib, sorry.

Equeue-2.0 (also about Shell pkg)

Gerd Stolpmann announced:
Although it has been already available since December 6, the
announcement of Equeue-2.0 was still missing. Now, here it is.

The list of changes:

- This release incorporates the modules of the previous Shell
  package (which is no longer continued as such). You can
  now run shell commands within a Unixqueue.

- A new concept is introduced as a means to structure bigger
  event-based programs: engines. After the engine is attached
  to a Unixqueue, it performs a previously specified task in
  an autonomous way, and when the task is done, it reports
  the result. It is possible to combine basic engines to
  larger engines (as a program construction principle).

- Documentation is available in ocamldoc format

- There is a subversion repository:

Documentation is available here:


GODI news

Gerd Stolpmann announced:
GODI, the O'Caml source distribution, has been updated with 
the following packages:

- godi-findlib Version 1.0.1
- godi-findlib-browser Version 0.2
- godi-equeue Version 2.0
- apps-ledit Version 1.11 (contributed by Alain Frisch)  

To install these packages, just go into the godi_console, get the new
list of available packages, and select the mentioned packages for

Sorry, but I found no time yet to include Owen's and William's PLIST
patch. This is still on my list and not forgotten.

Using folding to read the cwn in vim 6+

Here is a quick trick to help you read this CWN if you are viewing it using vim (version 6 or greater).

:set foldmethod=expr
:set foldexpr=getline(v:lnum)=~'^=\\{78}$'?'<1':1

If you know of a better way, please let me know.

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