the rdyncall package A n i m p r o v e d f o r e i g n f u n c t - - PowerPoint PPT Presentation

the rdyncall package
SMART_READER_LITE
LIVE PREVIEW

the rdyncall package A n i m p r o v e d f o r e i g n f u n c t - - PowerPoint PPT Presentation

the rdyncall package A n i m p r o v e d f o r e i g n f u n c t i o n i n t e r f a c e f o r R Daniel Adler Tassilo Philipp Georg-August Potion Studios Universitt Gttingen Game Development useR! 2009, 9th of July,


slide-1
SLIDE 1

the rdyncall package

A n i m p r o v e d f o r e i g n f u n c t i o n i n t e r f a c e f o r R

Daniel Adler Tassilo Philipp

Georg-August Universität Göttingen Potion Studios Game Development useR! 2009, 9th of July, Rennes, France

slide-2
SLIDE 2

Program of this talk Binding Binary Functionality Example: Binding R with libSDL using ".C(..)" Improvements using ".dyncall(..)" Implementation: the dyncall C library Overview of the rdyncall R Package 'Dynports' concept Availability

slide-3
SLIDE 3

Binding Binary Functionality

slide-4
SLIDE 4

Binding Binary Functionality Compiled Libraries Dynamic Languages

slide-5
SLIDE 5

Binding Binary Functionality Compiled Libraries Dynamic Languages

slide-6
SLIDE 6

Binding Binary Functionality Compiled Libraries Dynamic Languages

Simple Directmedia Layer

SDL

slide-7
SLIDE 7

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

slide-8
SLIDE 8

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

slide-9
SLIDE 9

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

C glew C C C

slide-10
SLIDE 10

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

C glew C C C

slide-11
SLIDE 11

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

C glew C C C

slide-12
SLIDE 12

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

C glew C C C

slide-13
SLIDE 13

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

C glew C C C C

slide-14
SLIDE 14

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

C glew C C C C

slide-15
SLIDE 15

Binding Binary Functionality Compiled Libraries Dynamic Languages

C

Simple Directmedia Layer

SDL

C glew C C C C Call(args) Results

Foreign Function Interface

slide-16
SLIDE 16

Binding libSDL using ".C(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-17
SLIDE 17

Binding libSDL using ".C(..)"

R calls C: surface <- .C(funaddr, 640L, 480L, 32L, 0L) C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-18
SLIDE 18

Binding libSDL using ".C(..)"

R calls C: surface <- .C(funaddr, 640L, 480L, 32L, 0L)

fails

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-19
SLIDE 19

Binding libSDL using ".C(..)"

R calls C: surface <- .C(funaddr, 640L, 480L, 32L, 0L)

Limitations:

Expected C Interface: void SDL_SetVideoMode(int* w, int* h, int* bpp, int* flags);

R Vector mode C Pointer Type

logical int* integer int* double double* character char** raw unsigned char*

R to C mapping:

fails

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-20
SLIDE 20

Binding libSDL using ".C(..)"

R calls C: surface <- .C(funaddr, 640L, 480L, 32L, 0L)

no scalar types Limitations:

Expected C Interface: void SDL_SetVideoMode(int* w, int* h, int* bpp, int* flags);

R Vector mode C Pointer Type

logical int* integer int* double double* character char** raw unsigned char*

R to C mapping:

fails

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-21
SLIDE 21

Binding libSDL using ".C(..)"

R calls C: surface <- .C(funaddr, 640L, 480L, 32L, 0L)

no scalar types no return types Limitations:

Expected C Interface: void SDL_SetVideoMode(int* w, int* h, int* bpp, int* flags);

R Vector mode C Pointer Type

logical int* integer int* double double* character char** raw unsigned char*

R to C mapping:

fails

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-22
SLIDE 22

Binding libSDL using ".C(..)"

R calls C: surface <- .C(funaddr, 640L, 480L, 32L, 0L)

no scalar types no return types

  • ne-to-one mapping

Limitations:

Expected C Interface: void SDL_SetVideoMode(int* w, int* h, int* bpp, int* flags);

R Vector mode C Pointer Type

logical int* integer int* double double* character char** raw unsigned char*

R to C mapping:

fails

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-23
SLIDE 23

Binding libSDL using ".Call(..)" + Wrapper DLL

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-24
SLIDE 24

