LUA

 

FAQ_clip0009

 

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