в lua что значит
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Lua (язык программирования)
Парадигма | мультипарадигмальный: императивный, функциональный, прототипно-ориентированный, скриптовый, встраиваемый |
---|---|
Спроектировано | Роберту Иерузалимски, Валдемар Селиш, Луиш Энрике ди Фигейреду |
Первый появившийся | 1993 |
Печать дисциплины | динамическая, строгая, «утиная» |
Расширение файла | .lua |
Главная реализация | |
Lua, LuaJIT, LLVM-Lua, LuaCLR, Nua, Lua Alchemy | |
Диалект | |
MetaLua | |
Под влиянием | |
Scheme, Снобол, Модула, Клу, C++ | |
Влияние | |
Io, GameMonkey, Squirrel, Dao, MiniD |
По идеологии, возможностям и реализации язык ближе всего к JavaScript, но Lua имеет более мощные и гораздо более гибкие конструкции. Механизмы объектно-ориентированного программирования, включая множественное наследование, могут быть реализованы с использованием метатаблиц, но понятие классов не содержится в Lua. Реализуемая объектная модель может быть названа прототипной (как в JavaScript). Использование языка в основном происходит для создания тиражируемого программного обеспечения. По причине легкого встраивания, скорости работы и легкости обучения язык получил признание среди пользователей, которым требуется язык программирования уровней и расширений во многих играх. Lua является свободным программным обеспечением с открытым исходным кодом, распространяется под лицензией MIT.
Содержание
История создания
Lua разработана подразделением Tecgraf (группа технологий компьютерной графики) Католического университета Рио-де-Жанейро в Бразилии. Язык используется с 1993 года. Авторы языка — Роберту Иерузалимски, Луиш Энрике ди Фигейреду (Luiz Henrique de Figueiredo) и Валдемар Селиш (Waldemar Celes).
Родителями Lua были языки конфигурирования и описания данных SOL (Simple Object Language) и DEL (Data-Entry Language). Они были независимо разработаны в Tecgraf в 1992—1993 годах для добавления некоторой гибкости в два отдельных проекта. Из-за недостатков в SOL и DEL(отсутствовали управляющие конструкции), и Petrobras чувствовал необходимость в добавлении к ним полноценного программирования.
Lua 1.0 была спроектирована так, что её конструкторы объектов включали в себя синтаксис языка SOL (отсюда название Lua: по-португальски sol — «солнце», lua — «луна»). Управляющие конструкции Lua были взяты из Modula (if, while, repeat/until), CLU (параллельное присваивание, множественное возвращаемое значение функции как более простая альтернатива вместо передачи параметров по ссылке или явных указателей), C++, SNOBOL и AWK (ассоциативные массивы).
Версии Lua вплоть до 5.0 выпускались под лицензией, подобной лицензии BSD. Начиная с версии 5.0 и выше Lua распространяется под лицензией MIT. Обе лицензии являются пермиссивными и практически идентичны.
Инструменты
Автономный интерпретатор (также называемый lua.c по имени файла исходного кода, или просто lua по исполняемому файлу) представляет собой небольшую программу, позволяющую прямое использование Lua. Когда интерпретатор загружает файл, он игнорирует первую строку, если она начинается со «знака числа» («#»). Эта особенность позволяет использовать Lua как интерпретатор скриптов в Unix-системах. Если вы предваряете свой код строкой вида
(при условии, что автономный интерпретатор расположен в /usr/local/bin ), или
то вы можете вызывать (исполнять) программу напрямую, без необходимости предварительно запускать интерпретатор Lua.
загрузит файл a.lua, затем выполнит присваивание x = 10, и, наконец, предоставит командную строку для ввода.
Основные принципы
Лексические соглашения
Именами (идентификаторами) в Lua могут быть любые строки из букв, цифр и символа подчеркивания, не начинающиеся с цифры. Следующие ключевые слова зарезервированы и не могут быть использованы в именах:
and | break | do | else | elseif |
end | false | for | function | if |
in | local | nil | not | or |
repeat | return | then | true | until |
while |
Lua является языком, чувствительным к регистру символов: and – ключевое слово, тогда как And и AND– два разных допустимых идентификатора. По соглашению, имена, начинающиеся с символа подчеркивания и записанные в верхнем регистре (например _VERSION), зарезервированы для использования в качестве внутренних глобальных переменных, используемых Lua. Литеральные строки должны быть заключены в одинарные или двойные кавычки и могут содержать С-подобные escape-поледовательности.
Типы и переменные
В Lua восемь основных типов: nil (неопределенный), boolean (логический), number (числовой), string (строковый), function (функция), userdata (пользовательские данные), thread (поток), и table (таблица).
Переменные типа table, function, thread и userdata не содержат самих данных, в них хранятся только ссылки на соответствующий объект.
В Lua есть три вида переменных: глобальные, локальные и поля таблиц. Любая переменная считается глобальной, если она явно не объявлена как локальная. Локальные переменные существуют в лексическом контексте: локальные переменные доступны функциям, определенным внутри этого контекста.
Операторы
В Lua поддерживается в общем стандартный набор операторов, почти как в Pascal или C. Он состоит из операторов присваивания, операторов управления потоком исполнения, вызова функций и описания переменных.
Ниже перечислены основные операции:
При сравнении на равенство не производится преобразование типов. Объекты разных типов всегда считаются различными. При вычислении значения используется короткая схема — второй аргумент вычисляется только если это необходимо. Действует следующая таблица приоритетов и ассоциативности операций:
В Lua нет выделенной функции, с которой начинается выполнение программы. Интерпретатор последовательно выполняет операторы, которые он получает из файла или от управляющей программы. При этом он предварительно компилирует программу в двоичное представление, которое также может быть сохранено.
Любой блок кода выполняется как анонимная функция, поэтому в нем можно определять локальные переменные и из него можно возвращать значение.
Операторы можно (но не обязательно) разделять символом ‘;’.
Ниже перечислены основные операторы:
Оператор for выполняется для всех значений переменной цикла начиная от стартового значения и кончая финишным значением включительно. Третье значение, если оно задано, используется как шаг изменения переменной цикла. Все эти значения должны быть числовыми. Они вычисляются только однажды перед выполнением цикла. Переменная цикла локальна в этом цикле и не доступна вне его тела. Значение переменной цикла нельзя изменять внутри тела цикла. Вот псевдокод, демонстрирующий выполнение оператора for :
Функции
Определение функции — это исполняемое выражение (конструктор функции), результатом вычисления которого является объект типа функция:
В скобках размещается список (возможно пустой) аргументов функции. Список аргументов функции может заканчиваться троеточием — в этом случае функция имеет переменное число аргументов. Между закрывающейся скобкой и оператором end размещается тело функции.
В момент выполнения конструктора функции строится также замыкание — таблица всех доступных в функции и внешних по отношению к ней локальных переменных. Если функция передается как возвращаемое значение, то она сохраняет доступ ко всем переменным, входящим в ее замыкание. При каждом выполнения конструктора функции строится новое замыкание.
Вызов функции состоит из ссылки на функцию и заключенного в круглые скобки списка аргументов (возможно пустого). Ссылкой на функцию может быть любое выражение, результатом вычисления которого является функция. Между ссылкой на функцию и открывающейся круглой скобкой не может быть перевода строки.
Если функция принимает единственный аргумент и трактует его как таблицу, элементы которой индексируются именами формальных параметров функции, то в этом случае фактически реализуется вызов механизм поименованных аргументов:
Мета-таблицы
Каждая таблица и объект типа userdata могут иметь мета-таблицу — обычную таблицу, поля которой определяют поведение исходного объекта при применении к нему некоторых специальных операций. Например, когда объект оказывается операндом при сложении, интерпретатор ищет в мета-таблице поле с именем __add и, если такое поле присутствует, то использует его значение как функцию, выполняющую сложение. Индексы (имена полей) в мета-таблице называются событиями, а соответствующие значения (обработчики событий) — метаметодами.
Lua определяет следующие события:
Примеры использования мета-таблиц
В следующем примере мета-таблицы используются для назначения значения по умолчанию для отсутствующих элементов таблицы:
Вот более нетривиальное решение, которое не использует отдельной мета-таблицы для каждого умалчиваемого значения:
Мета-метод __index этой мета-таблицы перехватывает обращения к отсутствующим полям таблицы и возвращает значение, сохраненное в самой таблице по индексу key.
Пакеты
Пакеты — основной способ определять набор взаимосвязанных функций, не загрязняя при этом глобальную область видимости. Обычно пакет представляет собой отдельный файл, который в глобальной области видимости определяет единственную таблицу, содержащую все функции этого пакета:
Также можно делать все функции локальными и отдельно формировать таблицу экспортируемых функций:
Классы и объекты
Конструкция tbl:func() (при объявлении функции и при ее вызове) предоставляет основные возможности, позволяющие работать с таблицей как с объектом. Основная проблема состоит в порождении многих объектов, имеющих сходное поведение т.е. порожденных от одного класса:
Здесь функция class создает пустую таблицу, подготовленную к тому, чтобы стать мета-таблицей объекта. Методы класса делаются полями этой таблицы т.е. класс является таблицей, одновременно содержащей методы объекта и его мета-методы.
Функция object() создает объект заданного класса — таблицу, у которой в качестве мета-таблицы установлен заданный класс. Во втором аргументе может быть передана таблица, содержащая проинициализированные поля объекта.
Стандартные библиотеки
Стандартные Lua библтотеки содержат часто используемые функции, которые выполняются непосредственно в C API. Некоторые из этих функций предоставляют важные сервисы языка (например, type и getmetatable ); другие обеспечивают доступ к «внешним» сервисам (например, ввод/вывод); частично они реализованы на Lua, однако часто используемые и имеющие критическое время выполнения, реализованы на C (например, sort ).
Все библиотеки вызываются через официальный C API и выполняются как отдельные C модули. В настоящий момент, Lua имеет следующие стандартные библиотеки:
Каждая библиотека, исключая базовую и библиотеку пакетов, представляет все функции как поля глобальной таблицы или как методы объектов.
Хочу всё знать. Язык Lua
Краткая справка
Lua бы придуман в 1993 году в Католическом университете Рио-де-Жанейро. Название переводится с португальского, как Луна, причем создатели убедительно просят не писать LUA, чтобы, не дай Бог, кто-нибудь не принял название за аббревиатуру. Является мультипарадигмальным скриптовым языком, использующим прототипную модель ООП.
По внешнему виду, да и возможностям Lua похож на очередную попытку переделать JavaScript, если бы не тот факт, что последний появился на два года позднее. Смотрите сами:
Начнем с традиционного:
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
Все предельно понятно. Кстати, в Lua поддерживается параллельное присваивание:
И в заключении довольно простой пример с использованием библиотек:
#include
#include
#include
#include
#include
int main (void) <
char buff[256];
int error;
lua_State *L = lua_open(); /* opens Lua */
luaopen_base(L); /* opens the basic library */
luaopen_table(L); /* opens the table library */
luaopen_io(L); /* opens the I/O library */
luaopen_string(L); /* opens the string lib. */
luaopen_math(L); /* opens the math lib. */
Преимущества и недостатки
Итак, чем же хорош Lua?
Во-первых, как уже было отмечено, своей компактностью, а вкупе с тем, что исходники написаны на С, вы получаете полное взаимодействие с одним из популярнейших языков на планете и широкий спектр доступных платформ.
Во-вторых, он быстрый. Если взглянуть на сравнительную характеристику с другими языками, то можно заметить, что хоть Lua и не укладывает на лопатки C или Python, но в некоторых тестах показывает отличные результаты.
В-третьих, он очень удобен для изучения даже не самыми опытными программистами. Наверняка даже те, кто просто знает английский язык, поняли минимум 80% описанного выше кода и без проблем смогут воспроизвести.
Любителей современных тенденций привлечет тот факт, что на Lua можно писать функциональный код.Да что там, если вы хотя бы пару недель уделите программированию на Lua, то наверняка найдёте ещё не один десяток плюсов.
Впрочем, не существует языков без недостатков, но у Lua они носят локальный характер. Так, например, язык по умолчанию не поддерживает Unicode, но это исправляется с использованием специальной ICU библиотеки. Или ограниченные возможности обработки ошибок и исключений, хотя многие сочтут это за благо. Или необходимость ставить оператор return исключительно последним в блоке, но опять-таки для многих это естественное правило хорошего кода.
Хотите стать веб-разработчиком? Тогда вам на наш курс обучения web-разработке!
Среды разработки
Полезные ссылки
Наш сегодняшний гость — настоящий боец скрытого фронта. Вы могли видеть его в играх (World of Warcraft, Angry Birds, X-Plane, S.T.A.L.K.E.R.) или продуктах компании Adobe (Lightroom), но даже не задумывались о его существовании. Между тем этому языку уже почти 25 лет и всё это время он незаметно делал нашу виртуальную жизнь чуть лучше.
Краткая справка
Lua бы придуман в 1993 году в Католическом университете Рио-де-Жанейро. Название переводится с португальского, как Луна, причем создатели убедительно просят не писать LUA, чтобы, не дай Бог, кто-нибудь не принял название за аббревиатуру. Является мультипарадигмальным скриптовым языком, использующим прототипную модель ООП.
По внешнему виду, да и возможностям Lua похож на очередную попытку переделать JavaScript, если бы не тот факт, что последний появился на два года позднее. Смотрите сами:
Начнем с традиционного:
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
Все предельно понятно. Кстати, в Lua поддерживается параллельное присваивание:
И в заключении довольно простой пример с использованием библиотек:
#include
#include
#include
#include
#include
int main (void) <
char buff[256];
int error;
lua_State *L = lua_open(); /* opens Lua */
luaopen_base(L); /* opens the basic library */
luaopen_table(L); /* opens the table library */
luaopen_io(L); /* opens the I/O library */
luaopen_string(L); /* opens the string lib. */
luaopen_math(L); /* opens the math lib. */
Преимущества и недостатки
Итак, чем же хорош Lua?
Во-первых, как уже было отмечено, своей компактностью, а вкупе с тем, что исходники написаны на С, вы получаете полное взаимодействие с одним из популярнейших языков на планете и широкий спектр доступных платформ.
Во-вторых, он быстрый. Если взглянуть на сравнительную характеристику с другими языками, то можно заметить, что хоть Lua и не укладывает на лопатки C или Python, но в некоторых тестах показывает отличные результаты.
В-третьих, он очень удобен для изучения даже не самыми опытными программистами. Наверняка даже те, кто просто знает английский язык, поняли минимум 80% описанного выше кода и без проблем смогут воспроизвести.
Любителей современных тенденций привлечет тот факт, что на Lua можно писать функциональный код.Да что там, если вы хотя бы пару недель уделите программированию на Lua, то наверняка найдёте ещё не один десяток плюсов.
Впрочем, не существует языков без недостатков, но у Lua они носят локальный характер. Так, например, язык по умолчанию не поддерживает Unicode, но это исправляется с использованием специальной ICU библиотеки. Или ограниченные возможности обработки ошибок и исключений, хотя многие сочтут это за благо. Или необходимость ставить оператор return исключительно последним в блоке, но опять-таки для многих это естественное правило хорошего кода.
Хотите стать веб-разработчиком? Тогда вам на наш курс обучения web-разработке!
Среды разработки
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Lua (язык программирования)
Парадигма | мультипарадигмальный: императивный, функциональный, прототипно-ориентированный, скриптовый, встраиваемый |
---|---|
Спроектировано | Роберту Иерузалимски, Валдемар Селиш, Луиш Энрике ди Фигейреду |
Первый появившийся | 1993 |
Печать дисциплины | динамическая, строгая, «утиная» |
Расширение файла | .lua |
Главная реализация | |
Lua, LuaJIT, LLVM-Lua, LuaCLR, Nua, Lua Alchemy | |
Диалект | |
MetaLua | |
Под влиянием | |
Scheme, Снобол, Модула, Клу, C++ | |
Влияние | |
Io, GameMonkey, Squirrel, Dao, MiniD |
По идеологии, возможностям и реализации язык ближе всего к JavaScript, но Lua имеет более мощные и гораздо более гибкие конструкции. Механизмы объектно-ориентированного программирования, включая множественное наследование, могут быть реализованы с использованием метатаблиц, но понятие классов не содержится в Lua. Реализуемая объектная модель может быть названа прототипной (как в JavaScript). Использование языка в основном происходит для создания тиражируемого программного обеспечения. По причине легкого встраивания, скорости работы и легкости обучения язык получил признание среди пользователей, которым требуется язык программирования уровней и расширений во многих играх. Lua является свободным программным обеспечением с открытым исходным кодом, распространяется под лицензией MIT.
Содержание
История создания
Lua разработана подразделением Tecgraf (группа технологий компьютерной графики) Католического университета Рио-де-Жанейро в Бразилии. Язык используется с 1993 года. Авторы языка — Роберту Иерузалимски, Луиш Энрике ди Фигейреду (Luiz Henrique de Figueiredo) и Валдемар Селиш (Waldemar Celes).
Родителями Lua были языки конфигурирования и описания данных SOL (Simple Object Language) и DEL (Data-Entry Language). Они были независимо разработаны в Tecgraf в 1992—1993 годах для добавления некоторой гибкости в два отдельных проекта. Из-за недостатков в SOL и DEL(отсутствовали управляющие конструкции), и Petrobras чувствовал необходимость в добавлении к ним полноценного программирования.
Lua 1.0 была спроектирована так, что её конструкторы объектов включали в себя синтаксис языка SOL (отсюда название Lua: по-португальски sol — «солнце», lua — «луна»). Управляющие конструкции Lua были взяты из Modula (if, while, repeat/until), CLU (параллельное присваивание, множественное возвращаемое значение функции как более простая альтернатива вместо передачи параметров по ссылке или явных указателей), C++, SNOBOL и AWK (ассоциативные массивы).
Версии Lua вплоть до 5.0 выпускались под лицензией, подобной лицензии BSD. Начиная с версии 5.0 и выше Lua распространяется под лицензией MIT. Обе лицензии являются пермиссивными и практически идентичны.
Инструменты
Автономный интерпретатор (также называемый lua.c по имени файла исходного кода, или просто lua по исполняемому файлу) представляет собой небольшую программу, позволяющую прямое использование Lua. Когда интерпретатор загружает файл, он игнорирует первую строку, если она начинается со «знака числа» («#»). Эта особенность позволяет использовать Lua как интерпретатор скриптов в Unix-системах. Если вы предваряете свой код строкой вида
(при условии, что автономный интерпретатор расположен в /usr/local/bin ), или
то вы можете вызывать (исполнять) программу напрямую, без необходимости предварительно запускать интерпретатор Lua.
загрузит файл a.lua, затем выполнит присваивание x = 10, и, наконец, предоставит командную строку для ввода.
Основные принципы
Лексические соглашения
Именами (идентификаторами) в Lua могут быть любые строки из букв, цифр и символа подчеркивания, не начинающиеся с цифры. Следующие ключевые слова зарезервированы и не могут быть использованы в именах:
and | break | do | else | elseif |
end | false | for | function | if |
in | local | nil | not | or |
repeat | return | then | true | until |
while |
Lua является языком, чувствительным к регистру символов: and – ключевое слово, тогда как And и AND– два разных допустимых идентификатора. По соглашению, имена, начинающиеся с символа подчеркивания и записанные в верхнем регистре (например _VERSION), зарезервированы для использования в качестве внутренних глобальных переменных, используемых Lua. Литеральные строки должны быть заключены в одинарные или двойные кавычки и могут содержать С-подобные escape-поледовательности.
Типы и переменные
В Lua восемь основных типов: nil (неопределенный), boolean (логический), number (числовой), string (строковый), function (функция), userdata (пользовательские данные), thread (поток), и table (таблица).
Переменные типа table, function, thread и userdata не содержат самих данных, в них хранятся только ссылки на соответствующий объект.
В Lua есть три вида переменных: глобальные, локальные и поля таблиц. Любая переменная считается глобальной, если она явно не объявлена как локальная. Локальные переменные существуют в лексическом контексте: локальные переменные доступны функциям, определенным внутри этого контекста.
Операторы
В Lua поддерживается в общем стандартный набор операторов, почти как в Pascal или C. Он состоит из операторов присваивания, операторов управления потоком исполнения, вызова функций и описания переменных.
Ниже перечислены основные операции:
При сравнении на равенство не производится преобразование типов. Объекты разных типов всегда считаются различными. При вычислении значения используется короткая схема — второй аргумент вычисляется только если это необходимо. Действует следующая таблица приоритетов и ассоциативности операций:
В Lua нет выделенной функции, с которой начинается выполнение программы. Интерпретатор последовательно выполняет операторы, которые он получает из файла или от управляющей программы. При этом он предварительно компилирует программу в двоичное представление, которое также может быть сохранено.
Любой блок кода выполняется как анонимная функция, поэтому в нем можно определять локальные переменные и из него можно возвращать значение.
Операторы можно (но не обязательно) разделять символом ‘;’.
Ниже перечислены основные операторы:
Оператор for выполняется для всех значений переменной цикла начиная от стартового значения и кончая финишным значением включительно. Третье значение, если оно задано, используется как шаг изменения переменной цикла. Все эти значения должны быть числовыми. Они вычисляются только однажды перед выполнением цикла. Переменная цикла локальна в этом цикле и не доступна вне его тела. Значение переменной цикла нельзя изменять внутри тела цикла. Вот псевдокод, демонстрирующий выполнение оператора for :
Функции
Определение функции — это исполняемое выражение (конструктор функции), результатом вычисления которого является объект типа функция:
В скобках размещается список (возможно пустой) аргументов функции. Список аргументов функции может заканчиваться троеточием — в этом случае функция имеет переменное число аргументов. Между закрывающейся скобкой и оператором end размещается тело функции.
В момент выполнения конструктора функции строится также замыкание — таблица всех доступных в функции и внешних по отношению к ней локальных переменных. Если функция передается как возвращаемое значение, то она сохраняет доступ ко всем переменным, входящим в ее замыкание. При каждом выполнения конструктора функции строится новое замыкание.
Вызов функции состоит из ссылки на функцию и заключенного в круглые скобки списка аргументов (возможно пустого). Ссылкой на функцию может быть любое выражение, результатом вычисления которого является функция. Между ссылкой на функцию и открывающейся круглой скобкой не может быть перевода строки.
Если функция принимает единственный аргумент и трактует его как таблицу, элементы которой индексируются именами формальных параметров функции, то в этом случае фактически реализуется вызов механизм поименованных аргументов:
Мета-таблицы
Каждая таблица и объект типа userdata могут иметь мета-таблицу — обычную таблицу, поля которой определяют поведение исходного объекта при применении к нему некоторых специальных операций. Например, когда объект оказывается операндом при сложении, интерпретатор ищет в мета-таблице поле с именем __add и, если такое поле присутствует, то использует его значение как функцию, выполняющую сложение. Индексы (имена полей) в мета-таблице называются событиями, а соответствующие значения (обработчики событий) — метаметодами.
Lua определяет следующие события:
Примеры использования мета-таблиц
В следующем примере мета-таблицы используются для назначения значения по умолчанию для отсутствующих элементов таблицы:
Вот более нетривиальное решение, которое не использует отдельной мета-таблицы для каждого умалчиваемого значения:
Мета-метод __index этой мета-таблицы перехватывает обращения к отсутствующим полям таблицы и возвращает значение, сохраненное в самой таблице по индексу key.
Пакеты
Пакеты — основной способ определять набор взаимосвязанных функций, не загрязняя при этом глобальную область видимости. Обычно пакет представляет собой отдельный файл, который в глобальной области видимости определяет единственную таблицу, содержащую все функции этого пакета:
Также можно делать все функции локальными и отдельно формировать таблицу экспортируемых функций:
Классы и объекты
Конструкция tbl:func() (при объявлении функции и при ее вызове) предоставляет основные возможности, позволяющие работать с таблицей как с объектом. Основная проблема состоит в порождении многих объектов, имеющих сходное поведение т.е. порожденных от одного класса:
Здесь функция class создает пустую таблицу, подготовленную к тому, чтобы стать мета-таблицей объекта. Методы класса делаются полями этой таблицы т.е. класс является таблицей, одновременно содержащей методы объекта и его мета-методы.
Функция object() создает объект заданного класса — таблицу, у которой в качестве мета-таблицы установлен заданный класс. Во втором аргументе может быть передана таблица, содержащая проинициализированные поля объекта.
Стандартные библиотеки
Стандартные Lua библтотеки содержат часто используемые функции, которые выполняются непосредственно в C API. Некоторые из этих функций предоставляют важные сервисы языка (например, type и getmetatable ); другие обеспечивают доступ к «внешним» сервисам (например, ввод/вывод); частично они реализованы на Lua, однако часто используемые и имеющие критическое время выполнения, реализованы на C (например, sort ).
Все библиотеки вызываются через официальный C API и выполняются как отдельные C модули. В настоящий момент, Lua имеет следующие стандартные библиотеки:
Каждая библиотека, исключая базовую и библиотеку пакетов, представляет все функции как поля глобальной таблицы или как методы объектов.