src/Doc/System/Scala.thy
author nipkow
Wed, 31 Jul 2024 10:36:28 +0200
changeset 80628 161286c9d426
parent 79724 54d0f6edfe3a
permissions -rw-r--r--
tuned names
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61656
cfabbc083977 more uniform jEdit properties;
wenzelm
parents: 61575
diff changeset
     1
(*:maxLineLen=78:*)
61575
f18f6e51e901 tuned whitespace;
wenzelm
parents: 61503
diff changeset
     2
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
     3
theory Scala
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
     4
imports Base
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
     5
begin
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
     6
72252
3b17e7688dc6 updated documentation;
wenzelm
parents: 72197
diff changeset
     7
chapter \<open>Isabelle/Scala systems programming \label{sec:scala}\<close>
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
     8
61575
f18f6e51e901 tuned whitespace;
wenzelm
parents: 61503
diff changeset
     9
text \<open>
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    10
  Isabelle/ML and Isabelle/Scala are the two main implementation languages of
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    11
  the Isabelle environment:
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    12
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    13
    \<^item> Isabelle/ML is for \<^emph>\<open>mathematics\<close>, to develop tools within the context
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    14
    of symbolic logic, e.g.\ for constructing proofs or defining
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    15
    domain-specific formal languages. See the \<^emph>\<open>Isabelle/Isar implementation
76987
4c275405faae isabelle update -u cite;
wenzelm
parents: 76764
diff changeset
    16
    manual\<close> \<^cite>\<open>"isabelle-implementation"\<close> for more details.
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    17
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    18
    \<^item> Isabelle/Scala is for \<^emph>\<open>physics\<close>, to connect with the world of systems
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    19
    and services, including editors and IDE frameworks.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    20
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    21
  There are various ways to access Isabelle/Scala modules and operations:
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    22
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    23
    \<^item> Isabelle command-line tools (\secref{sec:scala-tools}) run in a separate
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    24
    Java process.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    25
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    26
    \<^item> Isabelle/ML antiquotations access Isabelle/Scala functions
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    27
    (\secref{sec:scala-functions}) via the PIDE protocol: execution happens
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    28
    within the running Java process underlying Isabelle/Scala.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    29
76987
4c275405faae isabelle update -u cite;
wenzelm
parents: 76764
diff changeset
    30
    \<^item> The \<^verbatim>\<open>Console/Scala\<close> plugin of Isabelle/jEdit \<^cite>\<open>"isabelle-jedit"\<close>
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    31
    operates on the running Java application, using the Scala
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    32
    read-eval-print-loop (REPL).
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    33
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    34
  The main Isabelle/Scala/jEdit functionality is provided by
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    35
  \<^file>\<open>$ISABELLE_HOME/lib/classes/isabelle.jar\<close>. Further underlying Scala and
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    36
  Java libraries are bundled with Isabelle, e.g.\ to access SQLite or
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    37
  PostgreSQL via JDBC.
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    38
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    39
  Add-on Isabelle components may augment the system environment by providing
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    40
  suitable configuration in \<^path>\<open>etc/settings\<close> (GNU bash script). The
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    41
  shell function \<^bash_function>\<open>classpath\<close> helps to write
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    42
  \<^path>\<open>etc/settings\<close> in a portable manner: it refers to library \<^verbatim>\<open>jar\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    43
  files in standard POSIX path notation. On Windows, this is converted to
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    44
  native platform format, before invoking Java (\secref{sec:scala-tools}).
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    45
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    46
  \<^medskip>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    47
  There is also an implicit build process for Isabelle/Scala/Java modules,
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    48
  based on \<^path>\<open>etc/build.props\<close> within the component directory (see also
79058
f13390b2c1ee provide src/Tools/Demo as example for system component with Isabelle/Scala tool;
wenzelm
parents: 76987
diff changeset
    49
  \secref{sec:scala-build}). See \<^file>\<open>$ISABELLE_HOME/src/Tools/Demo/README.md\<close>
