| # Frontend Server |
| |
| 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: |
| - immediate mode, where Dart source file name is provided as command line |
| argument; |
| - interactive mode, where communication is happening over stdin/stdout. |
| |
| ## Interactive mode instructions |
| |
| ### Compile/Recompile |
| ``` |
| compile <input.dart> |
| ``` |
| Compiles <input.dart> Dart source file with Dart Frontend. Replies with `result` response. |
| |
| ``` |
| 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 `result` response. |
| |
| Relative paths should be relative to current working directory for the shell that launched |
| Frontend Server. |
| |
| ### Accept/Reject |
| ``` |
| accept |
| ``` |
| Accepts results of incremental compilation, so that on next recompilation request Dart Frontend |
| will not include these recompiled files. |
| ``` |
| reject |
| ``` |
| 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 `accept` and `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 `class` to `enum`, |
| such update can not be hot-reloaded by VM at this point, will be rejected. |
| |
| ### Quit |
| ``` |
| quit |
| ``` |
| Stops the server. |
| |
| ## Response from 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. |
| |