Binding libSDL using ".Call(..)" + Wrapper DLL

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); C wrapper source code: SEXP wrapper(SEXP w, SEXP h, SEXP bpp, SEXP flags) { return R_MakeExternalPtr( SDL_SetVideoMode( INTEGER(w)[0], INTEGER(h)[0], INTEGER(bpp)[0], (uint) INTEGER(flags)[0] ), R_NilValue, R_NilValue); }

slide-25
SLIDE 25

Runtime: SDL.dll wrapper.dll

Binding libSDL using ".Call(..)" + Wrapper DLL

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); C wrapper source code: SEXP wrapper(SEXP w, SEXP h, SEXP bpp, SEXP flags) { return R_MakeExternalPtr( SDL_SetVideoMode( INTEGER(w)[0], INTEGER(h)[0], INTEGER(bpp)[0], (uint) INTEGER(flags)[0] ), R_NilValue, R_NilValue); }

slide-26
SLIDE 26

Runtime: SDL.dll wrapper.dll

Binding libSDL using ".Call(..)" + Wrapper DLL

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); compile, link C wrapper source code: SEXP wrapper(SEXP w, SEXP h, SEXP bpp, SEXP flags) { return R_MakeExternalPtr( SDL_SetVideoMode( INTEGER(w)[0], INTEGER(h)[0], INTEGER(bpp)[0], (uint) INTEGER(flags)[0] ), R_NilValue, R_NilValue); }

slide-27
SLIDE 27

Runtime: SDL.dll wrapper.dll

Binding libSDL using ".Call(..)" + Wrapper DLL

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); compile, link C wrapper source code: SEXP wrapper(SEXP w, SEXP h, SEXP bpp, SEXP flags) { return R_MakeExternalPtr( SDL_SetVideoMode( INTEGER(w)[0], INTEGER(h)[0], INTEGER(bpp)[0], (uint) INTEGER(flags)[0] ), R_NilValue, R_NilValue); }

slide-28
SLIDE 28

Runtime: SDL.dll wrapper.dll

Binding libSDL using ".Call(..)" + Wrapper DLL

R calls C: surfPtr <- .Call(wrapper_funptr, 640L, 480L, 32L, 0L ) C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); compile, link C wrapper source code: SEXP wrapper(SEXP w, SEXP h, SEXP bpp, SEXP flags) { return R_MakeExternalPtr( SDL_SetVideoMode( INTEGER(w)[0], INTEGER(h)[0], INTEGER(bpp)[0], (uint) INTEGER(flags)[0] ), R_NilValue, R_NilValue); }

slide-29
SLIDE 29

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags);

slide-30
SLIDE 30

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L)

slide-31
SLIDE 31

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L)

Function Call Signature

slide-32
SLIDE 32

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature

slide-33
SLIDE 33

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) C Type Signature Character void 'v' char, short, int, long, long long 'c', 's', 'i', 'j', 'l' unsigned integers (capitalized) 'C', 'S', 'I', 'J', 'L' float, double 'f', 'd' T* (any C pointer) 'p' or '*' ... const char*(C String) 'Z' bool (c++), _Bool_t 'B' struct/union C pointers '*<' typename '>' Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature

slide-34
SLIDE 34

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) C Type Signature Character void 'v' char, short, int, long, long long 'c', 's', 'i', 'j', 'l' unsigned integers (capitalized) 'C', 'S', 'I', 'J', 'L' float, double 'f', 'd' T* (any C pointer) 'p' or '*' ... const char*(C String) 'Z' bool (c++), _Bool_t 'B' struct/union C pointers '*<' typename '>' Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature Supports

slide-35
SLIDE 35

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) C Type Signature Character void 'v' char, short, int, long, long long 'c', 's', 'i', 'j', 'l' unsigned integers (capitalized) 'C', 'S', 'I', 'J', 'L' float, double 'f', 'd' T* (any C pointer) 'p' or '*' ... const char*(C String) 'Z' bool (c++), _Bool_t 'B' struct/union C pointers '*<' typename '>' Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature scalars Supports

slide-36
SLIDE 36

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) C Type Signature Character void 'v' char, short, int, long, long long 'c', 's', 'i', 'j', 'l' unsigned integers (capitalized) 'C', 'S', 'I', 'J', 'L' float, double 'f', 'd' T* (any C pointer) 'p' or '*' ... const char*(C String) 'Z' bool (c++), _Bool_t 'B' struct/union C pointers '*<' typename '>' Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature scalars return types Supports

