Rhai - Rust를 위한 내장 스크립팅 언어
(github.com/rhaiscript)- 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 중 선택 가능
- 기여된 코드는 기본적으로 듀얼 라이선스 적용
스크립팅 언어를 찾으시는 거라면 are we game yet에 리스트가 좀 있습니다.
https://arewegameyet.rs/ecosystem/scripting/
저 리스트에는 없는데, 최근에 GPT한테 물어보다가 koto 라는 스크립팅 언어도 발견했는데 잠깐 살펴보다 말았는데 이것도 좋아보이더라구요.
검색하다보니 roto 라는 것도 발견했는데 이건 어떤건지까지는 살펴보진 않았는데 제작한 곳이 뭔가 눈에 익더라구요