annotate doc/manual/manual_bindings.tex @ 1:5fe1e87ecf03

- typo fix in manual (thanks Tobi)
author cslag
date Sun, 22 Mar 2015 16:47:54 -0500
parents 3e629dc19168
children e932e6331f35
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 %//////////////////////////////////////////////////////////////////////////////
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 % Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 % Tassilo Philipp <tphilipp@potion-studios.com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 % Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 % purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 % copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 % ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 % OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 %//////////////////////////////////////////////////////////////////////////////
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 \newpage
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 \section{Bindings to programming languages}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 Through binding of the \product{dyncall} library into a scripting environment,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 the scripting language can gain system programming status to a certain degree.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 The \product{dyncall} library provides bindings to Erlang\cite{Erlang}, Java\cite{Java},
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 Lua\cite{Lua}, Python\cite{Python}, R\cite{R}, Ruby\cite{Ruby}, Go\cite{Go} and the shell/command line.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 However, please note that some of these bindings are work-in-progress and not
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 automatically tested, meaning it might require some additional work to make them
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 work.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 \subsection{Common Architecture}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 The binding interfaces of the \product{dyncall} library to various scripting
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 languages share a common set of functionality to invoke a function call.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 \subsubsection{Dynamic loading of code}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 The helper library \emph{dynload} which accompanies the \product{dyncall}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 library provides an abstract interface to operating-system specific mechanisms
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 for loading and accessing executable code out of, but not limited to, shared
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 libraries.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 \subsubsection{Functions}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 All bindings are based on a common interface convention providing a common set
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 of the following 4 functions (exact spelling depending on the binding's scripting
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 environment):
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 \begin{description}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 \item [load] - load a module of compiled code
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 \item [free] - unload a module of compiled code
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 \item [find] - find function pointer by symbolic names
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 \item [call] - invoke a function call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 \end{description}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 \subsubsection{Signatures}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 A signature is a character string that represents a function's arguments and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 return value types. It is used in the scripting language bindings invoke
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 functions to perform automatic type-conversion of the languages' types to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 low-level C/C++ data types. This is an essential part of mapping the more flexible
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 and often abstract data types provided in scripting languages conveniently to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 strict machine-level data types used by C-libraries.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 The high-level C interface functions \capi{dcCallF()}, \capi{dcVCallF()},
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 \capi{dcArgF()} and \capi{dcVArgF()} of the \product{dyncall} library also make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 use of this signature string format.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 The format of a \product{dyncall} signature string is as depicted below:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 \paragraph{\product{dyncall} signature string format}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 \group{input parameter type signature character}* \sigchar{)} \group{return
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 type signature character} \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 The \group{input parameter type signature character} sequence left to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 \sigchar{)} is in left-to-right order of the corresponding C function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 parameter type list.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 The special \group{return type signature character} \sigchar{v} specifies
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 that the function does not return a value and corresponds to \capi{void}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 functions in C.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 \begin{tabular*}{0.75\textwidth}{cl}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 Signature character & C/C++ data type \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 \sigchar{B} & \_Bool, bool \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 \sigchar{c} & char \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 \sigchar{C} & unsigned char \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 \sigchar{s} & short \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 \sigchar{S} & unsigned short \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 \sigchar{i} & int \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 \sigchar{I} & unsigned int \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 \sigchar{j} & long \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 \sigchar{J} & unsigned long \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 \sigchar{l} & long long, int64\_t \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 \sigchar{L} & unsigned long long, uint64\_t \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 \sigchar{f} & float \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 \sigchar{d} & double \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 \sigchar{p} & void* \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 \sigchar{Z} & const char* (pointing to C string) \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 \sigchar{v} & void \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 \caption{Type signature encoding for function call data types}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 \label{sigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 Please note that using a \sigchar{(} at the beginning of a signature string is possible,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 although not required. The character doesn't have any meaning and will simply be
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 ignored. However, using it prevents annoying syntax highlighting problems with some code
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 editors.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 \paragraph{Examples of C function prototypes}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 \begin{tabular*}{0.75\textwidth}{rll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 & C function prototype & dyncall signature \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 void & f1(); & \sigstr{)v}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 int & f2(int, int); & \sigstr{ii)i}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 long long & f3(void*); & \sigstr{p)L}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 void & f3(int**); & \sigstr{p)v}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 double & f4(int, bool, char, double, const char*); & \sigstr{iBcdZ)d}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 \caption{Type signature examples of C function prototypes}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 \label{sigex}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 \subsection{Erlang language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 The OTP library application {\tt erldc} implements the Erlang language bindings.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 Signature character & accepted Erlang data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 \sigchar{B} & atoms 'true' and 'false' converted to bool\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 \sigchar{c}, \sigchar{C} & integer cast to (unsigned) char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 \sigchar{s}, \sigchar{S} & integer cast to (unsigned) short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 \sigchar{i}, \sigchar{I} & integer cast to (unsigned) int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 \sigchar{j}, \sigchar{J} & integer cast to (unsigned) long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 \sigchar{l}, \sigchar{L} & integer cast to (unsigned) long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 \sigchar{f} & decimal cast to float\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 \sigchar{d} & decimal cast to double\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 \sigchar{p} & binary (previously returned from call\_ptr or callf) cast to void*\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 \sigchar{Z} & string cast to void*\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 \sigchar{v} & no return type\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 \caption{Type signature encoding for Erlang bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 \label{Erlangsigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174 \subsection{Go language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176 A Go binding is provided through the {\tt godc} package. Since Go's type system is basically a superset of C's, the type mapping from Go to C is straightforward.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 Signature character & accepted Go data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 \sigchar{B} & bool\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 \sigchar{c}, \sigchar{C} & int8, uint8\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 \sigchar{s}, \sigchar{S} & int16, uint16\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 \sigchar{i}, \sigchar{I} & int, uint\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 \sigchar{j}, \sigchar{J} & int32, uint32\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 \sigchar{l}, \sigchar{L} & int64, uint64\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 \sigchar{f} & float32\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 \sigchar{d} & float64\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 \sigchar{p}, \sigchar{Z} & uintptr, unsafe.Pointer\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
193 \sigchar{v} & no return type\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
194 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
195 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
196 \caption{Type signature encoding for Go bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
197 \label{Gosigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
198 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
199 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201 Note that passing a Go-{\tt string} directly to a C-function expecting a pointer is not directly possible. However, the binding comes with
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202 two helper functions, {\tt AllocCString(value string) unsafe.Pointer} and {\tt FreeCString(value unsafe.Pointer)} to help with converting
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203 a {\tt string} to an {\tt unsafe.Pointer} which then can be passed to {\tt ArgPointer(value unsafe.Pointer)}. Once you are done with this
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204 temporary string, free it using {\tt FreeCString(value unsafe.Pointer)}.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207 \subsection{Python language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
209 The python module {\tt pydc} implements the Python language bindings,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
210 namely {\tt load}, {\tt find}, {\tt free}, {\tt call}.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
211
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
213 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
214 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
215 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
216 Signature character & accepted Python data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
217 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218 \sigchar{B} & bool \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
219 \sigchar{c} & if string, take first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220 \sigchar{s} & int, check in range\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221 \sigchar{i} & int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
222 \sigchar{j} & int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
223 \sigchar{l} & long, casted to long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
224 \sigchar{f} & float\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
225 \sigchar{d} & double\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
226 \sigchar{p} & string or long casted to void*\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
227 \sigchar{v} & no return type\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
228 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
229 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
230 \caption{Type signature encoding for Python bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
231 \label{Pysigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
232 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
233 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
234
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
235 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
236
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
237 \subsection{R language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
238
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
239 The R package {\tt rdyncall} implements the R langugae bindings providing the function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
240 {\tt .dyncall() }.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
241
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
242 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
243 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
244 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
245 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
246 Signature character & accepted R data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
247 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
248 \sigchar{B} & coerced to logical vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
249 \sigchar{c} & coerced to integer vector, first item truncated char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
250 \sigchar{C} & coerced to integer vector, first item truncated to unsigned char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
251 \sigchar{s} & coerced to integer vector, first item truncated to short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
252 \sigchar{S} & coerced to integer vector, first item truncated to unsigned short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
253 \sigchar{i} & coerced to integer vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
254 \sigchar{I} & coerced to integer vector, first item casted to unsigned int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
255 \sigchar{j} & coerced to integer vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
256 \sigchar{J} & coerced to integer vector, first item casted to unsigned long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
257 \sigchar{l} & coerced to numeric, first item casted to long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
258 \sigchar{L} & coerced to numeric, first item casted to unsigned long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
259 \sigchar{f} & coerced to numeric, first item casted to float\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
260 \sigchar{d} & coerced to numeric, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
261 \sigchar{p} & external pointer or coerced to string vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
262 \sigchar{Z} & coerced to string vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
263 \sigchar{v} & no return type\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
264 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
265 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
266 \caption{Type signature encoding for R bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
267 \label{Rsigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
268 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
269 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
270
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
271 Some notes on the R Binding:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
272 \begin{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
273 \item Unsigned 32-bit integers are represented as signed integers in R.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
274 \item 64-bit integer types do not exist in R, therefore we use double floats
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
275 to represent 64-bit integers (using only the 52-bit mantissa part).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
276 \end{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
277
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
278 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
279
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
280 \subsection{Ruby language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
281
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
282 The Ruby gem {\tt rbdc} implements the Ruby language bindings.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
283
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
284 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
285 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
286 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
287 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
288 Signature character & accepted Ruby data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
289 \hline
1
5fe1e87ecf03 - typo fix in manual (thanks Tobi)
cslag
parents: 0
diff changeset
290 \sigchar{B} & TrueClass, FalseClass, NilClass, Fixnum casted to bool\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
291 \sigchar{c}, \sigchar{C} & Fixnum cast to (unsigned) char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
292 \sigchar{s}, \sigchar{S} & Fixnum cast to (unsigned) short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
293 \sigchar{i}, \sigchar{I} & Fixnum cast to (unsigned) int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
294 \sigchar{j}, \sigchar{J} & Fixnum cast to (unsigned) long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
295 \sigchar{l}, \sigchar{L} & Fixnum cast to (unsigned) long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
296 \sigchar{f} & Float cast to float\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
297 \sigchar{d} & Float cast to double\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
298 \sigchar{p}, \sigchar{Z} & String cast to void*\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
299 \sigchar{v} & no return type\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
300 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
301 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
302 \caption{Type signature encoding for Ruby bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
303 \label{Rubysigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
304 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
305 \end{table}