2012-10-18 Jan-Benedict Glaw <jbglaw@lug-owl.de>
[official-gcc.git] / gcc / go / gccgo.texi
bloba5e37e76e800a6e2dfc0b1119b5541c0804a5769
1 \input texinfo @c -*-texinfo-*-
2 @setfilename gccgo.info
3 @settitle The GNU Go Compiler
5 @c Merge the standard indexes into a single one.
6 @syncodeindex fn cp
7 @syncodeindex vr cp
8 @syncodeindex ky cp
9 @syncodeindex pg cp
10 @syncodeindex tp cp
12 @include gcc-common.texi
14 @c Copyright years for this manual.
15 @set copyrights-go 2010, 2011, 2012
17 @copying
18 @c man begin COPYRIGHT
19 Copyright @copyright{} @value{copyrights-go} Free Software Foundation, Inc.
21 Permission is granted to copy, distribute and/or modify this document
22 under the terms of the GNU Free Documentation License, Version 1.3 or
23 any later version published by the Free Software Foundation; with no
24 Invariant Sections, the Front-Cover Texts being (a) (see below), and
25 with the Back-Cover Texts being (b) (see below).
26 A copy of the license is included in the
27 @c man end
28 section entitled ``GNU Free Documentation License''.
29 @ignore
30 @c man begin COPYRIGHT
31 man page gfdl(7).
32 @c man end
33 @end ignore
35 @c man begin COPYRIGHT
37 (a) The FSF's Front-Cover Text is:
39      A GNU Manual
41 (b) The FSF's Back-Cover Text is:
43      You have freedom to copy and modify this GNU Manual, like GNU
44      software.  Copies published by the Free Software Foundation raise
45      funds for GNU development.
46 @c man end
47 @end copying
49 @ifinfo
50 @format
51 @dircategory Software development
52 @direntry
53 * Gccgo: (gccgo).           A GCC-based compiler for the Go language
54 @end direntry
55 @end format
57 @insertcopying
58 @end ifinfo
60 @titlepage
61 @title The GNU Go Compiler
62 @versionsubtitle
63 @author Ian Lance Taylor
65 @page
66 @vskip 0pt plus 1filll
67 Published by the Free Software Foundation @*
68 51 Franklin Street, Fifth Floor@*
69 Boston, MA 02110-1301, USA@*
70 @sp 1
71 @insertcopying
72 @end titlepage
73 @contents
74 @page
76 @node Top
77 @top Introduction
79 This manual describes how to use @command{gccgo}, the GNU compiler for
80 the Go programming language.  This manual is specifically about
81 @command{gccgo}.  For more information about the Go programming
82 language in general, including language specifications and standard
83 package documentation, see @uref{http://golang.org/}.
85 @menu
86 * Copying::                     The GNU General Public License.
87 * GNU Free Documentation License::
88                                 How you can share and copy this manual.
89 * Invoking gccgo::              How to run gccgo.
90 * Import and Export::           Importing and exporting package data.
91 * C Interoperability::          Calling C from Go and vice-versa.
92 * Index::                       Index.
93 @end menu
96 @include gpl_v3.texi
98 @include fdl.texi
101 @node Invoking gccgo
102 @chapter Invoking gccgo
104 @c man title gccgo A GCC-based compiler for the Go language
106 @ignore
107 @c man begin SYNOPSIS gccgo
108 gccgo [@option{-c}|@option{-S}]
109       [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
110       [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
111       [@option{-o} @var{outfile}] @var{infile}@dots{}
113 Only the most useful options are listed here; see below for the
114 remainder.
115 @c man end
116 @c man begin SEEALSO
117 gpl(7), gfdl(7), fsf-funding(7), gcc(1)
118 and the Info entries for @file{gccgo} and @file{gcc}.
119 @c man end
120 @end ignore
122 @c man begin DESCRIPTION gccgo
124 The @command{gccgo} command is a frontend to @command{gcc} and
125 supports many of the same options.  @xref{Option Summary, , Option
126 Summary, gcc, Using the GNU Compiler Collection (GCC)}.  This manual
127 only documents the options specific to @command{gccgo}.
129 The @command{gccgo} command may be used to compile Go source code into
130 an object file, link a collection of object files together, or do both
131 in sequence.
133 Go source code is compiled as packages.  A package consists of one or
134 more Go source files.  All the files in a single package must be
135 compiled together, by passing all the files as arguments to
136 @command{gccgo}.  A single invocation of @command{gccgo} may only
137 compile a single package.
139 One Go package may @code{import} a different Go package.  The imported
140 package must have already been compiled; @command{gccgo} will read
141 the import data directly from the compiled package.  When this package
142 is later linked, the compiled form of the package must be included in
143 the link command.
145 @c man end
147 @c man begin OPTIONS gccgo
149 @table @gcctabopt
150 @item -I@var{dir}
151 @cindex @option{-I}
152 Specify a directory to use when searching for an import package at
153 compile time.
155 @item -L@var{dir}
156 @cindex @option{-L}
157 When linking, specify a library search directory, as with
158 @command{gcc}.
160 @item -fgo-pkgpath=@var{string}
161 @cindex @option{-fgo-pkgpath}
162 Set the package path to use.  This sets the value returned by the
163 PkgPath method of reflect.Type objects.  It is also used for the names
164 of globally visible symbols.  The argument to this option should
165 normally be the string that will be used to import this package after
166 it has been installed; in other words, a pathname within the
167 directories specified by the @option{-I} option.
169 @item -fgo-prefix=@var{string}
170 @cindex @option{-fgo-prefix}
171 An alternative to @option{-fgo-pkgpath}.  The argument will be
172 combined with the package name from the source file to produce the
173 package path.  If @option{-fgo-pkgpath} is used, @option{-fgo-prefix}
174 will be ignored.
176 Go permits a single program to include more than one package with the
177 same name in the @code{package} clause in the source file, though
178 obviously the two packages must be imported using different pathnames.
179 In order for this to work with @command{gccgo}, either
180 @option{-fgo-pkgpath} or @option{-fgo-prefix} must be specified when
181 compiling a package.
183 Using either @option{-fgo-pkgpath} or @option{-fgo-prefix} disables
184 the special treatment of the @code{main} package and permits that
185 package to be imported like any other.
187 @item -frequire-return-statement
188 @itemx -fno-require-return-statement
189 @cindex @option{-frequire-return-statement}
190 @cindex @option{-fno-require-return-statement}
191 By default @command{gccgo} will warn about functions which have one or
192 more return parameters but lack an explicit @code{return} statement.
193 This warning may be disabled using
194 @option{-fno-require-return-statement}.
196 @item -fgo-check-divide-zero
197 @cindex @option{-fgo-check-divide-zero}
198 @cindex @option{-fno-go-check-divide-zero}
199 Add explicit checks for division by zero.  In Go a division (or
200 modulos) by zero causes a panic.  On Unix systems this is detected in
201 the runtime by catching the @code{SIGFPE} signal.  Some processors,
202 such as PowerPC, do not generate a SIGFPE on division by zero.  Some
203 runtimes do not generate a signal that can be caught.  On those
204 systems, this option may be used.  Or the checks may be removed via
205 @option{-fno-go-check-divide-zero}.  This option is currently on by
206 default, but in the future may be off by default on systems that do
207 not require it.
209 @item -fgo-check-divide-overflow
210 @cindex @option{-fgo-check-divide-overflow}
211 @cindex @option{-fno-go-check-divide-overflow}
212 Add explicit checks for division overflow.  For example, division
213 overflow occurs when computing @code{INT_MIN / -1}.  In Go this should
214 be wrapped, to produce @code{INT_MIN}.  Some processors, such as x86,
215 generate a trap on division overflow.  On those systems, this option
216 may be used.  Or the checks may be removed via
217 @option{-fno-go-check-divide-overflow}.  This option is currently on
218 by default, but in the future may be off by default on systems that do
219 not require it.
220 @end table
222 @c man end
224 @node Import and Export
225 @chapter Import and Export
227 When @command{gccgo} compiles a package which exports anything, the
228 export information will be stored directly in the object file.  When a
229 package is imported, @command{gccgo} must be able to find the file.
231 @cindex @file{.gox}
232 When Go code imports the package @file{@var{gopackage}}, @command{gccgo}
233 will look for the import data using the following filenames, using the
234 first one that it finds.
236 @table @file
237 @item @var{gopackage}.gox
238 @item lib@var{gopackage}.so
239 @item lib@var{gopackage}.a
240 @item @var{gopackage}.o
241 @end table
243 The compiler will search for these files in the directories named by
244 any @option{-I} options, in order in which the directories appear on
245 the command line.  The compiler will then search several standard
246 system directories.  Finally the compiler will search the current
247 directory (to search the current directory earlier, use @samp{-I.}).
249 The compiler will extract the export information directly from the
250 compiled object file.  The file @file{@var{gopackage}.gox} will
251 typically contain nothing but export data.  This can be generated from
252 @file{@var{gopackage}.o} via
254 @smallexample
255 objcopy -j .go_export @var{gopackage}.o @var{gopackage}.gox
256 @end smallexample
258 For example, it may be desirable to extract the export information
259 from several different packages into their independent
260 @file{@var{gopackage}.gox} files, and then to combine the different
261 package object files together into a single shared library or archive.
263 At link time you must explicitly tell @command{gccgo} which files to
264 link together into the executable, as is usual with @command{gcc}.
265 This is different from the behaviour of other Go compilers.
267 @node C Interoperability
268 @chapter C Interoperability
270 When using @command{gccgo} there is limited interoperability with C,
271 or with C++ code compiled using @code{extern "C"}.
273 @menu
274 * C Type Interoperability::     How C and Go types match up.
275 * Function Names::              How Go functions are named.
276 @end menu
278 @node C Type Interoperability
279 @section C Type Interoperability
281 Basic types map directly: an @code{int} in Go is an @code{int} in C,
282 etc.  Go @code{byte} is equivalent to C @code{unsigned char}.
283 Pointers in Go are pointers in C.  A Go @code{struct} is the same as C
284 @code{struct} with the same field names and types.
286 @cindex @code{string} in C
287 The Go @code{string} type is currently defined as a two-element
288 structure:
290 @smallexample
291 struct __go_string @{
292   const unsigned char *__data;
293   int __length;
295 @end smallexample
297 You can't pass arrays between C and Go.  However, a pointer to an
298 array in Go is equivalent to a C pointer to the equivalent of the
299 element type.  For example, Go @code{*[10]int} is equivalent to C
300 @code{int*}, assuming that the C pointer does point to 10 elements.
302 @cindex @code{slice} in C
303 A slice in Go is a structure.  The current definition is:
305 @smallexample
306 struct __go_slice @{
307   void *__values;
308   int __count;
309   int __capacity;
311 @end smallexample
313 The type of a Go function with no receiver is equivalent to a C
314 function whose parameter types are equivalent.  When a Go function
315 returns more than one value, the C function returns a struct.  For
316 example, these functions have equivalent types:
318 @smallexample
319 func GoFunction(int) (int, float)
320 struct @{ int i; float f; @} CFunction(int)
321 @end smallexample
323 A pointer to a Go function is equivalent to a pointer to a C function
324 when the functions have equivalent types.
326 Go @code{interface}, @code{channel}, and @code{map} types have no
327 corresponding C type (@code{interface} is a two-element struct and
328 @code{channel} and @code{map} are pointers to structs in C, but the
329 structs are deliberately undocumented).  C @code{enum} types
330 correspond to some integer type, but precisely which one is difficult
331 to predict in general; use a cast.  C @code{union} types have no
332 corresponding Go type.  C @code{struct} types containing bitfields
333 have no corresponding Go type.  C++ @code{class} types have no
334 corresponding Go type.
336 Memory allocation is completely different between C and Go, as Go uses
337 garbage collection.  The exact guidelines in this area are
338 undetermined, but it is likely that it will be permitted to pass a
339 pointer to allocated memory from C to Go.  The responsibility of
340 eventually freeing the pointer will remain with C side, and of course
341 if the C side frees the pointer while the Go side still has a copy the
342 program will fail.  When passing a pointer from Go to C, the Go
343 function must retain a visible copy of it in some Go variable.
344 Otherwise the Go garbage collector may delete the pointer while the C
345 function is still using it.
347 @node Function Names
348 @section Function Names
350 @cindex @code{extern}
351 @cindex external names
352 Go code can call C functions directly using a Go extension implemented
353 in @command{gccgo}: a function declaration may be preceded by a
354 comment giving the external name.  The comment must be at the
355 beginning of the line and must start with @code{//extern}.  This must
356 be followed by a space and then the external name of the function.
357 The function declaration must be on the line immediately after the
358 comment.  For example, here is how the C function @code{open} can be
359 declared in Go:
361 @smallexample
362 //extern open
363 func c_open(name *byte, mode int, perm int) int
364 @end smallexample
366 The C function naturally expects a nul terminated string, which in Go
367 is equivalent to a pointer to an array (not a slice!) of @code{byte}
368 with a terminating zero byte.  So a sample call from Go would look
369 like (after importing the @code{os} package):
371 @smallexample
372 var name = [4]byte@{'f', 'o', 'o', 0@};
373 i := c_open(&amp;name[0], os.O_RDONLY, 0);
374 @end smallexample
376 Note that this serves as an example only.  To open a file in Go please
377 use Go's @code{os.Open} function instead.
379 The name of Go functions accessed from C is subject to change.  At
380 present the name of a Go function that does not have a receiver is
381 @code{prefix.package.Functionname}.  The prefix is set by the
382 @option{-fgo-prefix} option used when the package is compiled; if the
383 option is not used, the default is simply @code{go}.  To call the
384 function from C you must set the name using the @command{gcc}
385 @code{__asm__} extension.
387 @smallexample
388 extern int go_function(int) __asm__ ("myprefix.mypackage.Function");
389 @end smallexample
391 @node Index
392 @unnumbered Index
394 @printindex cp
396 @bye