Rhai
Rust를 위한 내장 스크립팅 언어
About
- Rust 애플리케이션에 간단히 내장할 수 있는 스크립팅 언어 및 실행 엔진
- 외부 스크립트를 통해 동적 로직을 추가하거나, 커스텀 DSL을 제작할 수 있도록 설계됨
- Rust와 높은 호환성을 가지며, 성능·보안·확장성을 모두 고려한 아키텍처를 제공
- Rust 1.66.0+ 이상의 모든 Rust 지원 플랫폼(WASM, no-std)에서 동작
- 문법 은 JavaScript + Rust 와 유사한 동적 타이핑 언어
- 성능: 단일 코어 2.6GHz Linux VM에서 100만 반복 실행에 0.14초 소요
- 네이티브한 Rust 통합: Rust의 함수, 타입, getter/setter, 메서드, 인덱서 지원
- Rust 값은 변수/상수로 스크립트에 전달 가능 (Scope 사용)
- 주요 데이터 타입 지원 : 불리언, 정수, 부동소수점, Decimal, 문자열, 유니코드 문자, 배열, 바이트 배열, 객체 맵
- Rhai 스크립트에서 정의된 함수를 Rust에서 호출 가능
- 의존성 최소화(smallvec, thin-vec 등 소수 라이브러리만 사용)
- Re-entrant(재진입) 가능한 엔진 : sync를 통해 Send + Sync 가능
- AST 컴파일 및 최적화 기능 제공
- 플러그인 시스템과 매크로 기반 API 확장 지원
- 함수/연산자 오버로딩, 함수 포인터, 커링, 클로저, OOP 패턴 일부 지원
- 모듈 시스템 제공, 코드 기반을 동적으로 구성 가능
- serde 직렬화/역직렬화 지원(옵션)
- 디버깅 인터페이스 제공
보안 및 안전성
- Don’t Panic 보장: 패닉 발생 시 버그로 간주, 호스트 시스템은 안전
- 샌드박스 실행: 명시적으로 허용되지 않는 한 외부 환경 변경 불가
- 악의적 공격 방지 : 스택 오버플로, 과도한 데이터, 무한 실행 차단
- 실행 진행 상태 추적 및 수동 종료 가능
- Miri 검사 통과 완료
커스텀 언어를 제작하고자 하는 사람들을 위해
- Rhai를 DSL로 활용 가능
- 루프 등 특정 언어 기능 비활성화 가능
- 키워드/연산자 비활성화 및 제한 가능
- 사용자 정의 연산자 및 문법 확장 가능
추가 자료
- 프로젝트 사이트: rhai.rs
- 공식 문서: The Rhai Book
- 웹 기반 Playground 제공 (WebAssembly 기반)
라이선스
- Apache 2.0 또는 MIT 중 선택 가능
- 기여된 코드는 기본적으로 듀얼 라이선스 적용