slide-37
SLIDE 37

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) C Type Signature Character void 'v' char, short, int, long, long long 'c', 's', 'i', 'j', 'l' unsigned integers (capitalized) 'C', 'S', 'I', 'J', 'L' float, double 'f', 'd' T* (any C pointer) 'p' or '*' ... const char*(C String) 'Z' bool (c++), _Bool_t 'B' struct/union C pointers '*<' typename '>' Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature scalars return types atomic data ptrs Supports

slide-38
SLIDE 38

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) C Type Signature Character void 'v' char, short, int, long, long long 'c', 's', 'i', 'j', 'l' unsigned integers (capitalized) 'C', 'S', 'I', 'J', 'L' float, double 'f', 'd' T* (any C pointer) 'p' or '*' ... const char*(C String) 'Z' bool (c++), _Bool_t 'B' struct/union C pointers '*<' typename '>' Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature scalars return types atomic data ptrs 8..64 bit (u)ints Supports

slide-39
SLIDE 39

Direct call using ".dyncall(..)"

C Function: SDL_Surface* SDL_SetVideoMode(int w, int h, int bpp, uint flags); R calls C: surface <- .dyncall(funaddr, "iiiI)p", 640L, 480L, 32L, 0L) C Type Signature Character void 'v' char, short, int, long, long long 'c', 's', 'i', 'j', 'l' unsigned integers (capitalized) 'C', 'S', 'I', 'J', 'L' float, double 'f', 'd' T* (any C pointer) 'p' or '*' ... const char*(C String) 'Z' bool (c++), _Bool_t 'B' struct/union C pointers '*<' typename '>' Signature Format: "{argument types in left-to-right order} ')' {return type}"

Function Call Signature scalars return types atomic data ptrs 8..64 bit (u)ints struct/union ptrs Supports

slide-40
SLIDE 40

Implementation of the dyncall C library

slide-41
SLIDE 41

Implementation of the dyncall C library

x86 x64 ppc arm mips Processors

slide-42
SLIDE 42

Implementation of the dyncall C library

x86 x64 ppc arm mips Processors Platforms

slide-43
SLIDE 43

Implementation of the dyncall C library

x86 x64 ppc arm mips Processors C/C++ Compilers Platforms

slide-44
SLIDE 44

Implementation of the dyncall C library

x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms

slide-45
SLIDE 45

Implementation of the dyncall C library

dyncall library x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms

slide-46
SLIDE 46

Implementation of the dyncall C library

dyncall library C Interface x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms

slide-47
SLIDE 47

Implementation of the dyncall C library

dyncall library C Interface Processor Back-end

calling convention calling convention calling convention

..

Front-end x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms

slide-48
SLIDE 48

Implementation of the dyncall C library

dyncall library C Interface Processor Back-end

calling convention calling convention calling convention

..

Front-end 1 x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms

slide-49
SLIDE 49

Implementation of the dyncall C library

dyncall library C Interface Processor Back-end

calling convention calling convention calling convention

..

Front-end 1 Call Engine Call Kernel (Assembly) Load Argument State-Machine x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms

slide-50
SLIDE 50

Implementation of the dyncall C library

dyncall library C Interface Processor Back-end

calling convention calling convention calling convention

..

Front-end 1 Call Engine Call Kernel (Assembly) Load Argument State-Machine 2 x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms

slide-51
SLIDE 51

Implementation of the dyncall C library

dyncall library C Interface Processor Back-end

calling convention calling convention calling convention

..

Front-end 1 Call Engine Call Kernel (Assembly) Load Argument State-Machine 2 x86 x64 ppc arm mips Processors

cdecl stdcall fastcall.gcc fastcall.ms thiscall.gcc thiscall.ms

Calling Conventions

win64 system v darwin system v arm9e thumb eabi

C/C++ Compilers Platforms 3

slide-52
SLIDE 52

Overview of rdyncall R Package

slide-53
SLIDE 53

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

slide-54
SLIDE 54

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

dynload Locate/Load Code dynfind(..)

slide-55
SLIDE 55

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

dynload Locate/Load Code dynfind(..) > dynfind("SDL") <pointer: 0x1583d670> attr(,"path") [1] "/Library/Frameworks/SDL.framework/SDL" attr(,"auto.unload") [1] TRUE