f13390b2c1ee provide src/Tools/Demo as example for system component with Isabelle/Scala tool;
wenzelm
parents: 76987
diff changeset
    50
  for an example components with command-line tools in Isabelle/Scala.
61575
f18f6e51e901 tuned whitespace;
wenzelm
parents: 61503
diff changeset
    51
\<close>
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    52
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    53
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    54
section \<open>Command-line tools \label{sec:scala-tools}\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    55
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    56
subsection \<open>Java Runtime Environment \label{sec:tool-java}\<close>
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    57
61575
f18f6e51e901 tuned whitespace;
wenzelm
parents: 61503
diff changeset
    58
text \<open>
f18f6e51e901 tuned whitespace;
wenzelm
parents: 61503
diff changeset
    59
  The @{tool_def java} tool is a direct wrapper for the Java Runtime
f18f6e51e901 tuned whitespace;
wenzelm
parents: 61503
diff changeset
    60
  Environment, within the regular Isabelle settings environment
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    61
  (\secref{sec:settings}) and Isabelle classpath. The command line arguments
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    62
  are that of the bundled Java distribution: see option \<^verbatim>\<open>-help\<close> in
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    63
  particular.
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    64
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    65
  The \<^verbatim>\<open>java\<close> executable is taken from @{setting ISABELLE_JDK_HOME}, according
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    66
  to the standard directory layout for regular distributions of OpenJDK.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    67
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    68
  The shell function \<^bash_function>\<open>isabelle_jdk\<close> allows shell scripts to
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    69
  invoke other Java tools robustly (e.g.\ \<^verbatim>\<open>isabelle_jdk jar\<close>), without
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    70
  depending on accidental operating system installations.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58553
diff changeset
    71
\<close>
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    72
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    73
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    74
subsection \<open>Scala toplevel \label{sec:tool-scala}\<close>
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    75
61575
f18f6e51e901 tuned whitespace;
wenzelm
parents: 61503
diff changeset
    76
text \<open>
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    77
  The @{tool_def scala} tool is a direct wrapper for the Scala toplevel,
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    78
  similar to @{tool java} above. The command line arguments are that of the
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    79
  bundled Scala distribution: see option \<^verbatim>\<open>-help\<close> in particular. This allows
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    80
  to interact with Isabelle/Scala interactively.
71897
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    81
\<close>
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    82
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    83
subsubsection \<open>Example\<close>
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    84
71897
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    85
text \<open>
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    86
  Explore the Isabelle system environment in Scala:
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    87
  @{verbatim [display, indent = 2] \<open>$ isabelle scala\<close>}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
    88
  @{scala [display, indent = 2]
71897
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    89
\<open>import isabelle._
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    90
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    91
val isabelle_home = Isabelle_System.getenv("ISABELLE_HOME")
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    92
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    93
val options = Options.init()
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    94
options.bool("browser_info")
2cf0b0293f0d proper check of example;
wenzelm
parents: 71892
diff changeset
    95
options.string("document")\<close>}
58618
782f0b662cae more cartouches;
wenzelm
parents: 58553
diff changeset
    96
\<close>
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    97
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
    98
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
    99
subsection \<open>Scala compiler \label{sec:tool-scalac}\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   100
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   101
text \<open>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   102
  The @{tool_def scalac} tool is a direct wrapper for the Scala compiler; see
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   103
  also @{tool scala} above. The command line arguments are that of the
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   104
  bundled Scala distribution.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   105
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   106
  This provides a low-level mechanism to compile further Scala modules,
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   107
  depending on existing Isabelle/Scala functionality; the resulting \<^verbatim>\<open>class\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   108
  or \<^verbatim>\<open>jar\<close> files can be added to the Java classpath using the shell function
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   109
  \<^bash_function>\<open>classpath\<close>.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   110
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   111
  A more convenient high-level approach works via \<^path>\<open>etc/build.props\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   112
  (see \secref{sec:scala-build}).
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   113
\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   114
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   115
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   116
section \<open>Isabelle/Scala/Java modules \label{sec:scala-build}\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   117
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   118
subsection \<open>Component configuration via \<^path>\<open>etc/build.props\<close>\<close>
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   119
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   120
text \<open>
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   121
  Isabelle components may augment the Isabelle/Scala/Java environment
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   122
  declaratively via properties given in \<^path>\<open>etc/build.props\<close> (within the
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   123
  component directory). This specifies an output \<^verbatim>\<open>jar\<close> \<^emph>\<open>module\<close>, based on
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   124
  Scala or Java \<^emph>\<open>sources\<close>, and arbitrary \<^emph>\<open>resources\<close>. Moreover, a module can
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   125
  specify \<^emph>\<open>services\<close> that are subclasses of
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   126
  \<^scala_type>\<open>isabelle.Isabelle_System.Service\<close>; these have a particular
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   127
  meaning to Isabelle/Scala tools.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   128
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   129
  Before running a Scala or Java process, the Isabelle system implicitly
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   130
  ensures that all provided modules are compiled and packaged (as jars). It is
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   131
  also possible to invoke @{tool scala_build} explicitly, with extra options.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   132
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   133
  \<^medskip>
