[Caml-list] Wink releases Hydro - an ICE implementation

Skip to first unread message

Gerd Stolpmann

Nov 27, 2007, 4:50:56 PM11/27/07
to caml-list, Mika Illouz
Hi list,

Wink Technologies, Inc., the makers of the soon-to-be-famous people
search engine (http://wink.com), have just released another OCaml
library, this time for using the ICE protocol.

This is really an exciting contribution, as it directly addresses the
problem of language interoperability. Hydro opens the door to use O'Caml
besides other languages in the same company! We at Wink use Hydro
already for communication between O'Caml, C++, and Java.

Note that we don't have any relationship with ZeroC, the inventors of

>From the README:

Hydro is an independent implementation of ICE, the object-oriented RPC
protocol by ZeroC, for the O'Caml programming language. This is an
early, not yet complete release, but the code is already stable and
usable. For the restrictions of this release, see below.

Hydro (like ICE) allows you to bridge language barriers by letting
components written in different programming languages communicate with
each other. ZeroC's ICE product currently includes implementations for C
++, Java, C#, Python, Ruby, VB, and PHP. Hydro adds support for O'Caml.
The ICE protocol is rich enough to make the representation of the data
to communicate easy and convenient to use, and adopts an object-oriented
type system. ZeroC sees ICE as a superior successor to CORBA.

Hydro includes a runtime, and a generator called hydrogen. The runtime
is fully asynchronous, based on Ocamlnet's event queues. The generator
is used to create a thin layer on top of the runtime that maps abstract
Hydro types to specific O'Caml types. The Hydro engine therefore
appears to the programmer as if it was typed using the input IDL file.
Unlike the generators shipped by ZeroC, hydrogen does not create
marshalling code -- we see this as the task of the runtime and not of
the language mapping layer. Because of this design decision we have high
confidence in the correctness of the generator.

Although we want Hydro to be an implementation whose protocol is fully
compatible with ICE and that can process all its IDL files, we take some
freedom to deviate from what is described in ZeroC's "ICE manual". ICE
was designed with mainstream object-oriented languages in mind, and
therefore lacks many of the advanced constructs available in O'Caml
(variants, for example). Conversely, ICE includes constructs such as
hierarchical exceptions and downcasts which do not exist in O'Caml (and
for good reason!). To deal with the "impedance mismatch," we
implemented emulations for these concepts. On the other hand, O'Caml
offers advanced features which ought to be exploited by a good
implementation. For example, in O'Caml, asynchronous networking code is
quite natural, so we have chosen to make this the default style. So
while Hydro is quite straightforward, the O'Caml programmer should not
expect a design which is a perfect one-to-one translation of what ZeroC

*** Features ***

* Support for clients and proxies
* The whole ICE type system is implemented, and can be marshalled.
This includes graphs of objects.
* The whole ICE type system can be mapped to O'Caml types. The
mapping is quite flexible and configurable, e.g. you can choose
whether you prefer arrays or lists as representations of ICE
sequences. Where necessary, the properties of the ICE type
system are emulated. For example, hydrogen generates special
code for downcasts of objects.
* IDL files are dynamically represented at runtime
* The runtime supports both asynchronous and synchronous method
* The runtime can be integrated with other libraries that also
base on Ocamlnet's event queues, e.g. with Ocamlnet's HTTP
clients, or SunRPC.
* Fully automatic connection management
* The generated code is properly indented
* Liberal license conditions

*** Restrictions ***

* Hydro does not support servers for now (this will follow soon,
and is now priority #1). The support for clients is quite
* Hydro only supports twoway calls over TCP for now
* Hydro does not support separate compilation (i.e. you cannot
split an .ice file into several parts, hydrogen every part
alone, and then merge them later). This is a fundamental
restriction we'll never be able to improve.
* There is no support for Slice checksums
* There is no support for checked proxy casts (to will follow
* There is no support for configuration files
* There is no support for stringified proxies and endpoints
* The runtime and the generated language mapping layer are both
reentrant. However, there is no specific support for
multi-threaded programming beyond this
* There is no support for compression
* Except of calling the locator service of IceGrid, there is no
support for add-on technologies like IceGrid, Freeze, etc. We
have some interest in IceGrid, so this may also follow at some

[... rest of README omitted...]

Download, and documentation

Download link: http://oss.wink.com/hydro/

Manual: http://oss.wink.com/hydro/hydro-0.5/doc/html/index.html

A GODI package godi-hydro exists.

For general information about ICE, see ZeroC's homepage:

Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany
ge...@gerd-stolpmann.de http://www.gerd-stolpmann.de
Phone: +49-6151-153855 Fax: +49-6151-997714

Caml-list mailing list. Subscription management:
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Erik de Castro Lopo

Nov 27, 2007, 5:38:23 PM11/27/07
to caml...@inria.fr, Mika Illouz
Gerd Stolpmann wrote:

> Wink Technologies, Inc., the makers of the soon-to-be-famous people
> search engine (http://wink.com), have just released another OCaml
> library, this time for using the ICE protocol.


I had a look at your Netdns module and ended snarfing the file
netdns_lexer.mll and netdns_message.ml for a project I'm working
on (I took the text from your LICENSE file and pasted it at the
top of each file). Constructing and parsing DNS messages with
these two files is a pleasure. Thanks.

Erik de Castro Lopo
"I wouldn't be surprised to see "Duke Nukem Forever" get
released before Perl 6." -- Rob on the LAU mailing list

Reply all
Reply to author
0 new messages