From: Chris Vine <chris@cvine.freeserve.co.uk>
To: Andy Wingo <wingo@pobox.com>
Cc: "Ludovic Courtès" <ludo@gnu.org>, guile-user <guile-user@gnu.org>,
guile-devel <guile-devel@gnu.org>
Subject: Re: anyone define port types?
Date: Sun, 12 Jun 2016 09:25:13 +0100 [thread overview]
Message-ID: <20160612092513.3eb1c8a3@laptop.homenet> (raw)
In-Reply-To: <87bn37wtf2.fsf@pobox.com>
On Sat, 11 Jun 2016 19:02:09 +0200
Andy Wingo <wingo@pobox.com> wrote:
> On Thu 14 Apr 2016 16:08, ludo@gnu.org (Ludovic Courtès) writes:
>
> > Andy Wingo <wingo@pobox.com> skribis:
> >
> >> I am working on improving our port implementation to take
> >> advantage of the opportunity to break ABI in 2.2. I am wondering
> >> how much I can break C API as well -- there are some changes that
> >> would allow better user-space threading
> >> (e.g.
> >> http://thread.gmane.org/gmane.lisp.guile.devel/14158/focus=15463
> >> or Chris Webber's 8sync). But those changes would require some
> >> incompatible changes to the C API related to port internals. This
> >> API is pretty much only used when implementing port types. So, I
> >> would like to collect a list of people that implement their own
> >> ports :) I know Guile-GNOME does it for GNOME-VFS, though
> >> GNOME-VFS is super-old at this point... Anyway. Looking forward
> >> to your links :)
> >
> > What do you conclude from this poll? :-)
> >
> > From what you’ve seen, how do you think current uses would impact
> > the refactoring work (and vice versa)?
>
> Sorry for the late response :)
>
> My conclusion is that we should not change anything about the Scheme
> interface, but that with close communication with C port hackers, we
> can feel OK about changing the C interface to make it both more
> simple and more expressive. Since libguile is parallel-installable
> and you have to select the version of your Guile when you build your
> project, of course people will be able to update / upgrade when they
> choose to.
>
> I put in a lot of effort to the documentation; check it out:
>
> http://www.gnu.org/software/guile/docs/master/guile.html/Input-and-Output.html
The documentation indicates that with the C ports implementation in
guile-2.2, reads will block on non-blocking file descriptors.
This will stop the approach to asynchronicity used in 8sync and
guile-a-sync (the latter of which I have written) from working
correctly with sockets on linux operating systems, because at present
both of these use guile's wrapper for select. This arises because with
linux you can get spurious wake-ups with select() or poll() on sockets,
whereby a read on a file descriptor for a socket can block even though
the descriptor is reported by select() or poll() as ready for
reading[1].
Presumably suspendable ports will use some method to work around
unwanted blocking arising from spurious select()/poll() wake-ups.
However, to cater for other asynchronous implementations of file
watches, would it be possible to provide a configurable option either
to retain the guile-2.0 behaviour in such cases (which is to throw a
system-error with errno set to EAGAIN or EWOULDBLOCK), or to provide a
non-blocking alternative whereby the read operation would, instead of
blocking, return some special value such as an EAGAIN symbol? Either
would enable user code then to resume to its prompt and let other code
execute.
Chris
[1] The man page for select states "Under Linux, select() may report a
socket file descriptor as 'ready for reading', while nevertheless a
subsequent read blocks. This could for example happen when data has
arrived but upon examination has wrong checksum and is discarded. There
may be other circumstances in which a file descriptor is spuriously
reported as ready. Thus it may be safer to use O_NONBLOCK on sockets
that should not block."
next prev parent reply other threads:[~2016-06-12 8:25 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-28 19:04 anyone define port types? Andy Wingo
2016-03-28 23:53 ` Matt Wette
2016-04-05 14:06 ` Mark H Weaver
2016-04-05 23:55 ` Matt Wette
2016-06-11 16:50 ` Andy Wingo
2016-03-29 7:58 ` tomas
2016-03-29 8:52 ` Nala Ginrut
2016-03-30 6:29 ` Panicz Maciej Godek
2016-03-30 11:18 ` Jan Nieuwenhuizen
2016-03-30 17:17 ` Panicz Maciej Godek
2016-03-30 17:53 ` Marko Rauhamaa
2016-03-30 19:02 ` Panicz Maciej Godek
2016-03-30 19:57 ` Marko Rauhamaa
2016-03-31 16:11 ` Barry Fishman
2016-03-31 19:28 ` Marko Rauhamaa
2016-03-30 19:43 ` Jan Wedekind
2016-03-30 20:07 ` Marko Rauhamaa
2016-03-30 21:01 ` Jan Wedekind
2016-03-30 22:44 ` Marko Rauhamaa
2016-03-31 20:42 ` Jan Wedekind
2016-03-31 22:28 ` Marko Rauhamaa
2016-06-11 16:53 ` Andy Wingo
2016-04-01 14:38 ` Ludovic Courtès
2016-06-11 16:57 ` Andy Wingo
2016-04-14 14:08 ` Ludovic Courtès
2016-06-11 17:02 ` Andy Wingo
2016-06-12 8:25 ` Chris Vine [this message]
2016-06-19 9:13 ` Andy Wingo
2016-06-19 9:55 ` Marko Rauhamaa
2016-06-19 15:27 ` Andy Wingo
2016-06-19 15:33 ` Chris Vine
2016-06-19 17:48 ` Andy Wingo
2016-06-19 20:09 ` Chris Vine
2016-06-20 3:38 ` William ML Leslie
2016-06-20 6:45 ` Chris Vine
2016-06-20 7:34 ` Andy Wingo
2016-06-20 9:01 ` Chris Vine
2016-06-22 22:44 ` Chris Vine
2016-06-23 7:36 ` Andy Wingo
2016-06-23 8:56 ` Andy Wingo
2016-06-23 9:24 ` Chris Vine
2016-06-23 9:50 ` Marko Rauhamaa
2016-06-23 10:43 ` Andy Wingo
2016-06-23 11:49 ` William ML Leslie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160612092513.3eb1c8a3@laptop.homenet \
--to=chris@cvine.freeserve.co.uk \
--cc=guile-devel@gnu.org \
--cc=guile-user@gnu.org \
--cc=ludo@gnu.org \
--cc=wingo@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).