Mercurial > pub > dyncall > bindings
diff R/rdyncall/man/rdyncall.Rd @ 0:0cfcc391201f
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:26:28 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/R/rdyncall/man/rdyncall.Rd Thu Mar 19 22:26:28 2015 +0100 @@ -0,0 +1,161 @@ +\name{rdyncall} +\docType{package} +\alias{rdyncall} +\alias{rdyncall-package} +\title{Improved Foreign Function Interface (FFI) and Dynamic Bindings to C Libraries (e.g. OpenGL) } +\description{The package provides a cross-platform framework for dynamic binding of + C libraries using a flexible Foreign Function Interface (FFI). + The FFI supports almost all fundamental C types, multiple calling conventions, + symbolic access to foreign C struct/union data types and wrapping of R functions + as C callback function pointers. + Dynamic bindings to shared C libraries are data-driven by cross-platform binding specification + using a compact plain text format ; an initial repository of bindings to a couple of + common C libraries (OpenGL, SDL, Expat, glew, CUDA, OpenCL, ODE, R) comes with the package. + The package includes a variety of technology demos and OS-specific notes for installation of shared libraries. +} +\details{ +\pkg{rdyncall} offers a stack of interoperability technologies for working +with foreign compiled languages using cross-platform portable abstraction +methods. + +For R application development, the package facilitates direct access from R +to the C Application Programming Interface (API) of common libraries. +This enables a new style of development: R applications can use +low-level services of portable C libraries. +System-level code can be implemented in R without leaving the language. +C APIs can be explored from within the R interpreter. +Moving the R code from one platform to the other does not involve +recompilation. +Ofcourse, the run-time libraries need to be installed using a standard +procedure of the target Operating-System Distribution. +See \link{rdyncall-demos} for details on this. + +For R core development and research, the package provides an improved Foreign +Function Interface (FFI) that can be used to call arbitrary +foreign precompiled C code without the need for additional +compilation of wrapper code. The back-end library is extendable with new +calling conventions (such as Fortran,Pascal,COM,etc.. - which has not been +the focus as of this release, but might be supported officially in the near +futurue). +Basic type-safety checks for argument passing and framework support for +working with foreign C data types such as pointers, arrays, structs and +wrapping of R functions into first-level C callback function pointers +round up this framework. +} +\section{Overview}{ +\itemize{ +\item Flexible FFI with support for almost all C types, type-safety checks and multiple calling conventions. See \code{\link{.dyncall}}. +\item Loading of shared libraries with \emph{automatic unload management} and using direct access to OS linker. See \code{\link{.dynload}}. +\item Cross-platform naming and loading of shared libraries. See \code{\link{dynfind}}. +\item Binding C library functions via thin call wrappers. See \code{\link{dynbind}}. +\item Handling of foreign C pointer, array and struct/union data types. See \code{\link{packing}} and \code{\link{struct}}. +\item Dynamic wrapping of R functions as C function pointers to be used in C callbacks. See \code{\link{new.callback}}. +\item Dynamic bindings to standard and common C libraries and APIs (functions, variables, macro constants, enums, struct and union types). See \code{\link{dynport}}. +} +} +\section{Getting Started}{ +Several demos ranging from simple FFI calls to the C standard math library up to more complex 3D OpenGL/SDL Applications are available. +See \code{demos(package="rdyncall")} for an overview. +Some demos require shared C libraries to be installed in the system. Please read \link{rdyncall-demos} for details. +} +\section{Supported Platforms}{ +The low-level implementation is mainly based on libraries from the DynCall +Project (\url{http://dyncall.org}). The library suite is distributed +as part of the package source tree. + +The dyncall and dyncallback libraries implement generic low-level services +with the help of a small amount of hand-written assembly code and +careful modeling of the target machine's calling sequence +for each platform to support. + +As of version 0.6, the following processor architectures are supported: + +\itemize{ +\item Intel i386 32-bit and AMD 64-bit Platforms +\item ARM 32-bit (OABI, EABI and ARMHF ABI with support for Thumb) +\item PowerPC 32-bit (support for callbacks not implemented for Linux/BSD) +\item MIPS 32- and 64-bit (support for callbacks not yet implemented) +\item SPARC 32- and 64-bit (support for callbacks not yet implemented) +} + +The DynCall libraries are tested on Linux, Mac OS X, Windows, BSD derivates +and more exotic platforms such as game consoles and Plan9. +Please see the details on portability for \link{dyncall}, \link{dyncallback} and \link{dynload} +and the official DynCall manual for full details of the back-end. +The R Package has been tested on several major R platforms. +The following gives a list of comments on platforms about the status of this package. + +\tabular{l}{ +\cr +Linux Debian 4/ppc32 , R-2.4.0 : ok, but no callbacks. \cr +Linux Debian 5/arm , R-2.7.0 : ok, SDL not tested. \cr +Linux Debian 6/x86 , R-2.12.2: ok. \cr +Linux Debian 6/x64 , R-2.12.2: ok. \cr +Linux Ubuntu 10/armv7, R-2.14 : ok. \cr +Linux Fedora 14/x86 : ok. \cr +Linux Ubuntu 12/i386 , R-2.15.1: ok. \cr +Mac OS X 10.4/ppc , R-2.10.0: ok. \cr +Mac OS X 10.6/x86 , R-2.12.2: ok. \cr +Mac OS X 10.6/x64 , R-2.12.2: ok. \cr +Mac OS X 10.7/x64 , R-2.15.1: ok. \cr +NetBSD 5.0/x86 : ok. \cr +NetBSD 5.1/x64 : ok. \cr +OpenBSD 4.8/x64 , R-2.7.0 : SDL failed. \cr +Windows XP/x86 , R-2.12.2: ok. \cr +Windows 7/x86 , R-2.12.2: ok. \cr +Windows 7/x64 , R-2.12.2: ok, use correct 64-bit SDL DLL, SDL extension not tested - see \link{rdyncall-demos}) \cr +FreeBSD 8.2/x86 : build ok, no tests made for X11. \cr +} +} +\references{ + Adler, D. (2012) \dQuote{Foreign Library Interface}, \emph{The R Journal}, \bold{4(1)}, 30--40, June 2012. + \url{http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Adler.pdf} + + Adler, D., Philipp, T. (2008) \emph{DynCall Project}. + \url{http://dyncall.org} +} +\examples{ +\donttest{ +# multimedia example +# load dynports for OpenGL, Simple DirectMedia library +# globals: +surface <- NULL +# init SDL and OpenGL +init <- function() +{ + dynport(SDL) + dynport(GL) + if ( SDL_Init(SDL_INIT_VIDEO) != 0 ) stop("SDL_Init failed") + surface <<- SDL_SetVideoMode(320,240,32,SDL_DOUBLEBUF+SDL_OPENGL) + cat("surface dimension:", surface$w, "x",surface$h,sep="") +} +# draw blue screen +updateSurface <- function(t) +{ + glClearColor(0,0,t \%\% 1,0) + glClear(GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT) + SDL_GL_SwapBuffers() +} +# wait till close +mainloop <- function() +{ + quit <- FALSE + evt <- new.struct(SDL_Event) + base <- SDL_GetTicks() / 1000 + t <- 0 + while(!quit) { + updateSurface(t) + while(SDL_PollEvent(evt)) { + if ( evt$type == SDL_QUIT ) quit <- TRUE + } + now <- SDL_GetTicks() / 1000 + t <- now - base + } +} +init() +mainloop() +} +} +\keyword{programming} +\keyword{interface} +