transition: prefix_directives
[homepage.git] / blog / posts / 2008 / 11 / ocaml_batteries_gzip.mdwn
1 # OCaml batteries, now with GZip-ed channels
2
3 This week-end I've spent some time to kick-start my hacking onto
4 [OCaml Batteries Included](http://batteries.forge.ocamlcore.org/)
5 (yes, it deserves a proper website).
6
7 [[Last_time_I_wrote_about_it|10/ocaml_batteries_included_debian_packages]]
8 was with my package maintainer hat on. In the meantime I've got
9 trapped`^W`involved with upstream development as well, after having
10 been so fool to propose integration with [Batteries' I/O
11 channels](http://batteries.forge.ocamlcore.org/doc.preview/batteries-alpha1/batteries/html/api/System.IO.html)
12 of compression/decompression libraries.
13
14 Well, here are the first tiny teeny results:
15
16         # open Batteries.System;;
17         # let i = File.open_in "/tmp/fstab.gz";;
18         val i : InnerIO.input = <abstr>
19         # let i2 = GZip.uncompress i;;
20         val i2 : InnerIO.input = <abstr>
21         # IO.read_line i2;;
22         - : string = "# /etc/fstab: static file system information."
23         # IO.read_line i2;;
24         - : string = "#"
25         # (* same goes for output of course *)
26
27 i.e., no matter how you created an I/O channel (and with Batteries you
28 can create it out of *a lot* of entities), you can apply a `gzip`
29 compress/decompress filter.
30
31 The underlying library is
32 [Camlzip](http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=84), which
33 also sets a precedent on how to integrate external libraries into
34 Batteries properly.
35
36 The code is not released yet (hey, Batteries is still alpha!), but is
37 available from the [Git
38 repo](http://git.ocamlcore.org/cgi-bin/gitweb.cgi?p=batteries/batteries.git;a=summary),
39 ([zack/compress
40 branch](http://git.ocamlcore.org/cgi-bin/gitweb.cgi?p=batteries/batteries.git;a=shortlog;h=refs/heads/zack/compress)).
41
42 Next milestone: `bzip2` ... of course with the same interface, so that
43 changing (de)compressor will be as easy as `s/GZip/BZip2/g` in the
44 code above.  `tar` and `zip` will come next (but with different
45 interfaces, as old *nix jokes tell us, compressing and archiving are
46 different tasks).
47
48 [[!tag lang/english planet/debian ocaml batteries]]