I noticed last night that Phobos actually has all the machinations required for reading gzipped files, buried in etc.c.zlib. I've wanted a high-level D interface for reading and writing compressed files with an API similar to "normal" file I/O for a while. I'm thinking about what the easiest/best design would be. At a high level there are two designs:

1. Hack std.stdio.file to support gzipped formats. This would allow an identical interface for "normal" and compressed I/O. It would also allow reuse of things like ByLine. However, it would require major refactoring of File to decouple it from the C file I/O routines so that it could call either the C or GZip ones depending on how it's configured. Probably, it would make sense to make an interface that wraps I/O functions and make an instance for C and one for gzip, with bzip2 and other goodies possibly being added later.

2. Write something completely separate. This would keep std.stdio.File doing one thing well (wrapping C file I/O) but would be more of a PITA for the user and possibly result in code duplication.

I'd like to get some comments on what an appropriate API design and implementation for writing gzipped files would be. Two key requirements are that it must be as easy to use as std.stdio.File and it must be easy to extend to support other single-file compression formats like bz2.

Reply via email to