Nomadcoders - Dart 시작하기 #1

Nomadcoders - Dart 시작하기 #1

Dart VM, JIT, AOT, Dart Style Guide에 대한 내용입니다.

알게된 사실 👨🏻‍💻

Dart VM과 JIT, AOT

Dart Native (machine code JIT and AOT)

During development, a fast developer cycle is critical for iteration. The Dart VM offers a just-in-time compiler (JIT) with incremental recompilation (enabling hot reload), live metrics collections (powering DevTools), and rich debugging support. When apps are ready to be deployed to production—whether you’re publishing to an app store or deploying to a production backend—the Dart ahead-of-time (AOT) compiler can compile to native ARM or x64 machine code. Your AOT-compiled app launches with consistent, short startup time. The AOT-compiled code runs inside an efficient Dart runtime that enforces the sound Dart type system and manages memory using fast object allocation and a generational garbage collector.

출처 : https://dart.dev/overview#platform


Dart의 핵심 기능 중 하나는, 개발 중 빠른 피드백과 반복이 가능하다는 것이다.

Dart VM의 JIT(Just-In-Time) 컴파일러가 이를 가능하게 해준다.

JIT 컴파일러는 앱이 실행되는 동안 필요한 코드를 기계 코드로 변환하여 개발 중에 코드의 변경사항을 빠르게 반영할 수 있게 해준다.

또한 수정된 코드만 재컴파일하는 hot reload 기능을 통해 개발자가 즉시 코드 변경의 결과를 볼 수 있게 해준다.

주의해야할 점은 실제로 배포하는 경우, AOT(Ahead-Of-Time) 컴파일러를 사용한다는 것이다.

배포 시에는 AOT 컴파일을 통해 최적화된 기계 코드로 변환하여 높은 성능과 빠른 시작 시간을 보장한다.

정리하자면, 아래와 같다.

  1. Dart VM은 두 가지 컴파일 모드(JIT, AOT)를 지원한다.
  2. 개발 중에는 JIT 컴파일을 사용하여 코드 변경 사항을 빠르게 반영하고, 동적으로 Dart 코드를 기계 코드로 변환하여 실행한다.
  3. 배포 시에는 AOT 컴파일을 통해 다른 CPU 아키텍쳐에 맞춰서 빠른 기계어, 컴파일된 바이너리를 제공하며, 변환된 코드는 Dart VM 위에서 실행된다.

Dart 스타일 가이드는 var를 가능한 한 많이 사용하는 것을 권장한다?

dynamic은 필요한 경우에만 사용하고, 함수 또는 메서드 내에서 지역 변수를 선언하는 경우 var를 사용하는 것이 dart 스타일 가이드의 권장 방식이다. var을 가능한 한 많이 사용하는 것이 권장되며, 타입을 지정하는 방식은 클래스의 속성을 작성할 때 사용하는 것이 권장된다.

개인적으로는 사실 가능하다면 모두 타입을 작성해주는 것을 선호하는 편이었다.

그러나 최근, SvelteTurbo, Drizzle에서 명시적인 타이핑과 관련된 부가적인 작업, 복잡한 타입 변환이 개발 프로세스에 방해가 된다는 이유로 Typescript를 퇴출하려는 움직임을 보이고 있어서 주시해야 할 부분인 것 같다고 느꼈다.

직접적인 연관성은 없겠지만, 코드의 간결성과 가독성, 효율성을 최대한 향상시키려는 것이 요즘 트렌드가 되고 있다고 느끼고 있고 이를 위해 Dart 스타일 가이드에서 권장한 대로 var를 가능한 한 많이 사용하려고 노력해 볼 생각이다.

Dart 스타일 가이드와 관련해서는, 아래 링크들을 참고하고자 한다.

  1. Effective Dart: Style
  2. Style guide for Flutter repo
  3. Official Dart lint rules
  4. pedantic(deprecated)
  5. effective_dart(deprecated)
  6. Dart 3.1 & a retrospective on functional style programming in Dart 3