---
name: "scalac"
section: "1"
platform: "linux"
package: "scala"
version: "2.9.2+dfsg-2"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/scalac"
---

# scalac(1)

Compiler for the Scala 2 language

## 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)](/fsc/1.md), **sbaz**(1), [**scala**(1)](/scala/1.md), [**scaladoc**(1)](/scaladoc/1.md), [**scalap**(1)](/scalap/1.md)
