Skip to content

소개

우리는 The Third Age of JavaScript에 있으며, 지금의 흐름은 성능을 위해 JavaScript 도구를 Rust나 Go로 만드는 것입니다.

그런데 JavaScript 도구를 만드는 것도 어렵고, Rust로 쓰면 더 어렵습니다. 저도 배우며 많이 헤맸고, 같은 길을 더 적은 사람이 걷기를 바랍니다.

이 가이드로 커뮤니티에 조금이나마 기여하고 싶었습니다. 같은 고생을 덜 하실 수 있도록요.

Rust 쪽 개발자는 소수이지만, 여러분이 합류해 모두가 쓸 더 좋고 빠른 도구를 함께 만들면 좋겠습니다.

개요

이 가이드는 전형적인 컴파일러 프런트엔드 단계를 따릅니다.

소스 텍스트 --> 렉서 --> 토큰 --> 파서 --> AST

JavaScript 파서는 “쉽다”고 말하기엔, 구조 결정이 10%, 나머지 90%는 세부에 대한 끈질긴 작업입니다.

구조적 선택은 대체로 두 축에 영향을 줍니다.

  • 파서 성능
  • AST를 소비하는 쪽의 편의성

Rust로 파서를 짓기 전 옵션과 트레이드오프를 알면 여정이 훨씬 수월합니다.

성능

빠른 Rust 프로그램의 핵심은 메모리를 덜 할당하고 CPU 사이클을 덜 쓰는 것입니다.

Vec, Box, String 같은 힙 할당을 찾으면 대략 어디서 비용이 나는지 알 수 있습니다. 할당이 많을수록 느립니다.

Rust는 제로코스트 추상화를 제공해 추상화가 성능을 망치지 않게 해 줍니다. 알고리즘 복잡도만 조심하면 대체로 괜찮습니다.

INFO

Rust Performance Book도 읽어 두세요.

Rust 소스 코드

함수 호출 비용이 코드만으로 안 보이면 Rust 문서의 “source” 버튼을 눌러 소스를 읽어 보세요. 대부분 읽기 어렵지 않습니다.

INFO

Rust 소스를 탐색할 때는 fn 이름, struct 이름, enum 이름처럼 검색하면 됩니다. 문법이 안정적이라는 것도 JavaScript보다 유리한 점입니다 😉.