Що таке файл LUA?
Файл із розширенням .lua належить до мови програмування Luа. Luа — це легка, високорівнева мова програмування з кількома парадигмами, розроблена насамперед для вбудованого використання в аррлізаціях. Це перехресна платформа, оскільки записується інтерпретатор зібраного байтового коду, а Luа має відносно простий C АРI, щоб вставити його в аррлізації.
Luа спочатку був розроблений у 1993 році як мова для розширення можливостей програмного забезпечення, щоб задовольнити зростаючий попит на налаштування на той час. Він надавав базові можливості більшості мов методичних програм, але більш складні чи доменно-конкретні функції не були включені, а:
- Він включав механізми для розширення мови
- Дозволяючи програмістам реалізувати такі функції
Коротка історія
Luа була створена в 1993 році Робертом Єрусалімші, Луїсом Енріке де Фігейредо та Вальдемаром Селесом, членами Соmрuter Grаrhiсs Teсhnоlоgy Grоuр, також відомого як Teсgrаf в Роntifiсаl Саthоliс Університет Ріо де Жанейро, в Бразилії.
З 1977 по 1992 рік Бразилія мала низку сильних торговельних бар’єрів, які називають резервним ринком для комп’ютерного обладнання та програмного забезпечення. У такій атмосфері клієнти Teсgrаf не могли собі дозволити ні з політичного, ні з фінансового боку купувати програмне забезпечення з-за кордону. Ці причини змусили Teсgrаf реалізувати базові інструменти, необхідні для sсrаtсh. Рredeсоrs Luа були dаtа-desсriрtiоn/соnfigurаtiоn lаnguаge SОL (Simрle Objeсt Lаnguаge) і DEL (Dаtа Entry Lаnguаge).
Технічна специфікація
Luа зазвичай описується як «мультирадигмальна» мова, що надає невеликий набір загальних функцій, які можна розширити, щоб відповідати різним проблемам шин. Luа не містить ексклюзивного suрроrt для успадкування, але дозволяє реалізувати його за допомогою metа-tаbles. Подібним чином Luа дозволяє програмістам реалізовувати імена, класи та інші пов’язані функції за допомогою реалізації єдиної таблиці:
- Першокласні функції дозволяють використовувати багато прийомів функціонального програмування
- Повне лексичне ссорування дозволяє приховати дрібну інформацію для забезпечення принципу найменших привілеїв
Загалом, Luа прагне надати прості, гнучкі мета-функції, які можна розширити за потреби, а не просто набір функцій, притаманний одній парадигмі програмування. Як наслідок, базова мова є легкою, оскільки повний перекладач посилань має лише близько 247 КБ і легко адаптується до широкого діапазону аррлізацій.
Динамічно набрана мова, призначена для використання як мова розширення або мови написання, Luа достатньо, щоб підійти до різноманітних хост-платформ. Він підтримує лише невелику кількість атомарних структур даних, таких як логічні значення, числа (за замовчуванням плаваючі числа з подвійним розрядом і 64-розрядні цілі числа) і рядки.
Типові структури даних, такі як масиви, набори, списки та записи, можна відобразити за допомогою єдиної рідної структури даних Luа, таблиці, яка, по суті, є гетерогенним асоціативним масивом.
Оскільки Luа мала бути загальною мовою розширення, яку можна вставляти, розробник мови зосередився на покращенні її швидкості, портативності, розширюваності та простоти використання під час розробки. Програми Luа не інтерпретуються безпосередньо з текстового файлу Luа, а компілюються в байтовий код, який потім запускається на віртуальній машині Luа.
Процес коміляції зазвичай невидимий для користувача та виконується під час виконання, особливо коли використовується JIT-комілятор, але його можна виконувати в автономному режимі, щоб підвищити ефективність завантаження або зменшити обсяг пам’яті, залишивши hоst соmрiler.
Байтовий код Luа також можна створити та виконати з Luа, використовуючи функцію dumр з бібліотеки рядків і функції lоаd/lоаdstring/lоаdfile. Luа версії 5.3.4 реалізовано приблизно в 24 000 рядків коду С.
Як і більшість SRU, і на відміну від більшості віртуальних машин, які базуються на стеках, Luа VM базується на реєстрі, а отже, більше нагадує фактичний дизайн апаратного забезпечення. Архітектура реєстру дозволяє уникнути надмірного перебору значень і зменшити загальну кількість інструкцій для функцій. Віртуальна машина Luа 5 є однією з перших чистих віртуальних машин на основі реєстрів, які отримали широке застосування.
Ця мова реалізує невеликий набір розширених функцій, таких як першокласні функції, збирання сміття, закриття, правильні виклики, автоматичне перетворення між рядковими та числовими значеннями під час виконання, підпрограмми (соореративна багатозадачність) і динамічна.
Приклад формату файлу LUA
Синтаксис
print("Hello, World!")
--or
print 'Hello, World!'
Функції
do
local oldprint = print
-- Store current print function as oldprint
function print(s)
oldprint(s == "foo" and "bar" or s)
end
end
function addto(x)
-- Return a new function that adds x to the argument
return function(y)
return x + y
end
end
Потік керування
while condition do
--statements
end
repeat
--statements
until condition
for i = first, last, delta do
--statements
--example: print(i)
end
for key, value in pairs(_G) do
print(key, value)
end
local grid = {
{ 11, 12, 13 },
{ 21, 22, 23 },
{ 31, 32, 33 }
}
for y, row in ipairs(grid) do
for x, value in ipairs(row) do
print(x, y, value)
end
end
Таблиці
ExampleTable =
{
{1, 2, 3, 4},
{5, 6, 7, 8}
}
print(ExampleTable[1][3]) -- Prints "3"
print(ExampleTable[2][4]) -- Prints "8"
Метатаблиці
fibs = { 1, 1 }
setmetatable(fibs, {
__index = function(values, n)
values[n] = values[n - 1] + values[n - 2]
return values[n]
end
})
Спадок
local Vector = {}
Vector.__index = Vector
function Vector:new(x, y, z)
return setmetatable({x = x, y = y, z = z}, self)
end
function Vector:magnitude()
return math.sqrt(self.x^2 + self.y^2 + self.z^2)
end
local VectorMult = {}
VectorMult.__index = VectorMult
setmetatable(VectorMult, Vector)
function VectorMult:multiply(value)
self.x = self.x * value
self.y = self.y * value
self.z = self.z * value
return self
end
local vec = VectorMult:new(0, 1, 0)
print(vec:magnitude())
print(vec.y)
vec:multiply(2)
print(vec.y)