Lua (от португальского “луна”) — облегченный скриптовый язык c расширяемой семантикой.

Lua был создан и поддерживается представителями Pontifical Catholic University Рио-де-Жанейро. У него нет официального стандарта, и стандартом считается описание в руководстве пользователя.

Lua — скриптовый (интерпретируемый) язык программирования, разработанный подразделением Tecgraf Католического университета Рио-де-Жанейро. Является свободно распространяемым, с открытыми исходными текстами на языке Си. Скрипты на языке Lua часто используется при создании логики игр.

Lua — один из самых известных (наряду с Python, Java, С#) скриптовых языков, применяемых для разработки игр. Отличается простотой синтаксиса, относительно высокой скоростью исполнения, небольшим размером подключаемого модуля. Имеются библиотеки для связи нативного кода с кодом на Lua — стандартными средствами, либо luabind.

Lua имеет аскетичную стандартную библиотеку. Изначально не поддерживает концепцию OOP.

В настоящее время Lua является самым популярным скриптовым языком в индустрии игр и используется в ряде приложений в других предметных областях.

Lua является сравнительно новым языком и позаимствовал черты и идеи из ряда более старых языков:

· синтаксис структур управления логикой программы — из Modula;

· семантику более поздних версий — из Scheme;

· концепцию локальных переменных — из C++;

· концепцию наличия единственной встроенной структуры данных, используемой несколькими способами — из Lisp;

· использование ассоциативных массивов — из SNOBOL;

· множественные присвоения и возвраты из функций — из CLU etc.

Основополагающим принципом Lua является расширяемость семантики, т.е. предоставление мета-механизмов для реализации переменного набора инструментов вместо предоставления фиксированного набора инструментов. Это позволяет языку быть небольшим и простым, в то же время сохраняя мощность. Таким образом, Lua можно считать мультипарадигменным языком, поскольку он позволяет вести разработку в различных стилях.

Lua поддерживает логические, числовые (по умолчанию — числа с плавающей точкой двойной точности) и строковые атомарные типы данных. Единственным “родным” сложным типом данных является таблица — гетерогенный ассоциативный массив, позволяющий использовать разные типы данных для разных пар ключей и значений. Функции являются объектами первого класса, т.е. ими можно манипулировать точно так же, как переменными, передавать и получать как аргументы и т.д.

Эти два основные свойства позволяют реализовывать многие структуры данных и принципы, доступные в других языках, при помощи использования разных типов данных для ключей и значений ассоциативного массива:

· структуры: используем строки (~ имена полей) как ключи и атомы любых нужных типов (~ значения полей) как значения; для этого случая Lua предоставляет специальный синтаксис, позволяющий обращаться к значениям полей по имени поля.

· массивы: используем целые числа (~ индексы) как ключи и атомы одного нужного типа (~ элементы массива) как значения.

· множества: элементы множества можно хранить либо как ключи, либо как значения;

· ассоциативные массивы: очевидно;

· пространства имен: таблица может использоваться для хранения функций и переменных, относящихся к определенной предметной области;

· прототипы: Lua поддерживает объектно-ориентированную парадигму, позвояля хранить функции и данные, описывающие один объект, в одной таблице. Это именно прототипы, а не классы, т.к. новые объекты создаются клонированием существующих или использованием методов фабрики объектов.

Lua компилируется в байт-код, исполняемый на виртуальной машине Lua. Lua — скриптовый язык, созданный для встраивания в другие языки, поэтому предоставляет C API.

Элементы синтаксиса:

Комментарий до конца строки
--

Комментарии, которые могут быть вложенными
--[[...]]--

Регистрозависимость
Да

Присваивание значения переменной
=

Группировка выражений
(...)

Блок
do ... end

Равенство
==

Неравенство
~=

Меньше
<

Больше
>

Меньше или равно
<=

Больше или равно
>=

Определение функции
function f(p1, p2) ... end

Вызов функции
f(a, b, ...)

Вызов функции без параметров
f()

Последовательность
; или конец строки

Если - то
if condition then ... end

Если - то - иначе
if condition then ... else ... end

Цикл с предусловием
WHILE condition DO ... end

Цикл с постусловием
repeat ... until condition

Цикл for - next для диапазона целых чисел с инкрементом на 1
for i = 1, 10 do ... end

Цикл for - next для диапазона целых чисел с декрементом на 1
for i = 10, 1, -1 do ... end

IDE/Редакторы:

· jEdit
· SciTE