75161
95612f330c93 misc tuning based on comments by Heiko Eißfeldt;
wenzelm
parents: 74960
diff changeset
   134
  The syntax of \<^path>\<open>etc/build.props\<close> follows a regular Java properties
79724
54d0f6edfe3a clarified versions for documentation;
wenzelm
parents: 79059
diff changeset
   135
  file\<^footnote>\<open>\<^url>\<open>https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Properties.html#load(java.io.Reader)\<close>\<close>,
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   136
  but the encoding is \<^verbatim>\<open>UTF-8\<close>, instead of historic \<^verbatim>\<open>ISO 8859-1\<close> from the API
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   137
  documentation.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   138
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   139
  The subsequent properties are relevant for the Scala/Java build process.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   140
  Most properties are optional: the default is an empty string (or list). File
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   141
  names are relative to the main component directory and may refer to Isabelle
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   142
  settings variables (e.g. \<^verbatim>\<open>$ISABELLE_HOME\<close>).
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   143
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   144
    \<^item> \<^verbatim>\<open>title\<close> (required) is a human-readable description of the module, used
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   145
    in printed messages.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   146
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   147
    \<^item> \<^verbatim>\<open>module\<close> specifies a \<^verbatim>\<open>jar\<close> file name for the output module, as result
74057
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   148
    of the specified sources (and resources). If this is absent (or
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   149
    \<^verbatim>\<open>no_build\<close> is set, as described below), there is no implicit build
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   150
    process. The contributing sources might be given nonetheless, notably for
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   151
    @{tool scala_project} (\secref{sec:tool-scala-project}), which includes
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   152
    Scala/Java sources of components, while suppressing \<^verbatim>\<open>jar\<close> modules (to
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   153
    avoid duplication of program content).
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   154
74057
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   155
    \<^item> \<^verbatim>\<open>no_build\<close> is a Boolean property, with default \<^verbatim>\<open>false\<close>. If set to
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   156
    \<^verbatim>\<open>true\<close>, the implicit build process for the given \<^verbatim>\<open>module\<close> is \<^emph>\<open>omitted\<close>
