- Luau는 Lua 5.1에서 파생된 빠르고 안전하며 점진적 타입을 지원하는 임베디드 스크립트 언어임
- Roblox 플랫폼의 복잡한 게임과 대규모 코드베이스를 지원하기 위해 성능, 언어 도구, 타입 시스템을 강화하여 발전함
- 기본 Lua와 달리 샌드박싱 기능을 갖추어 권한이 다른 코드가 나란히 실행될 수 있도록 설계됨
- 문법은 Lua 5.1과 호환되지만, 추가 구문 확장과 분석 도구(linter, 타입 체커) 를 제공해 코드 품질을 높임
- 성능 최적화, 맞춤형 바이트코드, JIT 지원 등으로 LuaJIT 수준의 실행 속도를 목표하며, Roblox를 넘어 다양한 임베디드 환경에서도 활용 가능성이 큼
Motivation (등장 배경)
- 2006년경 Roblox는 게임 스크립팅 언어로 Lua 5.1을 도입함
- 시간이 흐르면서 Roblox 플랫폼의 게임 수준이 높아지고 팀 규모가 커짐에 따라 기존 Lua의 한계를 극복하기 위해 언어와 구현을 대폭 개선함
- 플랫폼의 성장에 따라 성능 최적화, 사용자 친화성, 언어 관련 툴 개발에 많은 투자를 진행했음
- 특히 2020년 기준 1백만 라인 이상의 대규모 코드베이스를 관리하면서 점진적 타입 시스템의 도입이 필수적임을 인식함
- 이런 필요성에 기반해 Roblox는 Lua에서 파생된 Luau라는 언어를 개발했으며, 빠르고, 작고, 안전하면서도 점진적으로 타입을 적용할 수 있는 기능을 제공
- 더 자세한 설명은 Why Luau 문서에 제공
Luau 개요
-
Luau는 Lua 5.1을 기반으로 한 임베디드 스크립트 언어
- 빠르고 가벼운 런타임 제공
- 점진적 타입 시스템을 지원하여 동적·정적 분석 병행 가능
- Roblox Studio에 통합되어 있으며,
--!strict플래그로 엄격 모드 활성화 가능 - 개발자는 Luau Creator Docs에서 Roblox와 연계된 문서를 확인할 수 있음
Sandboxing (샌드박스 기능)
- Luau는 노출되는 표준 라이브러리를 제한하고 추가 샌드박싱 기능을 제공함
- 이를 통해 일반 개발자가 작성한 비권한 코드와 플랫폼 내부의 권한 코드를 안전하게 병렬 실행 가능
- 이로 인해 기본 Lua와는 다른 실행 환경을 가짐
- 세부 내용은 Sandbox 설명에서 확인 가능
Compatibility (호환성)
- 가능한 한 Lua 5.1과의 하위 호환성을 유지하며, 이후 버전의 기능도 일부 반영
- 하지만 Luau는 Lua의 모든 설계 결정을 수용하지 않음, Roblox 특유의 사용 사례와 제약을 반영함
- Lua 5.1 이후 버전 기능의 지원 현황은 Compatibility 문서에서 제공됨
Syntax (문법)
- Lua 5.1 문법과 완전 호환됨
- 추가적으로 현대적이고 친숙한 구문 확장을 제공하여 개발 편의성을 높임
- 전체 문법은 Syntax 문서에서 확인 가능
Analysis (분석 도구)
-
올바른 코드 작성을 돕기 위해 스크립트 분석 도구 제공
-
구성 요소:
- Linter: 일반적 오류 탐지
- Type Checker: 타입 검증
-
luau-analyzeCLI 도구로 실행 가능 -
린트 규칙은 Lint 문서, 타입 체크 가이드는 Typecheck 문서 참조
Performance (성능)
- 파서, 린터, 타입 체커가 포함된 커스텀 프런트엔드와 최적화된 바이트코드, 인터프리터, 컴파일러 제공
- 경우에 따라 LuaJIT 인터프리터와 경쟁할 수 있는 성능 제공
- x64·ARM64 플랫폼에서 수동 JIT 컴파일러 지원, 특정 프로그램 성능을 크게 향상 가능
- 지속적으로 런타임을 최적화하고 일부를 재작성하여 효율성을 개선 중
- 성능 세부 특성은 Performance 문서에서 제공됨
Libraries (라이브러리)
- 언어 자체는 Lua 5.1의 완전한 상위 집합
- 표준 라이브러리에서는 일부 함수 제거 및 일부 신규 함수 추가
- 애플리케이션에 내장될 때는 앱별 확장 라이브러리에도 접근 가능
- 전체 라이브러리 문서는 Library 문서에서 확인 가능