caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* ANNOUNCE: OCaml NAE release cf-0.7 and iom-0.2
@ 2005-07-26  7:25 james woodyatt
  2005-07-26  7:38 ` [ocnae-help] " james woodyatt
  0 siblings, 1 reply; 2+ messages in thread
From: james woodyatt @ 2005-07-26  7:25 UTC (permalink / raw)
  To: Ocaml Trade, The Caml Hump, OCNAE Help

[-- Attachment #1: Type: text/plain, Size: 3459 bytes --]

everyone--

Today, the OCaml Network Application Environment (NAE) has released  
maintenance updates of two of its published libraries.  As its  
project page on SourceForge.Net says, OCaml NAE is "a collection of  
Objective Caml libraries to support the development of concurrent,  
single-threaded Internet application servers."

For downloads and more information, please see:

         <http://sf.net/projects/ocnae/>

The two libraries updated in this release are the Core Foundation  
(cf) and the Reactive I/O Monad (iom).  The cf library was formerly  
known as the Pagoda Core Foundation.  The complete CHANGES records  
for both libraries since their previous releases follows excerpts of  
the README files.

===== 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/ 
multicast).
- Universal resource identifier (URI) manipulation.
- I/O event multiplexing (with Unix.select).

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.08.3 or newer)
- Findlib (tested with v1.0.4)

Principal development was on Mac OS X 10.3 and Mac OS X 10.4 w/ XCode  
2.1 using
GCC 4.0.  The final version of this library also compiled  
successfully and
passed all self-tests without warnings on Suse Linux 9.2 for x86-32.   
Other
platforms with POSIX-like environments should require only a minimal  
porting
effort.

One major open issue: the extended socket interface is broken under  
WIN32.
(The author invites help porting the library to other environments.)


===== 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  
application
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.08.3 or newer)
- Findlib (v1.0.4)
- OCaml NAE Core Foundation (cf-0.7)

Principal development was on Mac OS X 10.3 and Mac OS X 10.4 w/ XCode  
2.1 using
GCC 4.0.  The final version of this library also compiled  
successfully and
passed all self-tests without warnings on Suse Linux 9.2 for x86-32.   
Other
platforms with POSIX-like environments should require only a minimal  
porting
effort.

===== CHANGES =====

  
    

[-- Attachment #2: CHANGES cf-0.7 --]
[-- Type: application/octet-stream, Size: 19771 bytes --]

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

This file describes in technical detail the functional differences between
released versions of the library.


===== Version 0.7 =====

Highlights of the changes:

+ Some very minor bugs fixed.
+ Minor performance and improvements.
+ Additions to [Cf_parser] interface.
+ Minor modifications to [Cf_parser] and [Cf_lex] interfaces.
+ New module [Cf_machine]: object-oriented layer over [Cf_gadget].
+ Removed trailing underscores from private methods defined in class types
  for the purpose of establishing a convention.

--- [Cf_parser]
    Fixed [to_extended] to work given the new physical equality rules enforced
    by Ocaml-3.08.X.  Still need to write a test case for this.
    Added [Error] exception and two new functions, [err] and [req], to the [X]
    module.  They do the expected thing.
    Changed the [err f] function to [err ?f ()] instead.

--- [Cf_lex]
    Change name of [line_cursor] class to [cursor] for simplicity.

--- [Cf_message]
    Fixed [normalize] so that it works even when compiled with -unsafe.
    Improved performance of [normalize] by verifying the list before filtering.

--- [Cf_flow,Cf_rbtree,Cf_parser]
    Use Cf_seq.nil in place of Lazy.lazy_from_val Cf_seq.Z.

--- [Cf_machine]
    New module.  Object-oriented framework for [Cf_gadget] state machines.

--- [Cf_poll]
    Allow subclasses [Cf_poll.file] to have more states.  Changed the type
    parameter of the [event] class to 'state, rather than 'event.  Added the
    rwx_t convenience type, i.e. type rwx_t = [ `R | `W | `X ]

