| # Dart VM Embedding examples | |
| Examples of using Dart VM and executing Dart code from C++ binaries. | |
| All examples can run either AOT or Kernel snapshots, depending on | |
| which shared library variant they depend on. | |
| Since snapshot file formats are unstable, the `dart` binary needs to | |
| be of a matching version. The simplest way to ensure this is to build | |
| Dart SDK from the same checkout, see [Building Dart | |
| SDK](https://github.com/dart-lang/sdk/blob/main/docs/Building.md#building). | |
| ## `run_main.cc` | |
| This is the simplest example, which just calls a `main` function from a given AOT/Kernel | |
| snapshot. It does not handle isolate messages, so it cannot run Dart | |
| programs with async functions. | |
| To run the example with a Kernel snapshot: | |
| ```sh | |
| ./tools/build.py --mode=release samples/embedder:run_main_kernel && \ | |
| out/ReleaseX64/run_main_kernel out/ReleaseX64/gen/hello_kernel.dart.snapshot. | |
| ``` | |
| To run the example with an AOT snapshot: | |
| ```sh | |
| ./tools/build.py --mode=release samples/embedder:run_main_aot && \ | |
| out/ReleaseX64/run_main_aot out/ReleaseX64/hello_aot.snapshot. | |
| ``` | |
| ## `run_two_programs.cc` | |
| This example calls a function from one Dart snapshot and then passes | |
| the returned string to another Dart snapshot. | |
| ## `run_timer.cc` | |
| Demonstrates running an isolate event loop in a separate thread. | |
| ## `run_timer_async.cc` | |
| Demonstrates a custom message scheduler using `std::async`. |