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