Luau расширяет Lua возможностями для проверки типов и некоторыми новыми синтаксическими конструкциями, такими как строковые литералы. Язык обратно совместим с Lua 5.1 и частично с более новыми версиями. Поддерживается API Lua Runtime, что позволяет использовать Luau с уже существующим кодом и привязками (binding). Языковой runtime основан на сильно переработанном коде Lua runtime 5.1, но интерпретатор полностью переписан. При разработке задействованы некоторые новые техники оптимизации, позволившие добиться более высокой производительности по сравнению с Lua.
Проект разработан компанией Roblox и используется в коде игровой платформы, игр, и пользовательских приложений данной компании, включая редактор Roblox Studio. Изначально Luau развивался за закрытыми дверями, но в итоге решено перевести его в разряд открытых проектов для дальнейшего совместного развития при участии сообщества.
Основные особенности:
- Последовательная система типов (Gradual typing), занимающая промежуточное положение между динамической и статической типизацией. Luau позволяет использовать статическую типизацию по необходимости, указывая информацию о типах через специальные аннотации. Предоставляются встроенные типы «any», «nil», «boolean», «number», «string» и «thread». При этом сохранена и возможность использования динамической типизации без явного определения типа переменных и функций.
function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end - Поддержка строковых литералов (как в Lua 5.3), таких как «
