English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
Help interfacing with C
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2006-08-18 (22:29)
From: Bardur Arantsson <spam@s...>
Subject: Re: Help interfacing with C
Nathaniel Gray wrote:
> On 8/16/06, Bardur Arantsson <spam@scientician.net> wrote:
>> Nathaniel Gray wrote:
>> > Hi folks,
>> [--snip--]
> Thanks, but this doesn't really help.  Perhaps I should say what I'm
> trying to accomplish instead of trying to let the types speak for me.
> The point is that when you select on a list of file descriptors
> there's a very good chance that you don't *only* care that file
> descriptor f is ready, you also have some ocaml data structure
> associated with f that you want to use with it in some way.  For
> example, you probably have a string to write or a buffer to read into.
> The current API is sort of a minimal translation of the select system
> call to OCaml, which is a good starting point, but not great IMHO.  In
> order to match up each file descriptor to its data you have to scan
> the output fd list yet again, after it's already been done once at the
> C level, and since you don't know how/if it's sorted you end up with
> unsatisfying time complexity for the whole thing.  It's not critical,
> since the lists are small, but it hardly brings a smile to your face.
> On the other hand, imagine a select2 that takes lists of (fd, 'a)
> pairs and returns the same.  The results become incredibly easy to
> handle, with no scanning necessary.  You probably just List.iter a
> simple read/write function over the result and you're done.

Have you tried to benchmark the naive implementation(*) versus a "bare" 
Unix.select? I shouldn't think you a little bit extra of scanning the 
list which is O(n) in the number of _active_ file descriptors matters 
with all the O(MAX_FD) stuff that's going on in select(). I would expect 
most of the time to be spent doing the actual system call.

(*) That is, an implementation which puts (fd, associated value) in a 
hashtable indexed by the file_descr and does the scanning after doing 
the Unix.select.


Bardur Arantsson

- This is supposed to be a happy occasion. Let's not *bicker* and
*argue* about who killed who.
                                 'Monty Python and the Holy Grail'