Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
ANNOUNCE: OCaml NAE releases cf-0.8 and iom-0.3
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2006-07-15 (07:14)
From: j h woodyatt <jhw@c...>
Subject: ANNOUNCE: OCaml NAE releases cf-0.8 and iom-0.3

The OCaml Network Application Environment (NAE) released updates to  
the Core Foundation (Cf) and I/O Monad (Iom) library modules today.   
See the project page on SourceForge.Net for downloads.


The update to Cf is mostly bug fixes, but type names were changed  
almost everywhere to remove confusing "_t" suffixes.  Also, the  
[Cf_gadget] interface was significantly altered.  The update to Iom  
is completely overhauled (again, <sigh/>).

===== OCaml NAE Core Foundation (cf) library =====

This distribution is the Objective Caml Network Application  
Environment (NAE)
Core Foundation library, which is a collection of miscellaneous  
extensions to
the Objective Caml standard library.

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 more options, and UDP w/ 
- Universal resource identifier (URI) manipulation.
- I/O event multiplexing (with

Note: see the ISSUES file for a list of open problems in this release.

===== OCaml NAE Reactive I/O Monad (iom) library =====

This distribution is the Objective Caml Network Application  
Environment (NAE)
Reactive I/O Monad library, which implements I/O monad functions  
designed to
facilitate writing of concurrent, reactive, single-threaded network  
services in a functional style.

Note: see the ISSUES file for a list of open problems in this release.

===== Required Components =====

This library requires the following external components:

- Objective Caml (v3.09 or newer)
- Findlib (tested with v1.0.4)
- OCaml NAE Core Foundation (cf-0.8)

Principal development was on Mac OS X 10.4 w/ XCode 2.3 using GCC  
4.0.  No
other platforms were tested for interoperability.

===== Changes in Cf-0.8 =====

Highlights of the changes:

+ Fix bugs and remove warnings generated when compiling with OCaml  
3.09 series.
+ Changed named of types to remove [_t] suffixes (that were never a  
good idea).
+ Rewrote the gadget monad again, to permit input backtracking on the  
   resulting from evaluation.
+ Minor changes to event polling to simplify interface.
+ Modularity improvements to socket API.
+ Update the hard-coded TAI-UTC leap second archive.
+ Update copyrights and author email address.
+ Minor improvements to lazy sequences and functional messages.
+ Removed obsolete modules.

--- [Makefile]
     Use -warn-error A on debug builds.

--- [Cf_deque]
     Use recursive module instead of magic.  Add [to_list], [of_list]  
     [of_seq] convenience functions.

--- [Cf_rbtree]
     Optimizations for better performance.  (Further optimizations  
are possible.
     While these modules offer more adaptability than the standard  
OCaml library
     data structures, they do not offer superior performance.  In  
some cases,
     performance is a little better than the standard, but in most  
cases, the
     standard library is runs faster.  This is particularly true for  
the binary
     set operator functions.)

--- [Cf_ip4_addr,Cf_ip6_addr]
     Fixed an awful bug in the [compare] functions that caused the  
return value
     to be mistyped.

--- [Cf_tai64]
     Update the hard-coded TAI-UTC leap second archive.  Add a  
comment describing
     where to retrieve the data.

--- [Cf_scan_parser]
     Fix brokenness surfaced by OCaml 3.09 series.

--- [Cf_gadget]
     Re-engineered, again.  This time, the integrated state is  
dropped from the
     monad, and the scheduler is no longer implemented in the  
imperative style.
     As a result, evaluating the monad now produces a flow that permits
     backtracking on the input.

--- [Cf_state_gadget]
     This is the old [Cf_gadget] from version 0.7, with some minor  

     Use [try... with] to catch only the [Queue.Empty] exceptions  
raised by the
     calls to [Queue.take] in the scheduler itself.  All other  
exceptions are
     passed through the flow produced by [Cf_gadget.eval].

     Added [abort] and [wirepair] monads.  Simplified by removing  
     monad, and the [simplex_t] and [duplex_t] types.

--- [Cf_machine]
     Obsolescent.  Use the [start] and [next] classes in [Cf_gadget]  

--- [Cf_message, Cf_seq]
     Add [to_function] for convenience constructing [Scanf.scanbuf]  
     The indirection is required to keep [Scanf] from having to be  
loaded if it
     isn't used.

--- [Cf_journal]
     Add [`Notice] event level, and associated method in [agent]  
class.  Cleared
     up some ambiguous language in the documentation.

--- [Cf_nameinfo]
     Interface was busted for all queries except with the default hints.
     Refined interface to support narrowed queries.

--- [Cf_poll]
     Unified ['a state_t] and ['a file_state_t] into a single  
concrete variant
     type and removed the polymorphism on the state variant in all  
the derived
     event classes.  Event classes are now parameterized by event  
type alone.

     Changed [time] class to be a repeating interval timer event.

     Fixed [idle] so that events that reload themselves are not  
serviced until
     the next cycle.

--- [Cf_ipX_proto, Cf_xxx_socket]
     Moved the definitions of the protocol modules into the  
     modules.  This will allow [Iom] to link with the core socket API  
     also linking in all the convenience classes for synchronous I/O.

--- [Cf_lexer]
     Obsolete, therefore removed.

--- Changed names of types to remove [_t] suffixes.

     Module              Type names changed
     ------              ------------------
     [Cf_journal]        [invalid_t], [fail_t], [error_t], [warn_t],  
                         [debug_t], [basic_t], [enable_t], [level_t]
     [Cf_seq]            [cell_t]
     [Cf_flow]           [cell_t]
     [Cf_gadget_t]       [work_t], [gate_t], [wire_t], [guard_t]
     [Cf_lex]            [counter_t]
     [Cf_socket]         [socktype_t], [domain_t], [protocol_t],  
                         [sockopt_t], [tag_t], [address_t], [msg_flag_t]
     [Cf_sock_common]    [address_t]
     [Cf_ip4_addr]       [network_t]
     [Cf_ip4_proto]      [tag_t], [address_t]
     [Cf_ip6_proto]      [tag_t], [address_t], [mreq_t]
     [Cf_uri]            [host_t], [server_t], [authority_t],  
                         [abs_path_v], [rel_path_v], [path_t],  
                         [relative_t], [reference_t] [abs_special_t],

--- [t_cf]
     Test Cf_scan_parser.scanfx "%!".

===== Changes in Iom-0.3 =====

This release is yet another major overhaul.  The programming  
interfaces are
all new again and coded from scratch-- this time with more extensive,  
but still
far from exhaustive, testing and regression.

Previous release were rough drafts, and this new one is every bit as  
much of a
rough draft as those were, but I feel more confident than before that  
no major
overhauls of this design will be required.  Minor design flaws may  
corrections, and bugs are very likely to be exposed over time with  
usage, but
future changes in the version sequence should be incremental,  
rather than

All along, I have been aiming for a framework that appears to be as  
as the venerable STREAMS framework from Unix SVR4.  With this  
release, I feel
like I have finally succeeded in that effort.  Only time will tell,  
however, if
I am right.

Highlights of the new design:

+ Uses new stateless [Cf_gadget] module (from Cf-0.8) with state classes
   instead of the old stateful [Cf_gadget] (from Cf-0.7).
+ Conventions established for multiplexing communication between  
gadgets on
   multiple wires, i.e. a [jack] is used for sending control and  
   notification, and a [plug] is used for receiving control and sending
+ Support for Unix pipes.
+ Redesigned interface to TCP streams.
+ Generalized support for simplex and duplex octet stream processsing  
   e.g. framing discipline, packet multiplexing, etc.

See t/ for an undocument example of how to use the new Iom  

j h woodyatt <>
san francisco, california