22ad3ac2152c clarified properties: "module" and "no_build";
wenzelm
parents: 74053
diff changeset
   157
    --- it is assumed to be provided by other means.
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   158
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   159
    \<^item> \<^verbatim>\<open>scalac_options\<close> and \<^verbatim>\<open>javac_options\<close> augment the default settings
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   160
    @{setting_ref ISABELLE_SCALAC_OPTIONS} and @{setting_ref
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   161
    ISABELLE_JAVAC_OPTIONS} for this component; option syntax follows the
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   162
    regular command-line tools \<^verbatim>\<open>scalac\<close> and \<^verbatim>\<open>javac\<close>, respectively.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   163
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   164
    \<^item> \<^verbatim>\<open>main\<close> specifies the main entry point for the \<^verbatim>\<open>jar\<close> module. This is
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   165
    only relevant for direct invocation like ``\<^verbatim>\<open>java -jar test.jar\<close>''.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   166
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   167
    \<^item> \<^verbatim>\<open>requirements\<close> is a list of \<^verbatim>\<open>jar\<close> modules that are needed in the
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   168
    compilation process, but not provided by the regular classpath (notably
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   169
    @{setting ISABELLE_CLASSPATH}).
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   170
74053
54a11c37d5bc tuned document;
wenzelm
parents: 74041
diff changeset
   171
    A \<^emph>\<open>normal entry\<close> refers to a single \<^verbatim>\<open>jar\<close> file name, possibly with
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   172
    settings variables as usual. E.g. \<^file>\<open>$ISABELLE_SCALA_JAR\<close> for the main
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   173
    \<^file>\<open>$ISABELLE_HOME/lib/classes/isabelle.jar\<close> (especially relevant for
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   174
    add-on modules).
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   175
75161
95612f330c93 misc tuning based on comments by Heiko Eißfeldt;
wenzelm
parents: 74960
diff changeset
   176
    A \<^emph>\<open>special entry\<close> is of the form \<^verbatim>\<open>env:\<close>\<open>variable\<close> and refers to a
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   177
    settings variable from the Isabelle environment: its value may consist of
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   178
    multiple \<^verbatim>\<open>jar\<close> entries (separated by colons). Environment variables are
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   179
    not expanded recursively.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   180
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   181
    \<^item> \<^verbatim>\<open>resources\<close> is a list of files that should be included in the resulting
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   182
    \<^verbatim>\<open>jar\<close> file. Each item consists of a pair separated by colon:
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   183
    \<open>source\<close>\<^verbatim>\<open>:\<close>\<open>target\<close> means to copy an existing source file (relative to
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   184
    the component directory) to the given target file or directory (relative
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   185
    to the \<^verbatim>\<open>jar\<close> name space). A \<open>file\<close> specification without colon
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   186
    abbreviates \<open>file\<close>\<^verbatim>\<open>:\<close>\<open>file\<close>, i.e. the file is copied while retaining its
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   187
    relative path name.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   188
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   189
    \<^item> \<^verbatim>\<open>sources\<close> is a list of \<^verbatim>\<open>.scala\<close> or \<^verbatim>\<open>.java\<close> files that contribute to
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   190
    the specified module. It is possible to use both languages simultaneously:
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   191
    the Scala and Java compiler will be invoked consecutively to make this
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   192
    work.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   193
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   194
    \<^item> \<^verbatim>\<open>services\<close> is a list of class names to be registered as Isabelle
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   195
    service providers (subclasses of
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   196
    \<^scala_type>\<open>isabelle.Isabelle_System.Service\<close>). Internal class names of
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   197
    the underlying JVM need to be given: e.g. see method @{scala_method (in
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   198
    java.lang.Object) getClass}.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   199
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   200
    Particular services require particular subclasses: instances are filtered
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   201
    according to their dynamic type. For example, class
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   202
    \<^scala_type>\<open>isabelle.Isabelle_Scala_Tools\<close> collects Scala command-line
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   203
    tools, and class \<^scala_type>\<open>isabelle.Scala.Functions\<close> collects Scala
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   204
    functions (\secref{sec:scala-functions}).
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   205
\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   206
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   207
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   208
subsection \<open>Explicit Isabelle/Scala/Java build \label{sec:tool-scala-build}\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   209
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   210
text \<open>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   211
  The @{tool_def scala_build} tool explicitly invokes the build process for
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   212
  all registered components.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   213
  @{verbatim [display]
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   214
\<open>Usage: isabelle scala_build [OPTIONS]
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   215
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   216
  Options are:
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   217
    -f           force fresh build
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   218
    -q           quiet mode: suppress stdout/stderr
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   219
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   220
  Build Isabelle/Scala/Java modules of all registered components
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   221
  (if required).
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   222
\<close>}
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   223
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   224
  For each registered Isabelle component that provides
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   225
  \<^path>\<open>etc/build.props\<close>, the specified output \<^verbatim>\<open>module\<close> is checked against
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   226
  the corresponding input \<^verbatim>\<open>requirements\<close>, \<^verbatim>\<open>resources\<close>, \<^verbatim>\<open>sources\<close>. If
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   227
  required, there is an automatic build using \<^verbatim>\<open>scalac\<close> or \<^verbatim>\<open>javac\<close> (or both).
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   228
  The identity of input files is recorded within the output \<^verbatim>\<open>jar\<close>, using SHA1
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   229
  digests in \<^verbatim>\<open>META-INF/isabelle/shasum\<close>.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   230
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   231
  \<^medskip>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   232
  Option \<^verbatim>\<open>-f\<close> forces a fresh build, regardless of the up-to-date status of
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   233
  input files vs. the output module.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   234
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   235
  \<^medskip>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   236
  Option \<^verbatim>\<open>-q\<close> suppresses all output on stdout/stderr produced by the Scala or
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   237
  Java compiler.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   238
