wenzelm@61656: (*:maxLineLen=78:*) wenzelm@61575: wenzelm@47825: theory Scala wenzelm@47825: imports Base wenzelm@47825: begin wenzelm@47825: wenzelm@58618: chapter \Isabelle/Scala development tools\ wenzelm@47825: wenzelm@61575: text \ wenzelm@61575: Isabelle/ML and Isabelle/Scala are the two main language environments for wenzelm@61575: Isabelle tool implementations. There are some basic command-line tools to wenzelm@61575: work with the underlying Java Virtual Machine, the Scala toplevel and wenzelm@61575: compiler. Note that Isabelle/jEdit @{cite "isabelle-jedit"} provides a Scala wenzelm@61575: Console for interactive experimentation within the running application. wenzelm@61575: \ wenzelm@47825: wenzelm@47825: wenzelm@58618: section \Java Runtime Environment within Isabelle \label{sec:tool-java}\ wenzelm@47825: wenzelm@61575: text \ wenzelm@61575: The @{tool_def java} tool is a direct wrapper for the Java Runtime wenzelm@61575: Environment, within the regular Isabelle settings environment wenzelm@61575: (\secref{sec:settings}). The command line arguments are that of the wenzelm@61575: underlying Java version. It is run in \<^verbatim>\-server\ mode if possible, to wenzelm@61575: improve performance (at the cost of extra startup time). wenzelm@47825: wenzelm@61575: The \<^verbatim>\java\ executable is the one within @{setting ISABELLE_JDK_HOME}, wenzelm@61575: according to the standard directory layout for official JDK distributions. wenzelm@61575: The class loader is augmented such that the name space of wenzelm@61575: \<^verbatim>\Isabelle/Pure.jar\ is available, which is the main Isabelle/Scala module. wenzelm@47825: wenzelm@61575: For example, the following command-line invokes the main method of class wenzelm@61575: \<^verbatim>\isabelle.GUI_Setup\, which opens a windows with some diagnostic wenzelm@61575: information about the Isabelle environment: wenzelm@61407: @{verbatim [display] \isabelle java isabelle.GUI_Setup\} wenzelm@58618: \ wenzelm@47825: wenzelm@47825: wenzelm@58618: section \Scala toplevel \label{sec:tool-scala}\ wenzelm@47825: wenzelm@61575: text \ wenzelm@61575: The @{tool_def scala} tool is a direct wrapper for the Scala toplevel; see wenzelm@61575: also @{tool java} above. The command line arguments are that of the wenzelm@61575: underlying Scala version. wenzelm@47825: wenzelm@47825: This allows to interact with Isabelle/Scala in TTY mode like this: wenzelm@61407: @{verbatim [display] wenzelm@61407: \isabelle scala wenzelm@61407: scala> isabelle.Isabelle_System.getenv("ISABELLE_HOME") wenzelm@61407: scala> val options = isabelle.Options.init() wenzelm@61407: scala> options.bool("browser_info") wenzelm@61407: scala> options.string("document")\} wenzelm@58618: \ wenzelm@47825: wenzelm@47825: wenzelm@58618: section \Scala compiler \label{sec:tool-scalac}\ wenzelm@47825: wenzelm@61575: text \ wenzelm@61575: The @{tool_def scalac} tool is a direct wrapper for the Scala compiler; see wenzelm@61575: also @{tool scala} above. The command line arguments are that of the wenzelm@61575: underlying Scala version. wenzelm@47825: wenzelm@47825: This allows to compile further Scala modules, depending on existing wenzelm@61575: Isabelle/Scala functionality. The resulting class or jar files can be added wenzelm@61575: to the Java classpath using the \<^verbatim>\classpath\ Bash function that is provided wenzelm@61575: by the Isabelle process environment. Thus add-on components can register wenzelm@61575: themselves in a modular manner, see also \secref{sec:components}. wenzelm@47825: wenzelm@61575: Note that jEdit @{cite "isabelle-jedit"} has its own mechanisms for adding wenzelm@61575: plugin components, which needs special attention since it overrides the wenzelm@61575: standard Java class loader. wenzelm@61575: \ wenzelm@47825: wenzelm@52116: wenzelm@58618: section \Scala script wrapper\ wenzelm@52116: wenzelm@61575: text \ wenzelm@61575: The executable @{executable "$ISABELLE_HOME/bin/isabelle_scala_script"} wenzelm@61575: allows to run Isabelle/Scala source files stand-alone programs, by using a wenzelm@62415: suitable ``hash-bang'' line and executable file permissions. For example: wenzelm@61407: @{verbatim [display] wenzelm@61407: \#!/usr/bin/env isabelle_scala_script wenzelm@52116: wenzelm@52116: val options = isabelle.Options.init() wenzelm@52116: Console.println("browser_info = " + options.bool("browser_info")) wenzelm@61407: Console.println("document = " + options.string("document"))\} wenzelm@52116: wenzelm@62415: This assumes that the executable may be found via the @{setting PATH} from wenzelm@62415: the process environment: this is the case when Isabelle settings are active, wenzelm@62415: e.g.\ in the context of the main Isabelle tool wrapper wenzelm@63680: \secref{sec:isabelle-tool}. Alternatively, the full wenzelm@63680: \<^file>\$ISABELLE_HOME/bin/isabelle_scala_script\ may be specified in expanded wenzelm@62415: form. wenzelm@61575: \ wenzelm@52116: wenzelm@47825: end