scalac man page
Author: Stephane Micheloud & LAMP

scalac(1)
scalac(1)
USER COMMANDS

### NAME

`scalac` – Compiler for the Scala 2 language

### SYNOPSIS

`scalac``[ <options> ] <source files>`

### PARAMETERS

`<options>`
  Command line options. See OPTIONS below.
`<source files>`
  One or more source files to be compiled (such as `MyClass.scala`).

### OPTIONS

The compiler has a set of standard options that are supported on the current development environment and will be supported in future releases. An additional set of non-standard options are specific to the current virtual machine implementation and are subject to change in the future. Non-standard options begin with -X.

#### Standard Options

`–g:{none,source,line,vars,notc}`
  `"none"` generates no debugging info,
  `"source"` generates only the source file attribute,
  `"line"` generates source and line number information,
  `"vars"` generates source, line number and local variable information,
  `"notc"` generates all of the above and will not perform tail call optimization.
`–nowarn`
  Generate no warnings
`–verbose`
  Output messages about what the compiler is doing
`–deprecation`
  Indicate whether source should be compiled with deprecation information; defaults to `off` (accepted values are: `on`, `off`, `yes` and `no`)
  Available since Scala version 2.2.1
`–unchecked`
  Enable detailed unchecked warnings
  Non variable type-arguments in type patterns are unchecked since they are eliminated by erasure
  Available since Scala version 2.3.0
`–classpath <path>`
  Specify where to find user class files (on Unix-based systems a colon-separated list of paths, on Windows-based systems, a semicolon-separate list of paths). This does not override the built-in (`"boot"`) search path.
  The default class path is the current directory. Setting the `CLASSPATH` variable or using the `-classpath` command-line option overrides that default, so if you want to include the current directory in the search path, you must include `"."` in the new settings.
`–sourcepath <path>`
  Specify where to find input source files.
`–bootclasspath <path>`
  Override location of bootstrap class files (where to find the standard built-in classes, such as "`scala.List`").
`–extdirs <dirs>`
  Override location of installed extensions.
`–d <directory>`
  Specify where to place generated class files.
`–encoding <encoding>`
  Specify character encoding used by source files.
  The default value is platform-specific (Linux: `"UTF8"`, Windows: `"Cp1252"`). Executing the following code in the Scala interpreter will return the default value on your system:
  `scala>` `new java.io.InputStreamReader(System.in).getEncoding`
`–target: <target>`
  Specify which backend to use (`jvm-1.5,msil`).
  The default value is `"jvm-1.5"` (was `"jvm-1.4"` up to Scala version 2.6.1).
`–print`
  Print program with all Scala-specific features removed
`–optimise`
  Generates faster bytecode by applying optimisations to the program
`–explaintypes`
  Explain type errors in more detail.
`–uniqid`
  Print identifiers with unique names (debugging option).
`–version`
  Print product version and exit.
`–help`
  Print a synopsis of standard options.

#### Advanced Options

`–Xassem <file>`
  Name of the output assembly (only relevant with -target:msil)
`–Xassem-path <path>`
  List of assemblies referenced by the program (only relevant with -target:msil)
`–Xcheck-null`
  Emit warning on selection of nullable reference
`–Xdisable-assertions`
  Generate no assertions and assumptions
`–Xexperimental`
  enable experimental extensions
`–Xno-uescape`
  Disable handling of \u unicode escapes
`–Xplug-types`
  Parse but ignore annotations in more locations
`–Xplugin: <file>`
  Load a plugin from a file
`–Xplugin-disable: <plugin>`
  Disable a plugin
`–Xplugin-list`
  Print a synopsis of loaded plugins
`–Xplugin-opt: <plugin:opt>`
  Pass an option to a plugin
`–Xplugin-require: <plugin>`
  Abort unless a plugin is available
`–Xprint: <phases>`
  Print out program after <phases> (see below).
`–Xprint-pos`
  Print tree positions (as offsets)
`–Xprint-types`
  Print tree types (debugging option).
`–Xprompt`
  Display a prompt after each error (debugging option).
`–Xresident`
  Compiler stays resident, files to compile are read from standard input.
`–Xshow-class <class>`
  Show class info.
`–Xshow-object <object>`
  Show object info.
`–Xshow-phases`
  Print a synopsis of compiler phases.
`–Xsource-reader <classname>`
  Specify a custom method for reading source files.
`–Xscript <object>`
  Compile as a script, wrapping the code into object.main().

#### Compilation Phases

`initial`
  initializing compiler
`parse`
  parse source files
`namer`
  create symbols
`analyze`
  name and type analysis
`refcheck`
  reference checking
`uncurry`
  uncurry function types and applications
`lambdalift`
  lambda lifter
`typesasvalues`
  represent types as values
`addaccessors`
  add accessors for constructor arguments
`explicitouterclasses`
  make links from inner classes to enclosing one explicit
`addconstructors`
  add explicit constructor for each class
`tailcall`
  add tail-calls
`wholeprog`
  perform whole program analysis
`addinterfaces`
  add one interface per class
`expandmixins`
  expand mixins by code copying
`boxing`
  makes boxing explicit
`erasure`
  type eraser
`icode`
  generate icode
`codegen`
  enable code generation
`terminal`
  compilation terminated
`all`
  matches all phases

### ENVIRONMENT

`JAVACMD`
  Specify the `java` command to be used for running the Scala code. Arguments may be specified as part of the environment variable; spaces, quotation marks, etc., will be passed directly to the shell for expansion.
`JAVA_HOME`
  Specify JDK/JRE home directory. This directory is used to locate the `java` command unless `JAVACMD` variable set.
`JAVA_OPTS`
  Specify the options to be passed to the `java` command defined by `JAVACMD`.
  With Java 1.5 (or newer) one may for example configure the memory usage of the JVM as follows: `JAVA_OPTS="-Xmx512M -Xms16M -Xss16M"`
  With GNU Java one may configure the memory usage of the GIJ as follows: `JAVA_OPTS="--mx512m --ms16m"`

### EXAMPLES

Compile a Scala program to the current directory
  `scalac` `HelloWorld`
Compile a Scala program to the destination directory `classes`
  `scalac```–d classes` HelloWorld.scala`
Compile a Scala program using a user-defined `java` command
  `env JAVACMD``=/usr/local/bin/cacao` `scalac```–d classes` HelloWorld.scala`
Compile all Scala files found in the source directory `src` to the destination directory `classes`
  `scalac```–d classes` src/*.scala`

### EXIT STATUS

`scalac` returns a zero exist status if it succeeds to compile the specified input files. Non zero is returned in case of failure.

### AUTHOR

Written by Martin Odersky and other members of the Scala team.

### REPORTING BUGS

Report bugs to `http://lampsvn.epfl.ch/trac/scala`.

### COPYRIGHT

This is open-source software, available to you under a BSD-like license. See accomponying "copyright" or "LICENSE" file for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

### SEE ALSO

fsc(1), sbaz(1), scala(1), scaladoc(1), scalap(1)

version 0.4
scalac(1)
April 18, 2007