diff R/rdyncall/inst/doc/ANNOUNCEMENT.txt @ 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/inst/doc/ANNOUNCEMENT.txt	Thu Mar 19 22:26:28 2015 +0100
@@ -0,0 +1,284 @@
+Initial Announcement: Package rdyncall released on CRAN. (Version 0.7.3)
+
+Short Introduction
+------------------
+The package facilities dynamic R bindings to the C interface of some common 
+shared libraries and a flexible Foreign Function Interface for the 
+interoperability between R and C. 
+
+Since the initial presentation of the package at Use!R 2009, a number of
+improvements have been done to rdyncall, the low-level DynCall libraries
+and the build system for an official release on CRAN.
+
+Overview
+--------
+The package comprises a toolkit to work with C interfaces to native code from 
+within the dynamic R interpreter without the need for C wrapper compilation:
+
+  - Dynamic R bindings to some common C shared libraries, across platforms.
+  - Foreign Function Interface that supports almost all C arg/return types
+    and has built-in type-checking facility.
+  - Portable naming and loading of shared libraries across platforms.
+  - Handling of aggregate C struct and union data types.
+  - Wrapping of R functions as C callbacks.
+  - Binding of C functions to R in batches.
+
+The intended audience for this package are developers experienced with C, that
+
+ .. need complete R bindings of C libraries.
+ .. want to write cross-platform portable system-level code in R.
+ .. need a FFI that supports almost all C fundamental types for arguments 
+    and return types and thus does not need compilation of wrapper C code
+ .. want to work with C struct/union types directly in R
+ .. are interested in dynamic binding techniques between static and dynamic
+    languages and cross-platform binding strategies.
+
+
+Brief Tour 1/2: Dynamic R Bindings to C Libraries
+-------------------------------------------------
+
+The dynamic binding interface consists of a single function, similar to
+'library' or 'require':
+
+  > dynport(portname)
+
+portname refers to a 'DynPort' file name that represents an R binding to a
+common C interface and library.
+The function the above has the side effect of attaching a newly created R name 
+space, populated with thin R helper objects to C entities of the underlying 
+C library:
+
+  - call wrapper to C functions
+  - symbolic constants of C macros and enums,
+  - type information objects for C struct and union data types.
+
+The package contains a repository of the following DynPort files:
+
+  Port Name   | Description of C Shared Library/API
+  ------------+-------------------------------------------------
+  expat       | Expat XML Parser Library
+  GL          | OpenGL 1.1 API
+  GLU         | OpenGL Utility Library
+  SDL         | Simple DirectMedia Layer library        
+  SDL_image   | Loading of image files (png,jpeg..)
+  SDL_mixer   | Loading/Playing of ogg/mp3/mod music files.
+  SDL_ttf     | Loading/Rendering of True Type Fonts.
+  glew        | OpenGL Extension Wrangler (includes OpenGL 3.0)
+  gl3         | strict OpenGL 3 (untested)
+  R           | R shared library
+  ode         | Open Dynamics (Physics-) Engine (untested)
+  cuda        | NVIDIA Cuda (untested)
+  opencl      | OpenCL (untested)
+  stdio       | C Standard Library I/O Functions
+
+In order to use a DynPort on a host system, the shared C libraries 
+need to be installed first.
+
+See manual page on 'rdyncall-demos' (type ?'rdyncall-demos') for a detailed 
+description of the installation notes for several libraries the above,
+collected for a large range of operating-systems and OS distributions. 
+
+Since the rdyncall package is alredy ported across major R platforms, code
+that uses a DynPort can run cross-platform without compilation.
+
+Here is a small example for using the SDL and OpenGL for multimedia/3D:
+
+-- snip
+
+# load SDL and OpenGL bindings
+dynport(SDL)  
+dynport(GL)  
+
+# initialize video sub-system
+SDL_Init(SDL_INIT_VIDEO)
+
+# open double-buffered OpenGL window surface
+surface <- SDL_SetVideoMode(640,480,32,SDL_OPENGL+SDL_DOUBLEBUF)
+
+# print dimension by accessing fields external C pointer to struct SDL_Surface
+print( paste("dimenstion:", surface$w, "x", surface$h ))
+
+# clear buffer
+glClearColor(0.3,0.6,0.8,0)
+glClear(GL_COLOR_BUFFER_BIT)
+
+# update display
+SDL_GL_SwapBuffers()
+
+-- snap
+
+A more detailed version including user-interface handling is available
+in 'demo(SDL)'.
+
+
+Brief Tour 2/2: Alternative FFI via '.dyncall'
+----------------------------------------------
+
+The alternative foreign function interface offered by '.dyncal' has a similar 
+intend such as '.C'. It allows to call shared library functions directly from R,
+but without additional wrapper C code needed, because it supports almost all 
+fundamental C data types and uses a function type signature text specification
+for type-checking and flexible conversions between R and C values.
+
+The interface is as following:
+
+  > .dyncall(address, signature, ...)
+
+'signature' is a character string that encodes the arguments and return-type of 
+a C function. 
+Here is an example of C function from the OpenGL API:
+
+   void glClearColor(float red, float green, float blue, float alpha);
+
+one would specify the function type via "ffff)v" as type signature and 
+pass additional arguments for '...':
+
+  > .dyncall(addressOf_glClearColor, "ffff)v", 0.3,0.7,1,0)
+
+Support for pointers (low-level void and typed pointers to struct/union) and
+wrapping of R functions to first-level C function pointers is also available.
+
+-- snip
+
+# load C math library across major platforms (Windows,Mac OS X,Linux)
+mathlib <- dynfind(c("msvcrt","m","m.so.6"))
+
+# resolve symbol 'sqrt'
+x <- .dynsym(mathlib,"sqrt")
+
+# C function call 'double sqrt(double x)' with x=144
+.dyncall(x, "d)d", 144)
+
+# .dyncall uses complex mapping of types, same works with 'integer' argument:
+.dyncall(x, "d)d", 144L)
+
+-- snap
+
+
+Implementation Details
+----------------------
+
+This package contains low-level services related to the generic invocation
+of machine-code functions using official calling convention specifications 
+as the binary interface. A similar service exists for the oppositve direction 
+in order to write R functions and wrap them as first-level C function callback 
+pointers.
+
+The implementation is based on libraries from the DynCall Project that
+implement a small amount of code in Assembly and have to play closely 
+together with the calling conventions of various processor-architectures and 
+platforms.
+The implementation can be tricky has to be done on a calling-convention
+basis. The efforts legitimate this non-portsble approach due to a 
+very small code size and a generic machine-call solution designed for
+dynamic interpreters. (total size of shared lib object in rdyncall is ~60kb )
+
+
+Portability and Platforms
+-------------------------
+
+A large set of platforms and calling conventions are already supported and a 
+suite of testing tools ensure a stable implementation at low-level.
+
+Processor-Architectures:
+- Intel i386 32-bit and AMD 64-bit Platforms
+- PowerPC 32-bit (support for callbacks on System V systems not yet implemented)
+- ARM 32-bit (with support for Thumb)
+- MIPS 32- and 64-bit (support for callbacks not yet implemented)
+- SPARC 32-bit and 64-bit (support for callbacks not yet implemented)
+
+The DynCall libraries are tested on Linux, Mac OS X, Windows, BSD derivates,
+Solaris and more exotic platforms such as game consoles, Plan9, Haiku and Minix.
+The R Package has been tested on several major 32- and 64-bit R platforms
+including Windows 32/64-bit, Linux (i386,amd64,ppc,arm), NetBSD (i386,amd64),
+Solaris (i386,amd64).
+
+As of this release, no support for callbacks is available on MIPS or SPARC.
+Callbacks on PowerPC 32-bit for Mac OS X work fine, for other
+ELF/System V-based PowerPC systems, callbacks are not yet implemented.
+
+
+Known Bugs
+----------
+
+* PowerPC/Mac OS X 10.4: Building Universal Binaries are broken.. in particular 
+  the as for i386 assembler. 
+  Workaround for PowerPC users: install with "--no-multiarch" or use prebuilt 
+  binaries built on OS X >= 10.5.
+
+* SPARC Assembly sources are currently implemented for GNU assembler and do 
+  not assemble using the 'fbe' Assembler tool on Solaris. 
+
+
+More Information
+----------------
+
+More demos and examples are in the package.
+A 20-page vignette with the title "Foreign Library Interface" is available via
+  > vignette("FLI")
+
+A cross-platform audio/visual OpenGL-based demo-scene production 
+written in 100% pure R is available here:
+
+  http://dyncall.org/demos/soulsalicious/
+
+A video of demo is also at the website.
+
+
+The website of the DynCall Project is at
+
+  http://dyncall.org/
+
+
+Help and Feedback
+-----------------
+The package contains new methods for dynamic binding of native code to R
+that were designed to work cross-platform. Thus the package required intensive 
+testing on a large range of processor/OS/tool-chain combinations.
+It was (and still is!) also very helpful to run tests on different 
+'distributions' of the same OS for checking e.g. the search algorithm for
+locating shared libraries by a short name across operating-systems 
+(see '?dynfind' for details on this).
+
+I am very thankful for any feedback including bug-reports, success and 
+failure stories or ideas of improvements. If you feel that an important 
+architecture, platform or build-tool is missing here please let me know too.
+
+The DynCall authors appreciate any support for porting the DynCall libraries 
+and the R package e.g. remote development accounts, qemu/gxemul images, 
+hardware. In particular we are currently looking for the following 
+arch/os/compilers environment for porting the DynCall libraries and rdyncall:
+
+  - Sparc/Solaris/SunPro
+  - PowerPC/AIX/XL C 
+  - MIPS/IRIX/MIPSpro
+
+If you can help us out, please get in contact us.
+
+
+ChangeLog
+---------
+
+0.7.3: [2011-07-19] Added vignette, new ports, new tool-chain an fixes for bugs
+ o bugfix for Fedora/x64: added search path 'lib64' folder for 'dynfind'.
+ o added support for Sun make, DynCall uses Makefile.embedded.
+ o added sparc and sparc64 support using gcc tool-chain.
+ o added support for amd64 using solaris tool-chain.
+ o added vignette "foreign library interface".
+ o bugfix for solaris/x64: added search path 'amd64' folder for 'dynfind'.
+ o bugfix in examples for libm using 'm.so.6' besides 'm' on unix 
+   (needed by debian 6 sid unstable)
+
+0.7.2: [2011-04-27] Minor fixes 
+ o added win64/mingw64 support.
+
+0.7.1: [2011-04-26] Minor fixes      
+ o minor Makevars fix for parallel builds.
+
+0.7.0: [2011-04-20] Initial Release 
+ o first upload to CRAN.
+
+
+enjoy,
+- Daniel
+