--- [Cf_socket]
    Add [`SOCK_SEQPACKET] to the allowed socket types in the [listen] function.
    There is no support for that socket type yet, but we must make room for it.
    When [setsockopt] fails, raise Unix_error with the right function name.

--- [Cf_sock_common]
    Make [setsockopt] and [getsockopt] method explicitly polymorphic.

--- [Cf_sock_dgram, Cf_sock_stream] Explicitly specify socket type tags.

--- [cf_socket_p.c, cf_ip4_proto_p.c, cf_ip6_proto.c] Use socklen_t instead of
    other types, in order to shut up compiler warnings when using GCC 4.0.

===== Version 0.6 =====

Highlights of the changes:

+ More bugs fixed (some critical).

--- [Cf_rbtree]
    Fix bug in [Map.insert] that failed to replace nodes when the key specifies
    a node that is already in the map.  (Thanks to Craig Falls, once again, for
    finding this bug.)

--- [Cf_dfa]
    Improved lazy DFA module with a better functorial interface, to allow for
    more efficient symbol maps (to support, e.g. wide character lexers) and to
    decouple the symbol type from the cursor type, so that Cf_parser.X can be
    used easily in place of Cf_parser.
    
--- [Cf_dfa, Cf_lexer]
    Fixed the documentation for the [( $@ )] operator to reflect the actual
    behavior.  When the action parser does not accept the recognized sequence,
    then no other rule is selected and no other action functions are executed.

--- [Cf_lexer]
    Updated to use the new [Cf_dfa] interface, though it is now deprecated in
    favor of the new, improved [Cf_lex] module (see below).

--- [Cf_uri]
    Updated to use the new [Cf_lex] in place of the deprecated [Cf_lexer].

--- [various .c files]
    Rename custom data tags from 'pagoda' to 'ocnae'.

+ New functions.

--- [Cf_rbtree, Cf_set, Cf_map]
    Add [of_list_incr], [of_list_decr], [of_seq_incr] and [of_seq_decr], which
    are optimized for lists and sequences known to be in increasing or
    decreasing order.
    
    These functions were derived from code contributed by Brian Hurt (thanks!)
    and implement a variant on Hinze's algorithm:
        <http://citeseer.ist.psu.edu/hinze99constructing.html>

--- [Cf_set]
    Add [size] function.

--- [Cf_seq]
    Add [nil] value.
    Add [flatten] function.
    Requires Ocaml-3.08 now.

--- [Cf_flow]
    Add [commute_string] function.

--- [Cf_parser]
    Add [of_extended] and [to_extended] functions.
    Add [req] parser, an efficient shortcut for [alt (p :: err f :: [])].
    Add [Error] exception for generic unparameterized errors.
    Add [altz] parser for match from a sequence (instead of a list) of choices.

--- [Cf_scan_parser]
    Change [scanf] to return an ordinary Cf_parser.t function.
    Add [scanfx] to return a Cf_parser.X.t function.

--- [Cf_regex]
    New module for regular expression parsing, matching and search.
    
--- [Cf_lex]
    A new and improved lexical analysis module, with an interface derived from
    the now deprecated [Cf_lexer].  It offers a more flexible interface to the
    underlying [Cf_dfa] module, and its [( !~ )] and [( !$ )] operators parse
    their string arguments as regular subexpressions with the format defined in
    the new [Cf_regex] module.

--- [README]
    Fixed an embarrassing word-choice bug, i.e. principle vs. principal.

===== Version 0.5 =====

Highlights of the changes:

+ Many bugs fixed (some critical).
+ IPv6 socket addresses are now a triple, containing the scope identifier.
+ Fixed a very bad stack leak problem in the [Cf_gadget] scheduler.

--- [Cf_deque]
    Fix major bug in [fold] that caused a BUS ERROR (ack!), and also fixed
    [filter] so that it uses the non-recursive [fold] function here instead of
    going to the extra work of using [Cf_seq.fold].

--- [Cf_rbtree]
    Fix a bug in [iterate] (found by Craig Falls; thanks Craig!) caused by a
    stoopid typo.  Caused some elements to be iterated twice, and others not
    at all.

--- [Cf_gadget]
    Moderate surgery on the scheduler to fix a bad stack leak.  The new code
    is probably a tiny bit more efficient too, because I got rid of some
    unnecessary uses of {Lazy.t} in places, and there is a bit less lifting
    between monads.  I didn't benchmark it, though.

--- [Cf_socket]
    Added a special case for Mac OS X to work around a bug in Apple's network
    stack that errors in connect(2) on a non-blocking socket do not get in
    the errno system variable.  You have to get them out of the socket with
    the SO_ERROR socket option.

--- [Cf_ip4_addr]
    Make the network subnet manipulation functions cope with networks that
    are not unicast networks.  (Yes, there are multicast ranges that can be
    treated like subnets.)

--- [Cf_ip6_proto]
    Add a third element to the socket address type: an int32 for the scope id.
    
--- [Cf_ip6_addr]
    Fix the [v4compat] and [v4mapped] address type tags so that they are
    actually polymorphic variants, like they're supposed to be.  This was
    another stoopid typo, but I found it myself.

--- [Cf_netif]
    Fixed the C-language code to call if_nametoindex() with the proper
    arguments.  Again, this was a stoopid typo.

--- [Cf_poll]
    A minor change to the commented bits of debugging code in the middle of the
    select loop to use [Cf_journal] instead of my [xprintf] hackery.

--- {TESTS}
    Added a test for the [Cf_gadget] scheduler to detect stack leaks.

===== Version 0.4 =====

Highlights of the changes:

+ Fix Makefile for architectures that do not support native compilers.
+ Fix major bug in the [Cf_gadget] scheduler that caused some wires to be
  prematurely collected without delivering events to their receivers.

--- [Cf_gadget]
    Fix major bug in the scheduler.  Events transmitted on wires that are no
    longer connected to a receiver are now delivered to any pending guards that
    were queued before the receiver was collected.  Minor changes to the
    debugging hints to use Cf_journal.

--- [Makefile]
    Samuel Mimram, the Debain maintainer of this package, says: There are some
    minor issues with your Makefile concerning non-native archs [...]:
    - the doc rule should use ocamldoc instead of ocamldoc.opt since it is
    not available on all archs (or add a optdoc rule);
    - the install rule should not depend on cf.cmxa and cf.a since they are
    not necessarly built.
    Thanks to Mr. Mimram for catching this.


===== Version 0.3 =====

Highlights of the changes:

+ Rewrite the scheduler in [Cf_gadget] so that it sucks less wind.  The kernel
  is now built entirely out of mutable structures, and we got rid of the 'pin'
  type because we don't represent wires internally as integer keys in a map.
+ Added [Cf_journal], a foundation for extensible diagnostic event journaling
  inspired by Log4j from the Apache Foundation.  (Look for a full suite of
  extensions to be sold separately.)
+ Removed the [?xf] optional exception function from the [Cf_lexer.create]
  function.  Use a derived cursor class with an [error] method that can be
  overridden for this purpose.
+ Added [Cf_scan_parser], which scans an input sequence using the [Scanf]
  module in the standard library.
+ Minor convenience functions added to [Cf_parser].
+ Other bug fixes.


--- [Cf_deque]
    Apply the iterative function in left-to-right order for all the utility
    functions.

--- [Cf_journal]
    All new functions.

--- [Cf_parser]
    Added the [filter], [map] and [optmap] functions for transforming parser
    with higher order functions on their output symbols.

--- [Cf_scan_parser]
    New module, allowing the mixing of [Scanf] and [Cf_lexer] in the same
    parser/lexer system.

--- [Cf_dfa, Cf_lexer]
    Added new ['i cursor] class.  Removed the ['c raise_exn_t] type and the
    [?xf] optional parameter from the [create] function.

--- [Cf_uri]
    Fixed bug in [refer_to_base] that allowed relative paths to resolve to
    absolute paths with a [".."] segment at the beginning of the path.  Also,
    changed to throw [Rel_undefined] instead of [Invalid_argument] (as the
    documentation specifies).
    Also, use the new [Cf_lexer.cursor] class, as now required.

--- [Cf_gadget]
    Major modifications for new scheduler.  The [pin_t] type is no longer.
    Should be more efficient (and less buggy).

--- [all *.c files]
    Stop abusing Field() as a lvalue in the C primitives.  The GC is reputed
    to hate that, and while we haven't encountered it in this library, we've
    seen it in others.  Best to be safe.

    Also: stop using CAMLlocalX() in subblocks of functions.  Just use them
    at the top of the main function block.  It seems to like that.

===== Version 0.2 =====

Highlights of the changes:

+ Major overhaul of [Cf_rbtree] to address serious performance issues (should
  improve performance of [Cf_dfa], [Cf_lexer], [Cf_poll] and [Cf_gadget]).
+ Defined [Cf_set.T] and [Cf_map.T] module types for use in abstracting the
  underlying algorithm behind sets and maps.
+ Added [Cf_seq.constrain] (and [Cf_seq.constrain2] for consistency).
+ Defined [Cf_heap.T] and [Cf_pqueue.T] module types for use in abstracting
  the use of skew-binomial heaps as either a heap or a priority queue.
  Reimplemented the interface to [Cf_sbheap] so it is consistent with the
  new [Cf_rbtree] interface.

--- [new files]
    Added [Cf_heap], [Cf_map], [Cf_pqueue] (and changed the meaning of the
    [Cf_set] module to be consistent).  These files all contain module types
    for common data structure algorithms implemented in the {Cf} library.
    Specific implementations are separated out into other modules.

--- [Cf_rbtree]
    Completely rewritten to address serious performance issues and to combine
    the interface for both sets and maps.  Use the new [Cf_rbtree.Set(K)] and
    [Cf_rbtree.Map(K)] functors.  Most functions now offer better performance
    for smoothly distributed input than do the [Set] and [Map] modules in the
    Ocaml standard library.  (Note: the [subset] function has been fixed so
    that it considers its arguments in the same order as the standard library.)

--- [Cf_sbheap]
    Minor modifications to conform to the new [Cf_heap] and [Cf_pqueue] module
    types.  Use the new [Cf_sbheap.Heap(K)] and [Cf_sbheap.PQueue(K)] functors.

--- [Cf_ordered]
    Removed the [KV_Pair_T] module type and its associated functor [KV_Pair],
    since these types are unecessary.

--- [Cf_seq]
    Added the [constrain] and [constrain2] functions for constraining a
    sequence to just those elements until the constraining function is false.

--- [Cf_dfa Cf_gadget Cf_poll]
    Modified to use the new [Cf_rbtree] and [Cf_sbheap] interface.

--- [t_cf]
    Added a new test case, that covers [Cf_flow.commute] and a few other
    things.  (Test coverage is still abyssmally poor, if you ask me.)

===== Version 0.1 =====

Highlights of the changes:

+ Compile and pass self-tests on Suse Linux 9.0.
+ Unified [sequence] and [accumulate] monad functions in [Cf_seq].
+ Added [Cf_exnopt] module with a simple convenience type.
+ New monadic constructors for [Cf_seq] and [Cf_flow] types.
+ Moderate overhaul of [Cf_gadget] (fix bugs, design problems).
+ Fix portability bugs in [Cf_socket] and cognates.
+ Add support for UDP, IP multicast and network interface selection.
+ Fix bug in [Cf_poll.idle] event polling (and give a timestamp).
+ Slightly better self-tests for [Cf_socket].

--- [Cf_cmonad, Cf_smonad, Cf_scmonad]
    Removed the [sequence] and [accumulate] functions.  Use the new functions
    in [Cf_seq] for this.

--- [Cf_exnopt]
    Added to library.  This is a simple sum type useful for defining monads
    that answer with either a value result or an Ocaml exception.

--- [Cf_seq]
    Added new functions for monadic construction.
    Use [writeC] to construct a sequence with a continuation monad.
    Use [writeSC] to construct a sequence with a state-continuation monad.
    Added new modules, [C] and [SC], containing the [sequence] and [accumulate]
    functions from [Cf_cmonad] and [Cf_scmonad] respectively.  (The functions
    from [Cf_smonad] have been removed completely.)

--- [Cf_flow]
    Added new function for monadic construction.
    Use [readC] and [writeC] to construct a flow with a continuation monad.
    Use [readSC] and [writeSC] to construct a flow with a state-continuation
    monad.
    Evaluating a continuation monad or a state-continuation monad with [evalC]
    or [evalSC] gives a resulting [('i, 'o) Cf_flow.t] value.

--- [Cf_gadget]
    In the [gate0_t] record, removed the [g_ptr_] field and changed the type
    of the [g_id_] field from an integer to a [pin_t] value.
    In the [kernel_t] record, changed the [k_rdyq_] field from a queue of
    [process0_t] values to a queue of [process0_t Lazy.t] values.
    Use [Cf_cmonad] by references, instead of by copy and paste.
    Define new class [Cf_gadget.connection] as the common base class of
    [Cf_gadget.rx] and [Cf_gadget.tx] to contain the [pin] method and two new
    methods: [check], which returns [false] if the other end of the connection
    has been collected by the garbage collector; and [id] which returns a text
    representation of the pin identifier (suitable for use in debug log
    messages).
    Removed [zguard] to replace with new [guard] and [rx] interface.  The new
    [rx#get] method returns a [guard_t] continuation monad which is evaluated
    by the new [guard method].  Internally, this is done by redefining [gate_t]
    as a continuation monad constructing a sequence of [gate0_t] values
    (parameterized by state).
    Optimized [tx#put] so that it does not enter the [scheduler_] function.
    Only [guard] can invoke a full pass through the scheduler now (though the
    scheduler could still use improvements for efficiency-- see ISSUES).
    Fixed an efficiency bug in [write] that unnecessarily constructed
    continuations.

--- [Cf_socket]
    Many platforms do not have a [sa_len] field in [sockaddr], so we now
    allocate socket address custom blocks with an extra [size_t] field at the
    beginning to carry the size of the structure.
    Stop using buffers of [SOCK_MAXADDRLEN] length and use the structure
    defined in RFC 3493 instead, i.e. [struct sockaddr_storage].
    Some socket options are not available on all platforms; therefore, allow
    the [opt_get] and [opt_set] fields in an option structure to be NULL if a
    platform doesn't support them.  The [getsockopt] and [setsockopt] function
    raise [Failure] when those socket options are used on those platforms.
    The [SO_REUSEPORT] and [SO_NOSIGPIPE] options are not available on Linux.

--- [Cf_nameinfo]
    Removed [ni_withscopeid] from list of flags.  This is a Mac OS X extension
    and I'm not sure how I will support address scoping issues yet.  Maybe it
    comes back later.
    Changes to handling of [sockaddr] structures to accommodate new
    representation required for [Cf_socket] functions.
    Stop using buffers of [SOCK_MAXADDRLEN] length and use the structure
    defined in RFC 3493 instead, i.e. [struct sockaddr_storage].

--- [Cf_netif]
    New module.  Provides wrapper around [if_nameindex] and cognates.

--- [Cf_ip4_addr, Cf_ip6_addr]
    Fixed several endianness bugs caused by failure to apply (or misapplication
    of) [ntohX] and [htonX] macros.
    Linux does not define [IN_LINKLOCAL], so we define it if it's undefined.
    Linux also does not define [IN6ADDR_NODELOCAL_ALLNODES_INIT],
    [IN6ADDR_LINKLOCAL_ALLNODES_INIT] or [IN6ADDR_LINKLOCAL_ALLROUTERS_INIT].
    Fix error in [cf_ip4_addr_compute_limits].

--- [Cf_ip_common, Cf_ip4_proto, Cf_ip6_proto]
    Add new protocol number for IPv6.
    Add [TCP_NODELAY] socket option.
    Add [Cf_ip4_proto.mreq_t] type for [IP_ADD/DROP_MEMBERSHIP] socket options.
    Add [Cf_ip6_proto.mreq_t] type for [IPV6_JOIN/LEAVE_GROUP] socket options.
    Add new socket options for IPv4 sockets: IP_TTL, IP_ADD_MEMBERSHIP,
    IP_DROP_MEMBERSHIP, IP_MULTICAST_IF, IP_MULTICAST_TTL and
    IP_MULTICAST_LOOP.
    Add new socket options for IPv6 sockets: IPV6_UNICAST_HOPS, IPV6_V6ONLY,
    IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP, IPV6_MULTICAST_IF, IPV6_MULTICAST_HOPS,
    IPV6_MULTICAST_LOOP.
    Changes to handling of [sockaddr_in] and [sockaddr_in6] structures to
    accommodate new representation required for [Cf_socket] functions.
    Added a new primitive function [Cf_ip4_proto.siocgifaddr] that returns the
    interface address for a named interface.

--- [Cf_sock_common]
    Remove [send] and [recv] private methods from [Cf_sock_common.basic] class.

--- [Cf_sock_stream]
    Change [send] and [recv] methods on [Cf_sock_stream.endpoint] class from
    virtual override to simple concrete methods.
    Use an abbreviation module for [Cf_socket] in the implementation.

--- [Cf_sock_dgram]
    New module for SOCK_DGRAM sockets.

--- [Cf_udp4_socket, Cf_udp6_socket]
    New modules for UDP sockets (both IPv4 and IPv6).

--- [Cf_poll]
    Change [p_idle_queue_] field of [Cf_poll.t] record so that the callback
    function in each entry of the queue takes a [Cf_tai64n.t] timestamp
    indicating the timestamp when the idle condition arrived.
    Fix [cycle] so that idle polls are processed even when no other polls
    are loaded.


===== Version 0.0 =====

This was the initial release of the library.  Major and minor version numbers
count upward from zero.  Major version numbers with a minor version number of
zero indicate the first release in a "stable" branch.  Non-zero minor version
numbers indicate "development" branches converging on the next stable release.
Patches to stable releases are numbered with a third level of numbering.


--j h woodyatt <jhw@wetware.com>

[-- Attachment #3: Type: text/plain, Size: 7 bytes --]

  
    

[-- Attachment #4: CHANGES iom-0.2 --]
[-- Type: application/octet-stream, Size: 2991 bytes --]

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

This file describes in technical detail the functional differences between
released versions of the library.


===== Version 0.2 =====

This release is a major refactoring of almost all of the interfaces and
implementations.  Basically, everything north of the underlying [Cf_gadget]
wrapper has been designed over from scratch.

The main reason for doing this is to leverage the knowledge gained from other
experimental projects that used the interfaces defined in the previous release.
The new interface should offer more opportunities for reuse and be more easily
adapted for new types of I/O requirements, e.g. UDP sockets, AF_LOCAL sockets,
multicast, etcetera.

Highlights of refactoring this release:

+ OCNAE Cf-0.7 is now required (for additions to [Cf_gadget] and other things).
+ Add new module [Iom_machine] to match the [Cf_machine] new with Cf-0.7.
+ Replace the [Iom_gadget.poll] function with a virtual subclass of
  [Iom_machine.state].
+ Redesigned interface to core reactors in [Iom_reactor] module.
+ New modules [Iom_file] and [Iom_socket] containing virtual classes for state
  machines that process more generalized I/O events.
+ Redesigned interface to TCP connection/listening reactors and SOCK_STREAM
  endpoint reactors.

Additional interfaces for UDP sockets, AF_LOCAL sockets and multicast, etc. are
deferred until the next minor release at the earliest.

===== Version 0.1 =====

Highlights of this release:

+ Rewrote the [Iom_sock_stream.endpoint] reactor to fix bugs (and hopefully
  improve performance in some edge cases).
+ More optional tests coded (but they're still suboptimal, and maybe buggy).

--- [Iom_sock_stream]
    Rewrote the [endpoint] reactor to use less consing, i.e. the state is now
    a couple of mutable objects derived from [Cf_poll.event].  Events are
    plumbed around the inside of the reactor in shorter paths.

--- [T_iom]
    Change to be compatible with cf-0.5 notion of IPv6 socket addresses, which
    now contain an int32 element for the scope identifier.

--- {New Tests}
    Added a couple of new programs which help me work out bugs.  I don't think
    these programs are really done, since they don't quite give me the control
    I need to be able to adequately test and benchmark the performance of code
    based on the [Iom] library.  I'll probably need to hammer on these for
    awhile before I have something to document.  In the meantime, consider them
    curiosities for your amusement.

===== Version 0.0 =====

This was the initial release of the library.  Major and minor version numbers
count upward from zero.  Major version numbers with a minor version number of
zero indicate the first release in a "stable" branch.  Non-zero minor version
numbers indicate "development" branches converging on the next stable release.
Patches to stable releases are numbered with a third level of numbering.


--j h woodyatt <jhw@wetware.com>
  san francisco, ca

[-- Attachment #5: Type: text/plain, Size: 106 bytes --]



-- 
j h woodyatt <jhw@wetware.com>
that's my village calling... no doubt, they want their idiot back.



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [ocnae-help] ANNOUNCE: OCaml NAE release cf-0.7 and iom-0.2
  2005-07-26  7:25 ANNOUNCE: OCaml NAE release cf-0.7 and iom-0.2 james woodyatt
@ 2005-07-26  7:38 ` james woodyatt
  0 siblings, 0 replies; 2+ messages in thread
From: james woodyatt @ 2005-07-26  7:38 UTC (permalink / raw)
  To: james woodyatt; +Cc: Ocaml Trade, OCNAE Help

On 26 Jul 2005, at 00:25, james woodyatt wrote:
>
> Today, the OCaml Network Application Environment (NAE) has released  
> maintenance updates of two of its published libraries.  As its  
> project page on SourceForge.Net says, OCaml NAE is "a collection of  
> Objective Caml libraries to support the development of concurrent,  
> single-threaded Internet application servers."

Oops.  Only one of those libraries, cf-0.7, is really in a  
"maintenance" mode.

The truth is the iom-0.2 library is still pretty experimental, and  
this release amounted to a major refactoring of the code.  My  
apologies for the mistake.


-- 
j h woodyatt <jhw@wetware.com>
that's my village calling... no doubt, they want their idiot back.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-07-26  7:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-07-26  7:25 ANNOUNCE: OCaml NAE release cf-0.7 and iom-0.2 james woodyatt
2005-07-26  7:38 ` [ocnae-help] " james woodyatt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).