Lua
Lua | |
---|---|
Класс языка: | |
Тип исполнения: | |
Появился в: | |
Автор(ы): |
Роберту Иерузалимски, |
Расширение файлов: |
*.lua, *.luna |
Релиз: |
версия 5.4.7 [3] |
Типизация данных: | |
Испытал влияние: | |
Лицензия | |
Сайт: | |
Платформа: |
кроссплатформенность |
Lua (лу́а, порт. луна) — скриптовый язык программирования, разработанный бразильскими программистами в подразделении Tecgraf (Computer Graphics Technology Group) Католического университета Рио-де-Жанейро[1].
По идеологии и реализации язык Lua ближе всего к JavaScript, в частности, он также реализует прототипную модель ООП, но отличается паскалеподобным синтаксисом и более мощными и гибкими конструкциями. Особенностью Lua является его возможность лёгкой интеграции с программами, написанными на C++ и других языках.
Lua является языком динамической типизации, то есть в нём нет заранее заданных значений типов переменных. Все значения переменных привносят свой собственный тип[5].
История создания[править]
Язык программирования Lua был создан в 1993 году членами группы технологий компьютерной графики, Tecgraf. Его создателями стали Роберту Иерузалимски, Луис Энрике де Фигейредо и Вальдемар Селиш[1].
Предпосылки создания[править]
В начале 1990-х годов в Бразилии существовали строгие ограничения на импорт программного обеспечения, что вынуждало разработчиков создавать собственные решения. Это стало одной из основных причин, по которой команда решила разработать новый язык программирования. Они хотели создать язык, который был бы легким, гибким и легко интегрируемым в другие системы. В условиях ограниченного доступа к международным программным продуктам, разработчики были вынуждены искать альтернативные пути для удовлетворения своих потребностей.
Начало разработки[править]
Первоначально Lua был разработан как набор библиотек для расширения возможностей существующих систем. Однако вскоре стало ясно, что для достижения поставленных целей необходимо создать полноценный язык программирования. В 1993 году была выпущена первая версия Lua, которая включала в себя основные элементы, такие как таблицы, функции и управление памятью. Этот язык был простым и легким, что позволяло встраивать его в различные приложения.
Основные версии и их особенности[править]
С момента своего создания Lua прошел через множество изменений и улучшений. Основные этапы развития языка отражены в приведенной таблице[6].
Версия | Год выпуска | Описание |
---|---|---|
Lua 1.0 | 1993 | Первая версия включала в себя основные элементы, такие как таблицы, функции и управление памятью. |
Lua 2.0 | 1994 | Вторая версия добавила поддержку метатаблиц и улучшила производительность языка. Это дало возможность создавать сложные и гибкие структуры данных. |
Lua 3.0 | 1997 | Третья версия добавила поддержку замыканий и улучшила систему управления памятью. Замыкания позволили создавать более мощные и гибкие функции. |
Lua 4.0 | 2000 | Четвёртая версия добавила поддержку многозадачности. Эта версия также включала улучшения в области управления памятью и обработки ошибок. |
Lua 5.0 и далее | 2003 | Пятая версия добавила поддержку модулей. С тех пор было выпущено несколько новых версий Lua, каждая из которых добавляла новые возможности и улучшала производительность языка. |
Общие характеристики[править]
Lua — это процедурный динамически типизированный модульный язык с автоматическим управлением памятью. Включает базовые элементы для поддержки функционального и объектного стилей программирования. Встроенные средства параллельного программирования позволяют писать многопоточные программы только средствами языка, не обращаясь к внешним библиотекам. Так как основным назначением Lua является встраивание, он имеет эффективные средства межъязыкового взаимодействия, ориентированные, главным образом, на вызов библиотек C и на работу в C-окружении.
Язык поддерживает небольшое количество встроенных типов данных: логические значения, числа, строки, функции, потоки. Типичные комбинированные структуры данных, такие как массивы, наборы, списки и записи, отсутствуют, вместо всех их используется одна базовая структура Lua — таблица. Отдельный тип userdata предназначен специально для низкоуровневого программирования и обмена данными с внешним кодом на других языках. Функции в Lua являются объектами первого класса, могут присваиваться и передаваться в параметрах. Поддерживаются замыкания, есть возможность создания функций высших порядков. Объектная система прототипная, отсутствует явная поддержка наследования, однако оно легко реализуется с помощью метатаблиц.
Типы данных[править]
В языке Lua представлены следующие типы данных:
Тип данных | Описание | Пример |
---|---|---|
nil | Отсутствие значения или пустая переменная | foo = nil
|
number | Числовой тип, включая целые числа и числа с плавающей точкой | age = 30
|
string | Строковый тип для текстовых данных | name = "Николай"
|
boolean | Логический тип, принимающий значения true или false | isOnline = true
|
table | Структура данных для хранения массивов, списков и словарей (таблица) | user = {name = "Анна", age = 25}
|
function | Тип данных для функций. Lua может вызывать и манипулировать функциями, написанными на Lua и на С | function greet() print("Привет!") end
|
userdata | Предназначен для хранения произвольных С-данных в Lua-скриптах | file = io.open("log.txt", "r")
|
thread | Представляет независимый поток выполнения и используется для реализации сопрограмм | co = coroutine.create(function () print("Hello, World!") end
|
Синтаксис[править]
Основной алфавит языка — английский, в строковых литералах допускается использование символов других языков. Например:
string = "Статистика" --Статистика - литерал
Язык регистрозависимый, все ключевые слова пишутся в нижнем регистре, идентификаторы, различающиеся только регистром букв, считаются различными. Следующие 22 ключевых слова не могут быть использованы для имён[7]:
| and | break | do | else | elseif
| end | false | goto | for | function
| if | in | not | nil | local
| or | repeat| then | true | return
| until| while
Переменные и операторы[править]
- Переменные могут быть локальными и глобальными.
- Условные операторы позволяют выполнять код в зависимости от истинности условия.
- Циклы используются для многократного выполнения блока кода.
Если объявление переменной происходит с помощью ключевого слова local, переменная носит локальный характер и её область видимости ограничена текущим блоком. Без этого слова создаётся глобальная переменная. Третий вид переменных — поля таблиц[5].
Условные операторы в Lua начинаются с ключевого слова if, за которым следует условие и блок кода, выполняемый при истинности условия. Для создания циклов можно использовать while, repeat…until или числовой цикл for. При необходимости выражение break завершает исполнение цикла while, repeat или for, пропуская оставшиеся команды цикла. Ниже представлен пример использования этих конструкций:
Управляющая конструкция | Пример | Описание |
---|---|---|
Объявление переменной | local x = 10 |
Объявление локальной переменной. |
Условный оператор | if x > 5 then print("x больше 5") end |
Если значение переменной х >5, выводится «x больше 5». |
Цикл while | while x > 0 do x = x - 1 end |
Повторение блока кода, пока условие истинно. |
Цикл for | for i = 1, 10 do print(i) end |
Итерация по числовому диапазону. |
Арифметические операторы[править]
Lua поддерживает следующие арифметические операторы:
+
— сложение;-
— вычитание;*
— умножение;/
— деление;%
— остаток от деления;^
— возведение в степень.- Отдельно в этом ряду стоит унарный минус:
-
— это знак, который не является арифметическим действием, а лишь указывает на отрицательное число или меняет знак числа или выражения на противоположный.
Операторы сравнения[править]
==
— равенство;~=
— неравенство;<
— меньше;>
— больше;<=
— меньше или равно;>=
— больше или равно.
Битовые операторы[править]
&
— битовое И;|
— битовое ИЛИ;~
— битовое ИЛИ НЕ;>>
— правый сдвиг;<<
— левый сдвиг.
Логические операторы[править]
Кроме этого, в Lua существуют следующие текстовые логические операторы: and (И), or (ИЛИ) и not (НЕ). Как и управляющие структуры, все логические операторы считают false и nil как false («логический 0»), а все остальное как true («логическая 1»). Оператор отрицания not всегда возвращает false или true, инвертируя значение переменной.
Комментарии[править]
Комментарий в Lua начинается с двойного дефиса и заканчивается до конца строки. Многострочные комментарии заключены в двойные квадратные скобки.
-- Однострочный комментарий. Текст заканчивается до конца строки.
-- [[
-- Многострочный комментарий.
-- Текст может занимать несколько строк
-- ]]
Функции и таблицы[править]
- Создание функции начинается с ключевого слова function, за которым следует имя функции и набор параметров в круглых скобках. Например, функция сложения двух чисел выглядит так:
function addNumbers(a, b)
return a + b
end
Факториал — пример рекурсивной функции. Факториал натурального числа определяется как произведение всех натуральных чисел от 1 до n включительно:
function factorial(n)
if n == 0 then
return 1
else
return n * factorial(n - 1)
end
end
- Таблицы — это динамические ассоциативные массивы. Представляют собой составной тип информации, построенный по принципу массива, состоящего из пар «ключ-значение». Таблицы положены в основу всех пользовательских баз данных. Ключом (индексом) может быть любое значение, кроме nil. Создание таблицы происходит с помощью конструкции { }. При создании многомерных массивах чаще всего встречается реализация по типу «массив массивов»[8].
- В качестве примера таблицы можно привести таблицу с именами:
local names = {"Анна", "Светлана", "Галина"}
print(names[1]) -- будет выведено первое в строке имя 'Анна'
Кроссплатформенность[править]
Кроссплатформенность языка программирования — способность программного обеспечения работать как на разных аппаратных платформах, так и под разными операционными системами. Lua является кроссплатформенным интерпретируемым языком, способным работать в операционных системах Linux и Windows одновременно.
Кроме того, существует возможность совместной работы языка Lua с другими языками, например, с языком C++ или с языком JavaScript. Для работы с Луа и его дальнейшим внедрением в другой язык программирования необходим компилятор, совместимый с интерфейсом этого языка. Для того, чтобы работать с Луа в Windows, был создан специальный компилятор — SciTE (от англ. Scintilla based Text Editor). Для работы в Linux в силу его специфичности необходимо в окне «Терминал» выполнить ряд команд, обеспечивающих такую возможность[8].
Примечания[править]
- ↑ 1,0 1,1 1,2 About Lua. Lua.org. Архивировано из первоисточника 26 декабря 2018. Проверено 25 июля 2024.
- ↑ Lua Authors. Проверено 25 июля 2024.
- ↑ ANN Lua 5.4.7 now available. Проверено 25 июля 2024.
- ↑ Lua Licenses. Проверено 25 июля 2024.
- ↑ 5,0 5,1 Lua 5.3 Справочное руководство. Lua.org, PUC-Rio. Проверено 25 июля 2024.
- ↑ The evolution of an extension language: a history of Lua англ.. SBLP 2001 invited paper. Проверено 25 июля 2024.
- ↑ Lua 5.1 Reference Manual. Архивировано из первоисточника 15 ноября 2013. Проверено 26 июля 2024.
- ↑ 8,0 8,1 Знакомство с LUA и его компилятором: что должен знать программист. Авторские онлайн‑курсы для профессионалов (2022-02-04). Проверено 27 июля 2024.
Ссылки[править]
Шаблон:Lua (язык программирования)
![]() | Одним из источников, использованных при создании данной статьи, является статья из википроекта «Знание.Вики» («znanierussia.ru») под названием «Lua», расположенная по следующим адресам:
Материал указанной статьи полностью или частично использован в Циклопедии по лицензии CC-BY-SA 4.0 и более поздних версий. Всем участникам Знание.Вики предлагается прочитать материал «Почему Циклопедия?». |
---|