75688
wenzelm
parents: 75161
diff changeset
   239
  \<^medskip> Explicit invocation of @{tool scala_build} mainly serves testing or
74041
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   240
  applications with special options: the Isabelle system normally does an
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   241
  automatic the build on demand.
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   242
\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   243
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   244
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   245
subsection \<open>Project setup for common Scala IDEs \label{sec:tool-scala-project}\<close>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   246
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   247
text \<open>
6bf9f94198a7 updated documentation on Isabelle/Scala;
wenzelm
parents: 73987
diff changeset
   248
  The @{tool_def scala_project} tool creates a project configuration for all
74960
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   249
  Isabelle/Java/Scala modules specified in components via
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   250
  \<^path>\<open>etc/build.props\<close>, together with additional source files given on
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   251
  the command-line:
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   252
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   253
  @{verbatim [display]
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   254
\<open>Usage: isabelle scala_project [OPTIONS] [MORE_SOURCES ...]
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   255
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   256
  Options are:
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   257
    -D DIR       project directory (default: "$ISABELLE_HOME_USER/scala_project")
74960
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   258
    -G           use Gradle as build tool
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   259
    -L           make symlinks to original source files
74960
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   260
    -M           use Maven as build tool
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   261
    -f           force update of existing directory
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   262
74960
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   263
  Setup project for Isabelle/Scala/jEdit --- to support common IDEs such
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   264
  as IntelliJ IDEA. Either option -G or -M is mandatory to specify the
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   265
  build tool.\<close>}
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   266
74960
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   267
  The generated configuration is for Gradle\<^footnote>\<open>\<^url>\<open>https://gradle.org\<close>\<close> or
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   268
  Maven\<^footnote>\<open>\<^url>\<open>https://maven.apache.org\<close>\<close>, but the main purpose is to import it
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   269
  into common IDEs like IntelliJ IDEA\<^footnote>\<open>\<^url>\<open>https://www.jetbrains.com/idea\<close>\<close>.
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   270
  This allows to explore the sources with static analysis and other hints in
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   271
  real-time.
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   272
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   273
  The generated files refer to physical file-system locations, using the path
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   274
  notation of the underlying OS platform. Thus the project needs to be
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   275
  recreated whenever the Isabelle installation is changed or moved.
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   276
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   277
  \<^medskip>
74960
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   278
  Option \<^verbatim>\<open>-G\<close> selects Gradle and \<^verbatim>\<open>-M\<close> selects Maven as Java/Scala build
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   279
  tool: either one needs to be specified explicitly. These tools have a
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   280
  tendency to break down unexpectedly, so supporting both increases the
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   281
  chances that the generated IDE project works properly.
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   282
f03ece7155d6 support Gradle as alternative to Maven (again);
wenzelm
parents: 74912
diff changeset
   283
  \<^medskip>
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   284
  Option \<^verbatim>\<open>-L\<close> produces \<^emph>\<open>symlinks\<close> to the original files: this allows to
74661
591303cc04c2 IDE build actually works (but somewhat pointless);
wenzelm
parents: 74656
diff changeset
   285
  develop Isabelle/Scala/jEdit modules within an external IDE. The default is
591303cc04c2 IDE build actually works (but somewhat pointless);
wenzelm
parents: 74656
diff changeset
   286
  to \<^emph>\<open>copy\<close> source files, so editing them within the IDE has no permanent
