Change-Id: I27b38e2a6edc67e13662aa16da2fde13dc2501e9 Reviewed-on: https://dart-review.googlesource.com/c/90922 Commit-Queue: Peter von der Ahé <ahe@google.com> Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Fasta -- Fully-resolved AST, Accelerated.
Fasta is a compiler framework for compiling Dart sources to Kernel IR. When Fasta works well, you won't even know you're using it, as it will be transparently integrated in tools like dart, dartanalyzer, dart2js, etc.
Hopefully, you'll notice that Fasta-based tools are fast, with good error messages. If not, please let us know.
Fasta sounds like faster, and that's a promise we intend to keep.
Getting Started
- Build the VM and patched SDK. Note: you only need to build the targets
runtime_kernel, anddart_precompiled_runtime, so you only need to run this command:
./tools/build.py --mode release --arch x64 runtime_kernel dart_precompiled_runtime
Create an Outline File
-
Run
./pkg/front_end/tool/fasta outline pkg/compiler/lib/src/dart2js.dart -
Optionally, run
./pkg/front_end/tool/fasta dump-ir pkg/kernel/bin/dump.dart pkg/compiler/lib/src/dart2js.dart.dillto view the generated outline.
This will generate a file named pkg/compiler/lib/src/dart2js.dart.dill which contains a serialized representation of the input program excluding method bodies. This is similar to an analyzer summary.
Compiling a Program
./pkg/front_end/tool/fasta compile pkg/front_end/test/fasta/hello.dart
This will generate pkg/front_end/test/fasta/hello.dart.dill which can be run this way:
./sdk/bin/dart pkg/front_end/test/fasta/hello.dart.dill
Using dartk and the Analyzer AST
./pkg/front_end/tool/fasta analyzer-compile pkg/front_end/test/fasta/hello.dart
This will generate pkg/front_end/test/fasta/hello.dart.dill which can be run this way:
./sdk/bin/dart pkg/front_end/test/fasta/hello.dart.dill
Running Tests
Running dart2js
./pkg/front_end/tool/fasta compile pkg/compiler/lib/src/dart2js.dart
./sdk/bin/dart pkg/compiler/lib/src/dart2js.dart.dill pkg/front_end/test/fasta/hello.dart
The output of dart2js will be out.js, and it can be run on any Javascript engine, for example, d8 which is included with the Dart SDK sources:
./third_party/d8/<OS>/d8 out.js
Where <OS> is one of linux, macos, or windows.