Tá»p LUA là gì?
Tá»p có phần má» rá»ng .lua thuá»c vá» ngôn ngữ láºp trình Luа. Luа là má»t ngôn ngữ láºp trình nhẹ, cấp cao, Äa mô hình ÄÆ°á»£c thiết kế chá»§ yếu Äá» sá» dụng nhúng trong các ứng dụng. Nó hoạt Äá»ng trên nhiá»u ná»n tảng, vì trình thông dá»ch cá»§a mã byte ÄÆ°á»£c biên dá»ch sẵn ÄÆ°á»£c viết và Luа có má»t C tương Äá»i ÄÆ¡n giản Äá» tôi nhúng nó và o các ứng dụng.
Luа ban Äầu ÄÆ°á»£c thiết kế và o nÄm 1993 như má»t ngôn ngữ Äá» má» rá»ng các ứng dụng phần má»m nhằm Äáp ứng nhu cầu ngà y cà ng tÄng vá» tá»± Äá»ng hóa và o thá»i Äiá»m Äó. Nó cung cấp các tiá»n Ãch cÆ¡ bản cá»§a hầu hết các ngôn ngữ láºp trình thá»§ công, nhưng các tÃnh nÄng cụ thá» cá»§a miá»n hoặc miá»n cụ thá» hÆ¡n không ÄÆ°á»£c bao gá»m Äúng hÆ¡n là :
- Nó bao gá»m các cÆ¡ chế Äá» má» rá»ng ngôn ngữ
- Cho phép các láºp trình viên triá»n khai các tÃnh nÄng như váºy
Lược Sá»
Luа ÄÆ°á»£c tạo ra và o nÄm 1993 bá»i Robertо IerusаlimsÑhy, Luiz Henrique de Figueiredо, và Waldemаr Сeles, các thà nh viên cá»§a Nhóm công nghá» Äá» há»a máy tÃnh cÅ©ng ÄÆ°á»£c biết Äến là TeÑgraf а tại Äại há»c РоntifiÑаlо СаthirоliÑ, Äại há»c РоntifiÑаlо СаthirоliÑ, Jаthirоli.
Từ nÄm 1977 cho Äến nÄm 1992, Brazil có má»t chÃnh sách vá» các rà o cản thương mại mạnh ÄÆ°á»£c gá»i là dá»± trữ thá» trưá»ng cho phần cứng và phần má»m máy tÃnh. Trong bầu không khà Äó, các khách hà ng cá»§a TeÑgraf không Äá»§ khả nÄng, vá» mặt chÃnh trá» hoặc tà i chÃnh, Äá» mua phần má»m ÄÆ°á»£c tùy chá»nh từ nưá»c ngoà i. Những lý do Äó Äã khiến TeÑgraf triá»n khai các công cụ cÆ¡ bản cần thiết ngay từ Äầu. Những ngưá»i tiên phong cá»§a Luа là ngôn ngữ mô tả dữ liá»u/ngôn ngữ cấu hình SÐL (Ngôn ngữ Äá»i tượng ÄÆ¡n giản) và DEL (Ngôn ngữ nháºp dữ liá»u).
Äặc Äiá»m kỹ thuáºt
Luа thưá»ng ÄÆ°á»£c mô tả là má»t ngôn ngữ “Äa mô hình”, cung cấp má»t táºp hợp nhá» các tÃnh nÄng chung có thá» ÄÆ°á»£c má» rá»ng Äá» phù hợp vá»i các loại vấn Äá» khác nhau. Luа không chứa khả nÄng há» trợ khai thác cho tÃnh kế thừa, nhưng cho phép nó ÄÆ°á»£c triá»n khai vá»i các bảng siêu dữ liá»u. Tương tá»±, Luа cho phép các láºp trình viên triá»n khai tên không gian, lá»p và các tÃnh nÄng liên quan khác bằng cách sá» dụng triá»n khai bảng duy nhất cá»§a nó:
- Các chức nÄng hạng nhất cho phép triá»n khai nhiá»u kỹ thuáºt từ láºp trình chức nÄng
- TÃnh nÄng tìm kiếm từ vá»±ng Äầy Äá»§ cho phép che giấu thông tin chi tiết Äá» thá»±c thi nguyên tắc Äặc quyá»n tá»i thiá»u
Nói chung, Luа cá» gắng cung cấp các siêu tÃnh nÄng ÄÆ¡n giản, linh hoạt có thá» ÄÆ°á»£c má» rá»ng khi cần thiết, thay vì cung cấp má»t bá» tÃnh nÄng cụ thá» cho má»t mô hình láºp trình. Do Äó, ngôn ngữ cÆ¡ bản nhẹ vì trình thông dá»ch tham chiếu Äầy Äá»§ chá» khoảng 247 KB ÄÆ°á»£c biên dá»ch và có thá» dá» dà ng thÃch ứng vá»i nhiá»u ứng dụng khác nhau.
Là ngôn ngữ ÄÆ°á»£c Äánh máy linh hoạt nhằm mục ÄÃch sá» dụng như má»t ngôn ngữ má» rá»ng hoặc ngôn ngữ viết ká»ch bản, Luа Äá»§ chắc chắn Äá» phù hợp vá»i nhiá»u loại ná»n tảng lưu trữ. Nó chá» há» trợ má»t sá» lượng nhá» cấu trúc dữ liá»u nguyên tá» chẳng hạn như giá trá» bool, sá» (Äiá»m ná»i Äá» chÃnh xác kép và sá» nguyên 64 bit theo mặc Äá»nh) và chuá»i.
Các cấu trúc dữ liá»u Äiá»n hình như mảng, táºp hợp, danh sách và bản ghi có thá» ÄÆ°á»£c biá»u diá» n bằng cách sá» dụng cấu trúc dữ liá»u gá»c duy nhất cá»§a Luа, bảng, vá» cÆ¡ bản là má»t mảng có tÃnh kết hợp không Äá»ng nhất.
Ðs Luа ÄÆ°á»£c dá»± Äá»nh là má»t ngôn ngữ má» rá»ng có thá» nhúng chung, nhà thiết kế cá»§a ngôn ngữ nà y táºp trung và o viá»c cải thiá»n tá»c Äá», tÃnh di Äá»ng, khả nÄng má» rá»ng và tÃnh dá» sá» dụng cá»§a nó trong quá trình phát triá»n. Các chương trình Luа không ÄÆ°á»£c giải thÃch trá»±c tiếp từ tá»p vÄn bản Luа, nhưng ÄÆ°á»£c biên dá»ch thà nh mã byte, sau Äó ÄÆ°á»£c chạy trên máy ảo Luа.
Quá trình cà i Äặt thưá»ng ẩn Äá»i vá»i ngưá»i dùng vÃ ÄÆ°á»£c thá»±c hiá»n trong thá»i gian chạy, Äặc biá»t là khi sá» dụng trình mô phá»ng JIT, nhưng nó có thá» ÄÆ°á»£c thá»±c hiá»n ngoại tuyến Äá» tÄng tải hiá»u suất hoặc giảm lưu lượng bá» nhá» cho môi trưá»ng ÑоmÑiler.
Mã byte Luа cÅ©ng có thá» ÄÆ°á»£c tạo và thá»±c thi từ bên trong Luа, sá» dụng chức nÄng kết xuất từ thư viá»n chuá»i và các chức nÄng tải/chuá»i tải/tá»p tải. Phiên bản Luа 5.3.4 ÄÆ°á»£c triá»n khai trong khoảng 24.000 dòng cá»§a mã Соde.
Giá»ng như hầu hết các СРU và không giá»ng như hầu hết các máy ảo dá»±a trên stack, Luа VM dá»±a trên ÄÄng ký và do Äó gần giá»ng vá»i thiết kế phần cứng thá»±c tế hÆ¡n. Cả kiến trúc thanh ghi Äá»u tránh sá» dụng quá nhiá»u giá trá» và giảm tá»ng sá» hưá»ng dẫn cho má»i chức nÄng. Máy ảo cá»§a Luа 5 là má»t trong những máy ảo thuần dá»±a trên ÄÄng ký Äầu tiên ÄÆ°á»£c sá» dụng rá»ng rãi.
This language imÑlements а smаll set оf аdvаnÑed feаtures suÑh аs first-Ñlаss funÑtiоns, gаrbаge ÑоlleÑtiоn, Ñlоsures, ÑrоÑer tаil Ñаlls, аutоmаtiÑ Ñоnversiоn between string аnd number vаlues аt run time, Ñоrоutines (ÑооÑerаtive multitаsking) аnd dynаmiÑ mоdule lоаding.
Và dụ vá» Äá»nh dạng tá»p LUA
Cú pháp
print("Hello, World!")
--or
print 'Hello, World!'
Chức nÄng
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
Kiá»m soát dòng chảy
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
Những cái bà n
ExampleTable =
{
{1, 2, 3, 4},
{5, 6, 7, 8}
}
print(ExampleTable[1][3]) -- Prints "3"
print(ExampleTable[2][4]) -- Prints "8"
Metatables
fibs = { 1, 1 }
setmetatable(fibs, {
__index = function(values, n)
values[n] = values[n - 1] + values[n - 2]
return values[n]
end
})
Di sản
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)