591303cc04c2 IDE build actually works (but somewhat pointless);
wenzelm
parents: 74656
diff changeset
   287
  effect on the originals.
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   288
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   289
  \<^medskip>
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   290
  Option \<^verbatim>\<open>-D\<close> specifies an explicit project directory, instead of the default
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   291
  \<^path>\<open>$ISABELLE_HOME_USER/scala_project\<close>. Option \<^verbatim>\<open>-f\<close> forces an existing
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   292
  project directory to be \<^emph>\<open>purged\<close> --- after some sanity checks that it has
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   293
  been generated by @{tool "scala_project"} before.
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   294
\<close>
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   295
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   296
74071
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   297
subsubsection \<open>Examples\<close>
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   298
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   299
text \<open>
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   300
  Create a project directory and for editing the original sources:
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   301
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   302
  @{verbatim [display] \<open>isabelle scala_project -f -L\<close>}
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   303
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   304
  On Windows, this usually requires Administrator rights, in order to create
b25b7c264a93 various improvements of "isabelle scala_project";
wenzelm
parents: 74057
diff changeset
   305
  native symlinks.
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   306
\<close>
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents: 63680
diff changeset
   307
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   308
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   309
section \<open>Registered Isabelle/Scala functions \label{sec:scala-functions}\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   310
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   311
subsection \<open>Defining functions in Isabelle/Scala\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   312
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   313
text \<open>
74911
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   314
  The service class \<^scala_type>\<open>isabelle.Scala.Functions\<close> collects Scala
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   315
  functions of type \<^scala_type>\<open>isabelle.Scala.Fun\<close>: by registering
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   316
  instances via \<^verbatim>\<open>services\<close> in \<^path>\<open>etc/build.props\<close>
75161
95612f330c93 misc tuning based on comments by Heiko Eißfeldt;
wenzelm
parents: 74960
diff changeset
   317
  (\secref{sec:scala-build}), it becomes possible to invoke Isabelle/Scala
74911
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   318
  from Isabelle/ML (see below).
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   319
74911
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   320
  An example is the predefined collection of
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   321
  \<^scala_type>\<open>isabelle.Scala.Functions\<close> in
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   322
  \<^file>\<open>$ISABELLE_HOME/etc/build.props\<close>. The overall list of registered functions
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   323
  is accessible in Isabelle/Scala as
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   324
  \<^scala_object>\<open>isabelle.Scala.functions\<close>.
74911
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   325
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   326
  The general class \<^scala_type>\<open>isabelle.Scala.Fun\<close> expects a multi-argument
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   327
  / multi-result function
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   328
  \<^scala_type>\<open>List[isabelle.Bytes] => List[isabelle.Bytes]\<close>; more common are
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   329
  instances of \<^scala_type>\<open>isabelle.Scala.Fun_Strings\<close> for type
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   330
  \<^scala_type>\<open>List[String] => List[String]\<close>, or
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   331
  \<^scala_type>\<open>isabelle.Scala.Fun_String\<close> for type
74a800810bde proper types for Scala.Fun instances (amending 1aa92bc4d356);
wenzelm
parents: 74661
diff changeset
   332
  \<^scala_type>\<open>String => String\<close>.
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   333
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   334
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   335
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   336
subsection \<open>Invoking functions in Isabelle/ML\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   337
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   338
text \<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   339
  Isabelle/PIDE provides a protocol to invoke registered Scala functions in
72103
7b318273a4aa discontinued old batch-build functionality;
wenzelm
parents: 71907
diff changeset
   340
  ML: this works both within the Prover IDE and in batch builds.
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   341
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   342
  The subsequent ML antiquotations refer to Scala functions in a
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   343
  formally-checked manner.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   344
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   345
  \begin{matharray}{rcl}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   346
  @{ML_antiquotation_def "scala_function"} & : & \<open>ML_antiquotation\<close> \\
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   347
  @{ML_antiquotation_def "scala"} & : & \<open>ML_antiquotation\<close> \\
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   348
  \end{matharray}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   349
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   350
  \<^rail>\<open>
