
Логотип Luau
Luau, Roblox Lua, LuaU - последовательно-типизированный язык программирования основанный на Lua 5.1. Используется для создания скриптов в Roblox Studio. Он также применяется в играх таких как Alan Wake 2 и Warframe в качестве внутреннего скриптового языка.

Официальным маскотом языка Luau является тюлень с именем Хина
История[]
Ещё в 2006 году, Roblox начал использовать Lua 5.1 как скриптовый язык для плейсов. С течением времени приходилось изменять среду выполнения для получения безопасной и изолированной среды.
После того, как Roblox увеличили значительную внутреннюю кодовую базу, которая должна была быть корректной и производительной, и сместили акцент с начинающих разработчиков на более опытных как на платформе Роблокса, так и в команде инженеров, возникла необходимость повысить производительность и качество кода, написанного ранее. Официальная дата начала разработки над Luau неизвестна.
27 августа 2019 года Roblox заменил Lua 5.1.4 на Luau в качестве скриптового языка.
3 ноября 2021 года выходит первая версия с открытым исходным кодом - 0.501. Все последующие версии также выходят в официальном GitHub-репозитории.
13 сентября 2024 года была представлена переработка в системе типов, которая еще находится в бета-стадии. В числе нового - типовые функции и поля, доступные только для чтения.
Отличия от Lua[]
Luau написан с учетом обратной совместимости с Lua 5.1. Также присутствуют некоторые нововведения из последующих версий Lua, но значительная их часть не реализована из-за возможных проблем с совместимостью или из-за того, что разработчики языка считают это нецелесообразным.
В то время как Lua реализован на ANSI C, Luau полностью с нуля был написан на С++17 со множественными улучшениями производительности.
Итераторные функции pairs
и ipairs
являются необязательными - в целях упрощения кода Luau позволяет обращаться к таблицам напрямую.
Проверка Типов[]
Luau поддерживает проверку типов и создание собственных типов. Строгость типизации может быть настроена или вовсе отключена, приписав нужную директиву в начало кода. По умолчанию проверка типов включена ( --!nonstrict
), --!strict
увеличивает строгость проверки, а --!nocheck
вовсе отключает.
Новый Решатель Типов от 13 сентября 2024 года предоставляет типовые функции keyof
, rawkeyof
, index
, rawget
а также возможность объявления полей в таблицах доступными только для чтения.
Генерация машинного кода[]
С версии 0.631 в Luau была представлена генерация машинного кода. Директивой --!native
код будет переводиться не только в байткод, но и в напрямую понятный для процессора машинный код, значительно увеличивая производительность программы.
Вне Roblox'а[]
Luau, как и Lua был изначально задуман как язык, который необходимо внедрять в существующий софт. Потому в целях безопасности Luau как самостоятельный язык практически не имеет стандартной библиотеки, недоступны даже средства ввода.
На данный момент Luau находится в стадии активной разработки, и возможны любые обновления, синтаксически меняющие язык.
Инструментарий[]
Под Luau активно разрабатывается софт как сообществом, так и самим Роблоксом. Одним из крупнейших проектов является полный перенос JavaScript-библиотеки React на Luau.
Во время Luau-разработки как на Роблоксе, так и вне Роблокса часто используется менеджер пакетов Wally, менеджеры инструментариев Aftman и Rokit.