src/Doc/System/Scala.thy
author wenzelm
Mon, 04 Aug 2014 17:53:17 +0200
changeset 59071 4a5d335a6fc7
parent 58662 00f2c8d1aa0b
child 59180 85ec71012df8
permissions -rw-r--r--
tuned;
     1 theory Scala
     2 imports Base
     3 begin
     4 
     5 chapter {* Isabelle/Scala development tools *}
     6 
     7 text {* Isabelle/ML and Isabelle/Scala are the two main language
     8 environments for Isabelle tool implementations.  There are some basic
     9 command-line tools to work with the underlying Java Virtual Machine,
    10 the Scala toplevel and compiler.  Note that Isabelle/jEdit
    11 \cite{isabelle-jedit} provides a Scala Console for interactive
    12 experimentation within the running application. *}
    13 
    14 
    15 section {* Java Runtime Environment within Isabelle \label{sec:tool-java} *}
    16 
    17 text {* The @{tool_def java} tool is a direct wrapper for the Java
    18   Runtime Environment, within the regular Isabelle settings
    19   environment (\secref{sec:settings}).  The command line arguments are
    20   that of the underlying Java version.  It is run in @{verbatim
    21   "-server"} mode if possible, to improve performance (at the cost of
    22   extra startup time).
    23 
    24   The @{verbatim java} executable is the one within @{setting
    25   ISABELLE_JDK_HOME}, according to the standard directory layout for
    26   official JDK distributions.  The class loader is augmented such that
    27   the name space of @{verbatim "Isabelle/Pure.jar"} is available,
    28   which is the main Isabelle/Scala module.
    29 
    30   For example, the following command-line invokes the main method of
    31   class @{verbatim isabelle.GUI_Setup}, which opens a windows with
    32   some diagnostic information about the Isabelle environment:
    33 \begin{alltt}
    34   isabelle java isabelle.GUI_Setup
    35 \end{alltt}
    36 *}
    37 
    38 
    39 section {* Scala toplevel \label{sec:tool-scala} *}
    40 
    41 text {* The @{tool_def scala} tool is a direct wrapper for the Scala
    42   toplevel; see also @{tool java} above.  The command line arguments
    43   are that of the underlying Scala version.
    44 
    45   This allows to interact with Isabelle/Scala in TTY mode like this:
    46 \begin{alltt}
    47   isabelle scala
    48   scala> isabelle.Isabelle_System.getenv("ISABELLE_HOME")
    49   scala> val options = isabelle.Options.init()
    50   scala> options.bool("browser_info")
    51   scala> options.string("document")
    52 \end{alltt}
    53 *}
    54 
    55 
    56 section {* Scala compiler \label{sec:tool-scalac} *}
    57 
    58 text {* The @{tool_def scalac} tool is a direct wrapper for the Scala
    59   compiler; see also @{tool scala} above.  The command line arguments
    60   are that of the underlying Scala version.
    61 
    62   This allows to compile further Scala modules, depending on existing
    63   Isabelle/Scala functionality.  The resulting class or jar files can
    64   be added to the Java classpath using the @{verbatim classpath} Bash
    65   function that is provided by the Isabelle process environment.  Thus
    66   add-on components can register themselves in a modular manner, see
    67   also \secref{sec:components}.
    68 
    69   Note that jEdit \cite{isabelle-jedit} has its own mechanisms for
    70   adding plugin components, which needs special attention since
    71   it overrides the standard Java class loader.  *}
    72 
    73 
    74 section {* Scala script wrapper *}
    75 
    76 text {* The executable @{executable
    77   "$ISABELLE_HOME/bin/isabelle_scala_script"} allows to run
    78   Isabelle/Scala source files stand-alone programs, by using a
    79   suitable ``hash-bang'' line and executable file permissions.
    80 
    81   The subsequent example assumes that the main Isabelle binaries have
    82   been installed in some directory that is included in @{setting PATH}
    83   (see also @{tool "install"}):
    84 
    85 \begin{alltt}
    86 #!/usr/bin/env isabelle_scala_script
    87 
    88 val options = isabelle.Options.init()
    89 Console.println("browser_info = " + options.bool("browser_info"))
    90 Console.println("document = " + options.string("document"))
    91 \end{alltt}
    92 
    93   Alternatively the full @{file
    94   "$ISABELLE_HOME/bin/isabelle_scala_script"} may be specified in
    95   expanded form.  *}
    96 
    97 end