72332
319dd5c618a5 allow Scala function execution on separate thread: better reactivity, but potential overloading of the JVM;
wenzelm
parents: 72252
diff changeset
   351
    (@{ML_antiquotation scala_function} |
73419
22f3f2117ed7 clarified signature: function_thread is determined in Isabelle/Scala, not Isabelle/ML;
wenzelm
parents: 72759
diff changeset
   352
     @{ML_antiquotation scala}) @{syntax embedded}
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   353
  \<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   354
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   355
  \<^descr> \<open>@{scala_function name}\<close> inlines the checked function name as ML string
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   356
    literal.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   357
72332
319dd5c618a5 allow Scala function execution on separate thread: better reactivity, but potential overloading of the JVM;
wenzelm
parents: 72252
diff changeset
   358
  \<^descr> \<open>@{scala name}\<close> and \<open>@{scala_thread name}\<close> invoke the checked function via
319dd5c618a5 allow Scala function execution on separate thread: better reactivity, but potential overloading of the JVM;
wenzelm
parents: 72252
diff changeset
   359
  the PIDE protocol. In Isabelle/ML this appears as a function of type
74912
c49362e85f5a proper ML types (amending 1aa92bc4d356);
wenzelm
parents: 74911
diff changeset
   360
  \<^ML_type>\<open>string list -> string list\<close> or \<^ML_type>\<open>string -> string\<close>,
c49362e85f5a proper ML types (amending 1aa92bc4d356);
wenzelm
parents: 74911
diff changeset
   361
  depending on the definition in Isabelle/Scala. Evaluation is subject to
c49362e85f5a proper ML types (amending 1aa92bc4d356);
wenzelm
parents: 74911
diff changeset
   362
  interrupts within the ML runtime environment as usual. A \<^scala>\<open>null\<close>
c49362e85f5a proper ML types (amending 1aa92bc4d356);
wenzelm
parents: 74911
diff changeset
   363
  result in Scala raises an exception \<^ML>\<open>Scala.Null\<close> in ML. The execution
c49362e85f5a proper ML types (amending 1aa92bc4d356);
wenzelm
parents: 74911
diff changeset
   364
  of \<open>@{scala}\<close> works via a Scala future on a bounded thread farm, while
75161
95612f330c93 misc tuning based on comments by Heiko Eißfeldt;
wenzelm
parents: 74960
diff changeset
   365
  \<open>@{scala_thread}\<close> always forks a separate Java/VM thread.
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   366
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   367
  The standard approach of representing datatypes via strings works via XML in
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   368
  YXML transfer syntax. See Isabelle/ML operations and modules @{ML
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   369
  YXML.string_of_body}, @{ML YXML.parse_body}, @{ML_structure XML.Encode},
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   370
  @{ML_structure XML.Decode}; similarly for Isabelle/Scala. Isabelle symbols
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   371
  may have to be recoded via Scala operations
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   372
  \<^scala_method>\<open>isabelle.Symbol.decode\<close> and
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   373
  \<^scala_method>\<open>isabelle.Symbol.encode\<close>.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   374
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   375
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   376
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   377
subsubsection \<open>Examples\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   378
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   379
text \<open>
72759
bd5ee3148132 more antiquotations (reverting 4df341249348);
wenzelm
parents: 72332
diff changeset
   380
  Invoke the predefined Scala function \<^scala_function>\<open>echo\<close>:
