Skip to content

소개

우리는 자바스크립트의 세 번째 시대에 살고 있으며, 지금의 일반적인 흐름은 성능 향상을 위해 자바스크립트 도구를 루스트 또는 고로 작성하는 것입니다.

하지만 자바스크립트 도구를 개발하는 것은 이미 쉽지 않은 일이지만, 루스트로 작성하는 것은 더욱 도전적입니다.
이 기술들을 배울 때 저는 많은 어려움을 겪었고, 더 이상 다른 사람들이 제가 겪었던 고통의 여정을 밟지 않기를 바랍니다.

나는 이 가이드를 써서 커뮤니티에 기여하고 싶습니다. 그래서 당신도 제가 겪었던 여정을 반복할 필요 없도록 하기 위해서요.

루스트 측면에서 개발자는 아주 드물지만, 제가 당신이 여기에 함께 해주길 바라며, 모두가 즐길 수 있는 더 나은, 더 빠른 도구를 함께 만들 수 있기를 바랍니다.

개요

이 가이드에서는 표준 컴파일러 프론트엔드 단계를 적용합니다:

소스 텍스트 --> 리커 --> 토큰 --> 파서 --> 추상 구문 트리 (AST)

자바스크립트 파서를 작성하는 것은 비교적 쉬운 일입니다.
이는 10%의 아키텍처 결정과 90%의 세부 사항에 대한 열심히 작업하는 것에 달려 있습니다.

아키텍처 결정은 주로 두 가지 카테고리에 영향을 미칩니다:

  • 우리의 파서의 성능
  • 우리가 만든 추상 구문 트리(또는 AST)를 사용하기 얼마나 편한지

루스트로 파서를 구축하기 전에 모든 옵션과 상호 조건을 이해하면, 우리의 전체 여정이 훨씬 원활해질 것입니다.

성능

루스트 프로그램의 성능을 높이는 핵심은 메모리 할당을 최소화하고, 더 적은 CPU 사이클을 사용하는 것입니다.

메모리 할당이 어디에서 이루어지는지 쉽게 알 수 있는 방법은 힙에 할당된 객체를 찾는 것입니다. 예를 들어 Vec, Box, String 등이 해당됩니다.
이들 사용량을 판단함으로써 프로그램이 얼마나 빠를지 감을 잡을 수 있습니다.
할당할수록 프로그램은 더 느려집니다.

루스트는 '제로 코스트 추상화'의 힘을 제공합니다. 추상화가 성능 저하를 초래한다는 걱정은 크게 하지 않아도 됩니다.
알고리즘 복잡도에 주의한다면, 모든 것이 잘 될 것입니다.

INFO

루스트 성능 책도 읽어보세요.

루스트 소스 코드

함수 호출의 성능을 판단할 수 없는 경우, 루스트 문서의 "소스" 버튼을 눌러 소스 코드를 읽어보는 것을 두려워하지 마세요.
대부분의 경우 소스 코드는 이해하기 쉽습니다.

INFO

루스트 소스 코드를 탐색할 때 정의를 찾는 가장 간단한 방법은 fn 함수이름, struct 구조체이름, enum 열거형이름 등을 검색하는 것입니다.
이것은 루스트가 일관된 문법을 갖추고 있다는 점에서의 장점이며, 자바스크립트와 비교했을 때 큰 이점입니다 😉.