5 chapter {* Isabelle/Scala development tools *}
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. *}
15 section {* Java Runtime Environment within Isabelle \label{sec:tool-java} *}
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
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.
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:
34 isabelle java isabelle.GUI_Setup
39 section {* Scala toplevel \label{sec:tool-scala} *}
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.
45 This allows to interact with Isabelle/Scala in TTY mode like this:
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")
56 section {* Scala compiler \label{sec:tool-scalac} *}
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.
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}.
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. *}
74 section {* Scala script wrapper *}
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.
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"}):
86 #!/usr/bin/env isabelle_scala_script
88 val options = isabelle.Options.init()
89 Console.println("browser_info = " + options.bool("browser_info"))
90 Console.println("document = " + options.string("document"))
93 Alternatively the full @{file
94 "$ISABELLE_HOME/bin/isabelle_scala_script"} may be specified in