Объявлено об открытии исходных текстов и публикации первого отдельного выпуска языка программирования Luau, продолжающего развитие языка Lua и обратно совместимого с Lua 5.1. Язык Luau предназначен в основном для встраивания обработчиков сценариев в приложения и нацелен на достижение высокой производительности и низкого потребления ресурсов. Код проекта написан на языке C++ и открыт под лицензией MIT.
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), таких как “