On Sunday, 29 December 2013 at 16:06:32 UTC, Andrei Alexandrescu wrote:
I think we (and others) have done a fine job so far at abstracting away e.g. very different ways of figuring whether an entry is a directory on Windows vs. Posix. Now we're to throw all that away and go back to silex stones and bear claws?

I am not telling anyone what to do. I am saying what I would prefer. I would prefer a standard low-level layer and a flexible high-level layer.

Yah, it would be great if that were awfully more detailed :o).

I am not coming with a finished design, but I think it is doable.

That's exactly what they said when they designed iostreams.

Buffered i/o is another issue because you either have a high interface-call/system call ratio, or make too many system-calls.

Again I think we'd need a ton of detail here to even assess whether this has merit. So far it's an interesting brain dump.

Ok, let me give you some motivation:

Old software bases tend to evolve and make assumptions that do not hold over time. I recently ported phpbb to App Engine, which provides a read-only filesystem. Phpbb used the following:

1. templates: on filesystem, or if modified in mysql
2. avatar images: on filesystem
3. processed templates: cached on filesystem

In order to port I had to create my own filesystem abstraction and map processed templates onto memcache and avatar images onto Cloud Storage. Basically sifting through the code and hoping I didn't overlook anything.

This file-system port would have been trivial if phpbb had instantiated separate "virtual filesystems" for templates, avatars and processed templates.

I could then have specified that the avatar-filesystem should default to MIME-type 'image/jpeg' which would let me serve the images directly from Cloud Storage (through Google's efficient infrastructure) with little extra work (low chance of creating bugs).

In most cases you don't need to know what filesystem different entities reside on. When moving into the cloud you most likely will gain access to a diverse set of storage mechanisms that are optimized for different usage patterns (like on-the-fly rescaling of images, direct http interfaces, memcaches, redundante high-availability storage etc).

Reply via email to