annotate doc/manual/manual_bindings.tex @ 490:17287342e273

manual: - removed all API description and referred to manual instead, to avoid outdated and/or duplicated doc - cleanups and clarificaions
author Tassilo Philipp
date Sun, 20 Mar 2022 14:26:55 +0100
parents b47168dacba6
children 48eede2fa034
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
467
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
20 \clearpage
0
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
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
62 low-level C/C++ data types.
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
63 This is an essential part of mapping the more flexible and often abstract data
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
64 types provided in scripting languages to the strict machine-level data types
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
65 used by C-libraries.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 The high-level C interface functions \capi{dcCallF()}, \capi{dcVCallF()},
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 \capi{dcArgF()} and \capi{dcVArgF()} of the \product{dyncall} library also make
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 use of this signature string format.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 The format of a \product{dyncall} signature string is as depicted below:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 \paragraph{\product{dyncall} signature string format}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 \group{input parameter type signature character}* \sigchar{)} \group{return
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 type signature character} \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 The \group{input parameter type signature character} sequence left to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 \sigchar{)} is in left-to-right order of the corresponding C function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 parameter type list.\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 The special \group{return type signature character} \sigchar{v} specifies
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 that the function does not return a value and corresponds to \capi{void}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 functions in C.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 \begin{tabular*}{0.75\textwidth}{cl}
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
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
92 \sigchar{v} & void \\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 \sigchar{B} & \_Bool, bool \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 \sigchar{c} & char \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 \sigchar{C} & unsigned char \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 \sigchar{s} & short \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 \sigchar{S} & unsigned short \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 \sigchar{i} & int \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 \sigchar{I} & unsigned int \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 \sigchar{j} & long \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 \sigchar{J} & unsigned long \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 \sigchar{l} & long long, int64\_t \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 \sigchar{L} & unsigned long long, uint64\_t \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 \sigchar{f} & float \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 \sigchar{d} & double \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 \sigchar{p} & void* \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 \sigchar{Z} & const char* (pointing to C string) \\
490
17287342e273 manual:
Tassilo Philipp
parents: 467
diff changeset
108 \sigchar{A} & aggregate (struct, union) by-value \\
0
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
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
122 Calling convention modes can be switched using the signature string, as well. A
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
123 '\_' in the signature string is followed by a character specifying what
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
124 calling convention to use, as this affects how arguments are passed. This makes
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
125 only sense if there are multiple co-existing calling conventions on a single platform.
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
126 Usually, this is done at the beginning of the string, except in special cases, like
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
127 specifying where the varargs part of a variadic function begins.
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
128 The following signature characters exist:
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
129
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
130 \begin{table}[h]
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
131 \begin{center}
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
132 \begin{tabular*}{0.75\textwidth}{cl}
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
133 Signature character & Calling Convention \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
134 \hline
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
135 \sigchar{:} & platform's default calling convention \\
490
17287342e273 manual:
Tassilo Philipp
parents: 467
diff changeset
136 \sigchar{*} & platform's default C++/thiscall calling convention \\
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
137 \sigchar{e} & vararg function \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
138 \sigchar{.} & vararg function's variadic/ellipsis part (...), to be specified before first vararg \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
139 \sigchar{c} & only on x86: cdecl \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
140 \sigchar{s} & only on x86: stdcall \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
141 \sigchar{F} & only on x86: fastcall (MS) \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
142 \sigchar{f} & only on x86: fastcall (GNU) \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
143 \sigchar{+} & only on x86: thiscall (MS) \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
144 \sigchar{\#}& only on x86: thiscall (GNU) \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
145 \sigchar{A} & only on ARM: ARM mode \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
146 \sigchar{a} & only on ARM: THUMB mode \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
147 \sigchar{\$}& syscall \\
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
148 \end{tabular*}
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
149 \caption{Calling convention signature encoding}
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
150 \label{cconvsigchar}
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
151 \end{center}
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
152 \end{table}
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
153
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
154 \pagebreak
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
155
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 \paragraph{Examples of C function prototypes}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 \begin{tabular*}{0.75\textwidth}{rll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 & C function prototype & dyncall signature \\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 \hline
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 void & f1(); & \sigstr{)v}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 int & f2(int, int); & \sigstr{ii)i}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 long long & f3(void*); & \sigstr{p)L}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 void & f3(int**); & \sigstr{p)v}\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 double & f4(int, bool, char, double, const char*); & \sigstr{iBcdZ)d}\\
490
17287342e273 manual:
Tassilo Philipp
parents: 467
diff changeset
167 void & f5(short, long long, ...); & \sigstr{\_esl\_.di)v} (for (promoted) varargs: double, int)\\
17287342e273 manual:
Tassilo Philipp
parents: 467
diff changeset
168 struct A & f6(int, union B); & \sigstr{iA)A}\\
17287342e273 manual:
Tassilo Philipp
parents: 467
diff changeset
169 short & Cls::f(unsigned char, ...); & \sigstr{\_*p\_eC\_.i)A} (C++: this-ptr as 1st arg, int as vararg)\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170 \end{tabular*}
490
17287342e273 manual:
Tassilo Philipp
parents: 467
diff changeset
171 \caption{Type signature examples of function prototypes}
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172 \label{sigex}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 \subsection{Erlang language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 The OTP library application {\tt erldc} implements the Erlang language bindings.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 Signature character & accepted Erlang data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 \hline
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
186 \sigchar{v} & no return type\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 \sigchar{B} & atoms 'true' and 'false' converted to bool\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 \sigchar{c}, \sigchar{C} & integer cast to (unsigned) char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 \sigchar{s}, \sigchar{S} & integer cast to (unsigned) short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 \sigchar{i}, \sigchar{I} & integer cast to (unsigned) int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 \sigchar{j}, \sigchar{J} & integer cast to (unsigned) long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 \sigchar{l}, \sigchar{L} & integer cast to (unsigned) long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
193 \sigchar{f} & decimal cast to float\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
194 \sigchar{d} & decimal cast to double\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
195 \sigchar{p} & binary (previously returned from call\_ptr or callf) cast to void*\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
196 \sigchar{Z} & string cast to void*\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
197 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
198 \caption{Type signature encoding for Erlang bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
199 \label{Erlangsigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205 \subsection{Go language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207 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
208
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
209 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
210 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
211 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212 Signature character & accepted Go data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
213 \hline
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
214 \sigchar{v} & no return type\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
215 \sigchar{B} & bool\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
216 \sigchar{c}, \sigchar{C} & int8, uint8\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
217 \sigchar{s}, \sigchar{S} & int16, uint16\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218 \sigchar{i}, \sigchar{I} & int, uint\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
219 \sigchar{j}, \sigchar{J} & int32, uint32\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220 \sigchar{l}, \sigchar{L} & int64, uint64\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221 \sigchar{f} & float32\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
222 \sigchar{d} & float64\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
223 \sigchar{p}, \sigchar{Z} & uintptr, unsafe.Pointer\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
224 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
225 \caption{Type signature encoding for Go bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
226 \label{Gosigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
227 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
228 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
229
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
230 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
231 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
232 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
233 temporary string, free it using {\tt FreeCString(value unsafe.Pointer)}.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
234
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
235
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
236 \subsection{Python language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
237
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
238 The python module {\tt pydc} implements the Python language bindings,
467
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
239 namely {\tt load}, {\tt find}, {\tt free}, {\tt call}, {\tt new\_callback}, {\tt free\_callback}.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
240
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
241 \begin{table}[h]
490
17287342e273 manual:
Tassilo Philipp
parents: 467
diff changeset
242 \begin{tabular*}{1.0\textwidth}{lll}
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
243 Signature character & accepted Python 2 types & accepted Python 3 types \\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
244 \hline
467
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
245 \sigchar{v} & no return type & no return type \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
246 \sigchar{B} & bool & bool \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
247 \sigchar{c}, \sigchar{C} & int, string (with single char) & int, string (with single char) \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
248 \sigchar{s}, \sigchar{S} & int & int \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
249 \sigchar{i}, \sigchar{I} & int & int \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
250 \sigchar{j}, \sigchar{J} & int & int \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
251 \sigchar{l}, \sigchar{L} & int, long & int \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
252 \sigchar{f} & float & float \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
253 \sigchar{d} & float & float \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
254 \sigchar{p} & bytearray, int, long, None, (PyCObject, PyCapsule) & bytearray, int, None, (PyCObject, PyCapsule) \\
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
255 \sigchar{Z} & string, unicode, bytearray & string, bytes, bytearray \\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
256 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
257 \caption{Type signature encoding for Python bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
258 \label{Pysigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
259 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
260
467
b47168dacba6 manual:
Tassilo Philipp
parents: 360
diff changeset
261 This is a very brief description that omits many details. For more, refer to the README.txt file of the binding.
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
262
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
263 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
264
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
265 \subsection{R language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
266
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
267 The R package {\tt rdyncall} implements the R langugae bindings providing the function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
268 {\tt .dyncall() }.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
269
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
270 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
271 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
272 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
273 Signature character & accepted R data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
274 \hline
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
275 \sigchar{v} & no return type\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
276 \sigchar{B} & coerced to logical vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
277 \sigchar{c} & coerced to integer vector, first item truncated char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
278 \sigchar{C} & coerced to integer vector, first item truncated to unsigned char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
279 \sigchar{s} & coerced to integer vector, first item truncated to short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
280 \sigchar{S} & coerced to integer vector, first item truncated to unsigned short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
281 \sigchar{i} & coerced to integer vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
282 \sigchar{I} & coerced to integer vector, first item casted to unsigned int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
283 \sigchar{j} & coerced to integer vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
284 \sigchar{J} & coerced to integer vector, first item casted to unsigned long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
285 \sigchar{l} & coerced to numeric, first item casted to long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
286 \sigchar{L} & coerced to numeric, first item casted to unsigned long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
287 \sigchar{f} & coerced to numeric, first item casted to float\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
288 \sigchar{d} & coerced to numeric, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
289 \sigchar{p} & external pointer or coerced to string vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
290 \sigchar{Z} & coerced to string vector, first item\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
291 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
292 \caption{Type signature encoding for R bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
293 \label{Rsigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
294 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
295 \end{table}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
296
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
297 Some notes on the R Binding:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
298 \begin{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
299 \item Unsigned 32-bit integers are represented as signed integers in R.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
300 \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
301 to represent 64-bit integers (using only the 52-bit mantissa part).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
302 \end{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
303
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
304 \pagebreak
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
305
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
306 \subsection{Ruby language bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
307
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
308 The Ruby gem {\tt rbdc} implements the Ruby language bindings.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
309
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
310 \begin{table}[h]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
311 \begin{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
312 \begin{tabular*}{0.75\textwidth}{ll}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
313 Signature character & accepted Ruby data types\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
314 \hline
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
315 \sigchar{v} & no return type\\
1
5fe1e87ecf03 - typo fix in manual (thanks Tobi)
cslag
parents: 0
diff changeset
316 \sigchar{B} & TrueClass, FalseClass, NilClass, Fixnum casted to bool\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
317 \sigchar{c}, \sigchar{C} & Fixnum cast to (unsigned) char\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
318 \sigchar{s}, \sigchar{S} & Fixnum cast to (unsigned) short\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
319 \sigchar{i}, \sigchar{I} & Fixnum cast to (unsigned) int\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
320 \sigchar{j}, \sigchar{J} & Fixnum cast to (unsigned) long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
321 \sigchar{l}, \sigchar{L} & Fixnum cast to (unsigned) long long\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
322 \sigchar{f} & Float cast to float\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
323 \sigchar{d} & Float cast to double\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
324 \sigchar{p}, \sigchar{Z} & String cast to void*\\
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
325 \end{tabular*}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
326 \caption{Type signature encoding for Ruby bindings}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
327 \label{Rubysigchar}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
328 \end{center}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
329 \end{table}
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 90
diff changeset
330