Giới thiệu ngôn ngữ lập trình Lua - Đặc điểm và ứng dụng

Ngôn ngữ lập trình Lua là một ngôn ngữ kịch bản nhẹ nhàng, linh hoạt và có khả năng mở rộng. Lua được phát âm là /'lua/ (lùa), có nguồn gốc từ tiếng Bồ Đào Nha, nghĩa là "Mặt Trăng".

Mục tiêu thiết kế

Lua được thiết kế với mục tiêu trở thành một ngôn ngữ dễ dàng nhúng vào các ngôn ngữ khác. Đa số các lập trình viên đều công nhận rằng ngôn ngữ này đã đạt được mục tiêu đó. Nhiều ứng dụng sử dụng Lua làm ngôn ngữ kịch bản nhúng để tăng khả năng cấu hình và mở rộng. Các ví dụ tiêu biểu bao gồm: Ragnarok Online, World of Warcraft, Warhammer 40k, Baldur's Gate, và Sword of the New Han Cloud.

Đặc điểm nổi bật

Lua là một ngôn ngữ nhẹ, phiên bản chính thức chỉ bao gồm một cốt lõi được tinh giản và thư viện cơ bản nhất. Điều này giúp Lua có kích thước nhỏ, tốc độ khởi động nhanh. Ngôn ngữ được viết bằng ngôn ngữ C tiêu chuẩn và phát triển dưới dạng mã nguồn mở, sau khi biên dịch chỉ chiếm khoảng hơn 100KB, có thể dễ dàng nhúng vào các chương trình khác. Khác với nhiều ngôn ngữ "toàn diện", Lua không cung cấp sẵn các tính năng như giao tiếp mạng hay giao diện đồ họa. Tuy nhiên, Lua có thể dễ dàng được mở rộng: ngôn ngữ chủ (thường là C hoặc C++) cung cấp các chức năng này, và Lua có thể sử dụng chúng như thể chúng là tính năng tích hợp sẵn. Thực tế, đã có nhiều module mở rộng hoàn chỉnh có sẵn để sử dụng. Lua hỗ trợ nhiều phạm vi lập trình khác nhau: nó chỉ cung cấp một tập hợp các tính năng nhỏ để đáp ứng nhu cầu của nhiều mô hình lập trình khác nhau, thay vì cung cấp hỗ trợ phức tạp cho một mô hình cụ thể. Ví dụ, Lua không cung cấp tính kế thừa, nhưng bạn có thể mô phỏng nó bằng metatable. Các khái niệm như namespace hay class không được thực hiện trong các tính năng cơ bản của ngôn ngữ, nhưng chúng ta có thể dễ dàng mô phỏng chúng bằng cấu trúc bảng (cấu trúc dữ liệu phức tạp duy nhất mà Lua cung cấp). Lua có thể xây dựng một hàm tại thời điểm chạy và coi nó như một đối tượng (đây chính là所谓的first class function), tính năng này đáp ứng tốt nhu cầu của lập trình hàm. Với các đặc tính cơ bản này, chúng ta có thể tùy biến ngôn ngữ theo nhu cầu riêng. Lua hỗ trợ rất ít kiểu dữ liệu nguyên bản: chỉ có số (mặc định là số thực độ chính xác kép, có thể cấu hình), boolean, chuỗi, bảng, thủ tục, coroutine (hợp tác đa tiến trình) và dữ liệu do người dùng định nghĩa. Tuy nhiên, Lua xử lý bảng và chuỗi rất hiệu quả, với sự hỗ trợ của metatable, chúng ta có thể mô phỏng hiệu quả các kiểu dữ liệu phức tạp cần thiết (như tập hợp, mảng, v.v.). Lua là một ngôn ngữ động với kiểu yếu, hỗ trợ chiến lược thu gom rác incremental. Có hỗ trợ đa luồng hợp tác (coroutine) tích hợp, độc lập với hệ điều hành.

Ví dụ mã nguồn

in_ra "Xin chào thế giới!"
Sau khi thực thi, màn hình sẽ hiển thị "Xin chào thế giới!" (không bao gồm dấu ngoặc kép). Một ví dụ phức tạp hơn, thể hiện khái niệm hàm và hỗ trợ closure của Lua:
function tao_bo_dem() local gia_tri = 0 return function() gia_tri = gia_tri + 1 return gia_tri end end
tao_bo_dem() sẽ trả về một hàm ẩn danh (trong Lua, hàm cũng như các dữ liệu khác, có thể được gán cho biến để lưu trữ). Hàm ẩn danh này sẽ tăng giá trị của biến gia_tri lên 1 rồi trả về. Biến gia_tri trong hàm ẩn danh không phải là biến toàn cục cũng không phải biến địa phương, mà là một loại biến gọi là external local variable (biến địa phương bên ngoài, còn gọi là upvalue). Giá trị của biến này sẽ được lưu giữ trong hàm ẩn danh. Do đó, tao_bo_dem() hoạt động như một bộ đếm, mỗi lần gọi bộ đếm này, ta sẽ nhận được một giá trị lớn hơn 1 so với lần trước.

Thẻ: lua ngôn ngữ lập trình kịch bản embedded metatable

Đăng vào ngày 21 tháng 5 lúc 08:50