Skip to content

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 중 선택 가능
  • 기여된 코드는 기본적으로 듀얼 라이선스 적용

See also

Favorite site