Roblox вики
Roblox вики
2092
страницы
Luau

Логотип Luau

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

Luaumascot

Официальным маскотом языка 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.

Ссылки[]