Re: R-beta: WISH: For dyn.load()ing, I'd like is.loaded(.) , symbol.C, symbol.For

Luke Tierney (luke@stat.umn.edu)
Thu, 29 May 1997 10:53:59 -0500 (CDT)


From: Luke Tierney <luke@stat.umn.edu>
Message-Id: <9705291554.AA09979@nokomis.stat.umn.edu>
Subject: Re: R-beta: WISH: For dyn.load()ing, I'd like   is.loaded(.) , symbol.C, symbol.For
To: maechler@stat.math.ethz.ch
Date: Thu, 29 May 1997 10:53:59 -0500 (CDT)
In-Reply-To: <9705290829.AA03384@> from "Martin Maechler" at May 29, 97 10:29:37 am

Martin Maechler wrote:
> 
> In S(plus), I can write functions using code fragments like
> 
> 	if(!is.loaded(symbol.C("my_C_fun")))
> 		dyn.load("......../my_C_fun.o")
> 	r <- .C("my_C_fun",
> 		x = x,
> 		n = n, 
> 		...
> 		)
> 
> 
> which I would like to have in R, too.
> 

I'm a bit worried that this might impose too many restrictions on how
dynamic loading is implemented. In particular it sort of assumes the S
model where all symbols in dynamically loaded code are entered
automatically in one global name space. With shared libraries a
mechanism that allows you to explicitly import foo from libA and bar
from libB may make more sense. The S design dates back to well before
shared libraries became commonly available; before making a commitment
to support the existing design it would be a good idea to consider all
the options in light of what is supported by ELF shared libraries, Mac
shared libraries and Windows DLL's and what seems most natural in
terms of the common facilities they provide.

Overall, I am not that thrilled with the S design in which you get a
function pointer along with all the rope you need to hang yourself.  I
would prefer a scheme where you need to write a declarative interface
stub that says something like

	myCfun<-make.Cfun("foo","libA", x="double *", n="int *", ...)

which then goes away and generates the appropriate function with all
the right as.whatever's needed to reduce the chance of nuking yourself
if you don't get the arguments right (for the truly brave or those
desparate for speed the low level implementation mechanism could be
exposed too, but at least you wouldn't have to work at the raw
function pointer level unless you choose to).

As far as deciding whether something is loaded or needs to be loaded,
I believe that would usually be much better handled by a
module/dependency mechanism rather than by explicit loading commands
in user code.

Just my 2c worth.

luke


> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-help-request@stat.math.ethz.ch
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> 


-- 
Luke Tierney
University of Minnesota                      Phone:           612-625-7843
School of Statistics                         Fax:             612-624-8868
206 Church Street                            email:      luke@stat.umn.edu
Minneapolis, MN 55455 USA                    WWW:  http://www.stat.umn.edu
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request@stat.math.ethz.ch
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=