[Rd] Possible changes to connections
Byron Ellis
byron.ellis at gmail.com
Fri Jun 1 09:42:43 CEST 2007
On 5/31/07, Bill Dunlap <bill at insightful.com> wrote:
> I like the idea of the connection being closed when there
> are no more references to it. I guess that means when the
> garbage collector notices it has been orphaned, which may
> take a while.
Although, playing devil's advocate, it Green Book connections do
follow the same pattern as the other resource allocation type,
graphics devices. Not that this should be taken as endorsement, I
think I would like to see graphics devices head in the direction of
being actual objects as well (and I think I would want with() to be
involved with that).
It would also be really nice if connections became more like graphics
devices in that new connections could be implemented from a package.
That would make, for example, implementing clipboard connections on OS
X do the Right Thing under X11 and the GUI.
CLIM-style event streams would also be nice, but is almost surely too
much to ask. :-)
>
> However, one of my longstanding complaints about connections
> in Splus and R may have a bearing here also. Currently, if you
> want to have your file opened in a particular way, say for
> only reading or for appending or in binary mode then you
> need to specify open=mode when calling file(). However that
> also tells it to actually open the file. I would prefer that
> there was a mode= argument to file that meant that when the
> file is eventually opened it would be opened with that mode.
> open= should be restricted to TRUE or FALSE, or IMO, be eliminated.
> (We have an open() function for that.) With the current system
> readLines(file(path))
> does not leave path open but
> readLines(file(path, "r"))
> does leave it open. E.g., using readLines(file(path))
> as Seth did appears to work fine:
> > system(paste("/usr/sbin/lsof -p", Sys.getpid(),"|grep /tmp/twolines.txt"))
> > readLines(file("/tmp/twolines.txt"))
> [1] "One," "two, and that is it."
> > system(paste("/usr/sbin/lsof -p", Sys.getpid(),"|grep /tmp/twolines.txt"))
> > # no lsof output means the file is not open
> but asking to have it opened in readonly and binary
> mode leaks a file descriptor:
> > system(paste("/usr/sbin/lsof -p", Sys.getpid(),"|grep /tmp/twolines.txt"))
> > readLines(file("/tmp/twolines.txt", open="rb"))
> [1] "One," "two, and that is it."
> > system(paste("/usr/sbin/lsof -p", Sys.getpid(),"|grep /tmp/twolines.txt"))
> R 16950 bill 3r REG 8,2 26 229597 /tmp/twolines.txt
> That difference sinces unnatural to me.
>
> Of course, we could just add the mode= argument and hope
> people started using it instead of open=.
Maybe the actual solution is actually two types of objects? An
abstract resource object that describes a potential connection and
then leave the connection object to active I/O streams?
>
> ----------------------------------------------------------------------------
> Bill Dunlap
> Insightful Corporation
> bill at insightful dot com
> 360-428-8146
>
> "All statements in this message represent the opinions of the author and do
> not necessarily reflect Insightful Corporation policy or position."
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
Byron Ellis (byron.ellis at gmail.com)
"Oook" -- The Librarian
More information about the R-devel
mailing list