slide-56
SLIDE 56

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

dynload Locate/Load Code dynfind(..)

slide-57
SLIDE 57

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dynload Locate/Load Code dynfind(..)

slide-58
SLIDE 58

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dynload Locate/Load Code dynfind(..) > dynbind("SDL"," SDL_SetVideoMode(iiiI)*<SDL_Surface>; SDL_GL_SwapBuffers()v; SDL_PollEvents(*<SDL_Event>)v;SDL_Delay(i)v;") > ls() [1] "SDL_SetVideoMode" "SDL_GL_SwapBuffers" [3] "SDL_PollEvents" "SDL_Delay" > SDL_SetVideoMode function (...) .dyncall.cdecl(<pointer:0x142b7190>, "iiiI)*<SDL_Surface>" , ...)

slide-59
SLIDE 59

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dynload Locate/Load Code dynfind(..)

slide-60
SLIDE 60

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..)

slide-61
SLIDE 61

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..) > parseStructInfos("SDL_Rect{ssSS}x y w h;") > x <- new.struct("SDL_Rect") > x$w <- 100 > typeof(x) [1] "raw" > x$w [1] 100

slide-62
SLIDE 62

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..)

slide-63
SLIDE 63

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dyncallback R Function Callbacks new.callback(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..)

slide-64
SLIDE 64

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dyncallback R Function Callbacks new.callback(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..) > tagBegin <- function(handle,tag,attrs){..} > cb <- new.callback("pZp)v",tagBegin) > XML_SetElementHandler(handle,cb,NULL)

slide-65
SLIDE 65

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dyncallback R Function Callbacks new.callback(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..)

slide-66
SLIDE 66

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dyncallback R Function Callbacks new.callback(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..) Dynamic Packages / Multi-Platform Code Bindings dynport(..) loadDynportNamespace(..)

dynport files Text-based Binding Meta-Information

slide-67
SLIDE 67

R implementation rdyncall C implementation dyncall libraries dyncall Function Calls .dyncall(..)

Overview of rdyncall R Package

Binding of Libraries / R Wrappers dynbind(..) dyncallback R Function Callbacks new.callback(..) dynload Locate/Load Code dynfind(..) Low-level C Type .pack(..) .unpack(..) High-level C Type new.struct(..) as.struct(..) Dynamic Packages / Multi-Platform Code Bindings dynport(..) loadDynportNamespace(..)

dynport files Text-based Binding Meta-Information

> dynport(SDL) > search() [1] ".GlobalEnv" "package:SDL" [3] "package:rdyncall" ... > ls(2) [51] "SDLK_F1" # constants [539] "SDL_PixelFormat" # C struct type [537] "SDL_PauseAudio" # functions > unloadNamespace("SDL")

slide-68
SLIDE 68

What's so far available as dynport's

dynport functions symbolics types

slide-69
SLIDE 69

What's so far available as dynport's

dynport functions symbolics types

SDL 201 416 34 GL 336 3254

  • GLU

59 155

  • glew

1465

  • SDL_Image

27

  • de

545

  • NA

expat 65 70

  • R

238 22 NA

slide-70
SLIDE 70

the dynport concept Compiled Libraries Dynamic Languages

C glew C C

Simple Directmedia Layer

SDL

C C C

slide-71
SLIDE 71

the dynport concept Compiled Libraries Dynamic Languages

C glew C C

Simple Directmedia Layer

SDL

C C C

slide-72
SLIDE 72

dynport bindings

the dynport concept Compiled Libraries Dynamic Languages

C glew C C

Simple Directmedia Layer

SDL

C C C

slide-73
SLIDE 73

dynport bindings

the dynport concept Compiled Libraries Dynamic Languages

C glew C C

Simple Directmedia Layer

SDL

C C C

slide-74
SLIDE 74

dynport bindings

the dynport concept Compiled Libraries Dynamic Languages

C glew C C

Simple Directmedia Layer

SDL

C C C

slide-75
SLIDE 75

dynport bindings

the dynport concept Compiled Libraries Dynamic Languages

C glew C C

Simple Directmedia Layer

SDL

C C C

dynports repository

slide-76
SLIDE 76

rdyncall and dyncall available open-source (BSD) R Package available soon on CRAN http://dyncall.org