[Dart] 멀티 플랫폼 컴파일
Dart는 꽤 독특한 환경을 지원하는 언어다.
독자적인 VM을 통해서 실행할 수도 있고, AOT로 바이너리 컴파일을 할 수도 있고, Javascript/WASM으로의 트랜스파일도 지원하기 때문이다.
Dart VM을 통한 네이티브 실행
Dart는 Java의 JVM처럼 자체적인 VM을 지원한다.
Dart VM은 다른 VM들처럼 자체적인 GC와 JIT 기반의 최적화 등을 제공한다.
dart run으로 다트 코드를 실행한다면, 그건 기본적으로 dart VM 위에 올라가서 도는 것이다.

dart 코드를 미리 컴파일해뒀다가 VM 위에다 JIT 모드로 실행하고 싶다면, jit-snapshot를 뽑으면 된다.
이게 자바의 .jar와 비슷한 존재다.

그럼 컴파일 단계를 거치지 않고 즉시 실행할 수 있다.

Dart 네이티브 컴파일 (AOT)
Dart는 네이티브 바이너리로의 컴파일 기능도 기본으로 제공한다.
이걸 쓰면 다른 잡다한 종속성이나 Dart VM 없이도 실행할 수 있는 바이너리가 나온다.
dart compile exe ...
그러면 이렇게 바이너리가 바로 떨어지고, 실행이 가능해진다.
현 시점에서 dart의 aot 컴파일은 최적화 수준이 좋은 편은 아니다.
대부분의 상황에서는 dart VM으로 실행하는 것보다 다소 느리다.
Javascript로의 컴파일
Dart의 초기 목적 중 하나는 Javascript를 위한 고급 트랜스파일 언어였다.
지금은 Typescript가 독점하고 있는 그 위치 말이다.
사실 이런 용도로 쓰는 사람이 많지는 않은 걸로 알고 있는데, 아무튼 그런 역사성 때문에 기본으로 js 트랜스파일을 지원한다.
compile에 js 옵션을 넣으면

즉시 이런 형태로 javascript 결과물을 내어준다.
그러면 그대로 웹이든 어디든 쓰면 된다.
WASM
웹어셈블리 컴파일 기능도 제공한다.
그냥 컴파일에 옵션만 넣어주면 바로 만들어주는데

그럼 여기서 *.wasm 파일과 *.mjs로 된 본드 파일을 가져다가 쓰면 된다.


참조
https://dart.dev/overview
https://dart.dev/tools/dart-compile