Makepad, rustc 없이 Rust를 JIT 실행하는 Relax 공개...첫 프레임 11초, 최적화 코드는 1.12~1.24배 느림
- Makepad가 rustc, LLVM, 링커 없이 Cargo 패키지를 소스에서 바로 실행하는 Rust JIT 컴파일러 Relax를 공개함. 큰 3D 게임의 첫 프레임이 M4 맥북에서 11초, 두 번째 실행은 1.15초임.
- 함수를 처음 호출될 때 컴파일하고 뜨거운 함수는 실행 중에 최적화하며, 파일을 저장하면 바뀐 함수를 실행 중인 프로세스에 핫패치해 상태를 유지함. 92개 테스트 재실행이 저장 후 2.2초임.
- 최적화된 코드 성능은 rustc --release보다 느려 x64에서 1.12배, arm64에서 1.24배 시간이 걸림(21개 워크로드 기하평균). 릴리스 빌드가 아니라 편집-실행 루프용임.
- 438k 줄의 Rust로 작성했고 crates.io 의존성이 0개이며 x86-64와 AArch64 코드 생성을 지원함. Windows는 테스트하지 않았음.
- relax inspect로 패닉 시 스택을 유지한 채 정지, 브레이크포인트, 교착 진단(why-hung), 프로파일링, 플라이트 레코더, 힙 추적을 제공함. relax check는 아직 cargo check보다 빠르지 않음.
Hacker News opinions
makepad 개발자들이 빌드 시간에 진심인 건 알았는데 이 정도일 줄은 몰랐음. 근데 이건 AI 시대라서 가능했던 거고 예전엔 시도조차 못 했을 프로젝트임.
내용은 좋은데 웹사이트가 AI 슬롭 냄새 나는 게 아쉽더라. README만 봐도 충분하다는 사람도 있고.
CI 빌드 단축은 kache로 잘 쓰고 있음. sccache랑 비교하면 어떤지 궁금하네.
결국 컴파일 에러를 런타임으로 옮기는 건데 그게 좋은 건가? 로컬 개발 반복 속도만 보면 충분히 괜찮은 트레이드오프라고 봄.
에러 검사는 cargo check가 담당하고 보통 전체 시간에서 작은 부분임. 컴파일러는 대부분 코드젠에서 시간을 씀.
Lisp 이후로 코딩과 실행 사이 간격을 줄이는 아이디어가 계속 재발견되는 중임. Bret Victor의 Inventing on Principle부터 liveprog.org까지.
그건 Rust 빌드 시간이 10년간 논쟁거리였다는 걸 모르는 소리임. Rust는 Lisp이랑 완전히 다르고 그냥 재미로 빌드가 느린 게 아님.
Common Lisp이 그림자에서 자기 재발명을 편하게 지켜보는 중 ㅋㅋ 90년대 하드웨어에서 Lucid Energize나 VisualAge C++가 망한 게 아쉽더라.
이건 말도 안 되게 야심찬 Rust 재구현인데 대부분 클로드로 만든 것 같음. 개념적으로 어려운 게 아니라 노동량이 문제였던 거라 AI가 딱 맞았음.
클로드랑 코드덱스로 한 달 걸렸다고 함. 원샷은 아니고.
나도 비슷한 걸 만들었는데 Rust Analyzer가 코드를 내보내게 해서 브라우저에서 Rust를 빌드하고 반복할 수 있음.
타깃이나 디스크 사용량에는 영향이 어떤지 궁금함. 디스크는 더 낮을 텐데 최적화는 안 했다고 하고, 목표는 LLM 반복 지연이라고 함.
의존성 0개는 좋은데 438k 줄을 유지보수하는 건 부담 아니냐. AI가 유지하고 주 용도가 LLM 핫로딩이라 상관없다는 답변도 있었음.
한 달 만에 AI 기반 Rust 반복 컴파일러가 세 개나 나옴. relax, rustd, blaze.
그 'viable'은 따옴표 붙여야 함. blaze는 rustd 포크인데 라이선스 표기 지웠고 실제로 쓰는 사람은 없음. Cranelift는 10년 넘게 유지되는데.
회사에서 Go에서 Rust로 옮긴 뒤로 컴파일할 때마다 노트북이 뜨거워지고 버벅임. 게임 개발은 빌드가 10분 넘게 걸리기도 함.
actix-web 프로젝트에 직접 돌려봤는데 대부분 실행 실패했고 하나는 테스트가 깨짐. 유일하게 성공한 것도 서버 뜨는 데 14초 걸려서 핫패치는 못 쓸 수준이었음.