71907
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   381
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   382
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   383
ML \<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   384
  val s = "test";
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   385
  val s' = \<^scala>\<open>echo\<close> s;
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   386
  \<^assert> (s = s')
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   387
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   388
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   389
text \<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   390
  Let the Scala compiler process some toplevel declarations, producing a list
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   391
  of errors:
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   392
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   393
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   394
ML \<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   395
  val source = "class A(a: Int, b: Boolean)"
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   396
  val errors =
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   397
    \<^scala>\<open>scala_toplevel\<close> source
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   398
    |> YXML.parse_body
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   399
    |> let open XML.Decode in list string end;
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   400
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   401
  \<^assert> (null errors)\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   402
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   403
text \<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   404
  The above is merely for demonstration. See \<^ML>\<open>Scala_Compiler.toplevel\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   405
  for a more convenient version with builtin decoding and treatment of errors.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   406
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   407
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   408
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   409
section \<open>Documenting Isabelle/Scala entities\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   410
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   411
text \<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   412
  The subsequent document antiquotations help to document Isabelle/Scala
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   413
  entities, with formal checking of names against the Isabelle classpath.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   414
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   415
  \begin{matharray}{rcl}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   416
  @{antiquotation_def "scala"} & : & \<open>antiquotation\<close> \\
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   417
  @{antiquotation_def "scala_object"} & : & \<open>antiquotation\<close> \\
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   418
  @{antiquotation_def "scala_type"} & : & \<open>antiquotation\<close> \\
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   419
  @{antiquotation_def "scala_method"} & : & \<open>antiquotation\<close> \\
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   420
  \end{matharray}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   421
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   422
  \<^rail>\<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   423
    (@@{antiquotation scala} | @@{antiquotation scala_object})
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   424
      @{syntax embedded}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   425
    ;
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   426
    @@{antiquotation scala_type} @{syntax embedded} types
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   427
    ;
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   428
    @@{antiquotation scala_method} class @{syntax embedded} types args
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   429
    ;
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   430
    class: ('(' @'in' @{syntax name} types ')')?
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   431
    ;
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   432
    types: ('[' (@{syntax name} ',' +) ']')?
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   433
    ;
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   434
    args: ('(' (nat | (('_' | @{syntax name}) + ',')) ')')?
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   435
  \<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   436
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   437
  \<^descr> \<open>@{scala s}\<close> is similar to \<open>@{verbatim s}\<close>, but the given source text is
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   438
  checked by the Scala compiler as toplevel declaration (without evaluation).
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   439
  This allows to write Isabelle/Scala examples that are statically checked.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   440
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   441
  \<^descr> \<open>@{scala_object x}\<close> checks the given Scala object name (simple value or
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   442
  ground module) and prints the result verbatim.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   443
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   444
  \<^descr> \<open>@{scala_type T[A]}\<close> checks the given Scala type name (with optional type
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   445
  parameters) and prints the result verbatim.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   446
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   447
  \<^descr> \<open>@{scala_method (in c[A]) m[B](n)}\<close> checks the given Scala method \<open>m\<close> in
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   448
  the context of class \<open>c\<close>. The method argument slots are either specified by
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   449
  a number \<open>n\<close> or by a list of (optional) argument types; this may refer to
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   450
  type variables specified for the class or method: \<open>A\<close> or \<open>B\<close> above.
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   451
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   452
  Everything except for the method name \<open>m\<close> is optional. The absence of the
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   453
  class context means that this is a static method. The absence of arguments
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   454
  with types means that the method can be determined uniquely as \<^verbatim>\<open>(\<close>\<open>m\<close>\<^verbatim>\<open> _)\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   455
  in Scala (no overloading).
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   456
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   457
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   458
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   459
subsubsection \<open>Examples\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   460
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   461
text \<open>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   462
  Miscellaneous Isabelle/Scala entities:
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   463
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   464
    \<^item> object: \<^scala_object>\<open>isabelle.Isabelle_Process\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   465
    \<^item> type without parameter: @{scala_type isabelle.Console_Progress}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   466
    \<^item> type with parameter: @{scala_type List[A]}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   467
    \<^item> static method: \<^scala_method>\<open>isabelle.Isabelle_System.bash\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   468
    \<^item> class and method with type parameters:
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   469
      @{scala_method (in List[A]) map[B]("A => B")}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   470
    \<^item> overloaded method with argument type: @{scala_method (in Int) "+" (Int)}
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   471
\<close>
64c9628b39fc more documentation on Isabelle/Scala;
wenzelm
parents: 71897
diff changeset
   472
47825
4f25960417ae some coverage of Isabelle/Scala tools;
wenzelm
parents:
diff changeset
   473
end