Frontend server is simple wrapper around Dart Frontend. It is a Dart application that compiles Dart source into Dart Kernel binary (.dill-file). Documentation on Dart Kernel (semantic, binary format, etc) can be found here: https://github.com/dart-lang/sdk/wiki/Kernel-Documentation.
Frontend server runs in two modes:
Compiles <input.dart> Dart source file with Dart Frontend. Replies with
recompile <boundary-key> <path/to/updated/file1.dart> <path/to/updated/file2.dart> ... <boundary-key>
Incrementally recompiles Dart program previously compiled in current session, taking into account changes in the listed files. Replies with
Relative paths should be relative to current working directory for the shell that launched Frontend Server.
Accepts results of incremental compilation, so that on next recompilation request Dart Frontend will not include these recompiled files.
Rejects results of incremental compilation, so that on next recompilation request Dart Frontend will include compilation results from previously rejected recompilation in addition to what it will recompile based on newly changed files. Small technical detail is that Dart Frontend will not recompile files from previously rejected recompilation attempts (unless they were changed since then), it will just include appropriate kernel binaries it kept around from those previously rejected compilation requests.
One use of
reject instructions is in the context of Dart VM hot-reload. Dart VM can reject user-provided incremental change to what is currently running. It could happen for variety of Dart VM internal reasons. For example, if incremental update changes some
enum, such update can not be hot-reloaded by VM at this point, will be rejected.
Stops the server.
result <boundary-key> <compiler output> <boundary-key> [<output.dill>]
Response from the Dart Frontend compiler is bracketed by
<boundary-key> tags. If the compiler was able to produce a Dart Kernel file, the name of this file
<output.dill> is provided too. If the compiler encountered unrecoverable errors, there will be no output file name provided.