# Rhai - Rust를 위한 내장 스크립팅 언어

> Clean Markdown view of GeekNews topic #23155. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=23155](https://news.hada.io/topic?id=23155)
- GeekNews Markdown: [https://news.hada.io/topic/23155.md](https://news.hada.io/topic/23155.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-09-19T09:43:08+09:00
- Updated: 2025-09-19T09:43:08+09:00
- Original source: [github.com/rhaiscript](https://github.com/rhaiscript/rhai)
- Points: 4
- Comments: 3

## Topic Body

- 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](https://rhai.rs)  
- 공식 문서: [_The Rhai Book_](https://rhai.rs/book)  
- 웹 기반 [Playground](https://rhai.rs/playground) 제공 (WebAssembly 기반)  
  
### 라이선스  
- Apache 2.0 또는 MIT 중 선택 가능  
- 기여된 코드는 기본적으로 듀얼 라이선스 적용

## Comments



### Comment 44071

- Author: coremaker
- Created: 2025-09-19T10:19:39+09:00
- Points: 1

wasm playground 시간 측정 예제들이 있는데 안빠른데요?

### Comment 44081

- Author: sftblw
- Created: 2025-09-19T13:27:12+09:00
- Points: 2
- Parent comment: 44071
- Depth: 1

스크립팅 목적의 언어라서 빠르지 않은게 정상일겁니다.

### Comment 44082

- Author: sftblw
- Created: 2025-09-19T13:30:08+09:00
- Points: 2

스크립팅 언어를 찾으시는 거라면 are we game yet에 리스트가 좀 있습니다.  
  
https://arewegameyet.rs/ecosystem/scripting/  
  
저 리스트에는 없는데, 최근에 GPT한테 물어보다가 koto 라는 스크립팅 언어도 발견했는데 잠깐 살펴보다 말았는데 이것도 좋아보이더라구요.  
  
https://koto.dev/  
  
검색하다보니 roto 라는 것도 발견했는데 이건 어떤건지까지는 살펴보진 않았는데 제작한 곳이 뭔가 눈에 익더라구요  
  
https://github.com/NLnetLabs/roto
