1P by xguru 3일전 | ★ favorite | 댓글 3개
  • 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로 활용 가능
  • 루프 등 특정 언어 기능 비활성화 가능
  • 키워드/연산자 비활성화 및 제한 가능
  • 사용자 정의 연산자 및 문법 확장 가능

추가 자료

라이선스

  • Apache 2.0 또는 MIT 중 선택 가능
  • 기여된 코드는 기본적으로 듀얼 라이선스 적용

스크립팅 언어를 찾으시는 거라면 are we game yet에 리스트가 좀 있습니다.

https://arewegameyet.rs/ecosystem/scripting/

저 리스트에는 없는데, 최근에 GPT한테 물어보다가 koto 라는 스크립팅 언어도 발견했는데 잠깐 살펴보다 말았는데 이것도 좋아보이더라구요.

https://koto.dev/

검색하다보니 roto 라는 것도 발견했는데 이건 어떤건지까지는 살펴보진 않았는데 제작한 곳이 뭔가 눈에 익더라구요

https://github.com/NLnetLabs/roto

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

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