VietTechiesHIỂU CÔNG NGHỆ. MỞ GÓC NHÌN.
☰ Chuyên mục

Lua sinh ra cho kỹ sư hãng dầu Petrobras, không phải cho game. Rồi LucasArts đưa Lua vào Grim Fandango.

14/10/2026 · VietTechies · Biên tập

Roberto Ierusalimschy mỉm cười khi đang nói chuyện, cạnh khung nền màu nhạt ghi tên ông, hình mặt trời nối bằng mũi tên chấm chấm tới vầng trăng khuyết và dòng chữ “Lua · Rio de Janeiro, 1993”.


Lua, ngôn ngữ kịch bản về sau được dùng trong các game như World of Warcraft và Angry Birds, vốn ra đời năm 1993 tại Rio de Janeiro để phục vụ một đối tượng khác hẳn: các kỹ sư của Petrobras, tập đoàn dầu khí Brazil.

Chính những người tạo ra Lua nói thẳng điều này. “Phát triển game không phải là mục tiêu chúng tôi đặt ra cho Lua”, Roberto Ierusalimschy, Luiz Henrique de Figueiredo và Waldemar Celes viết trong bài báo năm 2007 về lịch sử ngôn ngữ này. Họ cũng viết rằng việc Lua được dùng rộng rãi trong game “đã khiến chúng tôi bất ngờ”.

Câu chuyện bắt đầu từ những cột số. Mỗi ngày vài lần, các kỹ sư Petrobras phải chuẩn bị file đầu vào cho các chương trình mô phỏng số. Đây là những chương trình đời cũ, đòi hỏi đầu vào theo một định dạng nghiêm ngặt: thường chỉ toàn những cột số, chẳng có chỉ dẫn nào cho biết từng con số mang ý nghĩa gì, theo lối trình bày kế thừa từ thời thẻ đục lỗ. Đầu năm 1992, Petrobras đề nghị Tecgraf — nhóm đồ họa máy tính của Đại học Giáo hoàng Công giáo Rio de Janeiro (PUC-Rio) — làm ít nhất một tá giao diện đồ họa, để các kỹ sư có thể nhấp chuột lên một sơ đồ thay vì soạn tay những cột số ấy.

Tecgraf đáp lại bằng những ngôn ngữ nhỏ, chuyên dụng. Nhóm do de Figueiredo và Luiz Cristovão Gomes Coelho đứng đầu đã thiết kế DEL, một ngôn ngữ nhập liệu (data-entry language), rồi cho mọi giao diện ấy chạy chung trên một trình thông dịch. Nhóm thứ hai, do Ierusalimschy và Celes đứng đầu, làm PGM, một chương trình khác cho Petrobras: phần mềm tạo báo cáo mặt cắt thạch học, tức bản mô tả các lớp đá. Để cấu hình PGM, nhóm này thiết kế SOL, viết tắt của Simple Object Language, đồng thời là từ tiếng Bồ Đào Nha nghĩa là “mặt trời”. Chẳng bao lâu sau, người dùng DEL bắt đầu đòi có câu lệnh điều kiện và vòng lặp, còn PGM rồi cũng sẽ cần đến lập trình thủ tục.

Vì sao Tecgraf tự làm lấy công cụ

Theo mô tả của các tác giả Lua, từ năm 1977 đến năm 1992, Brazil duy trì hàng rào thương mại cao đối với phần cứng và phần mềm máy tính, bằng một chính sách mang tên “dành riêng thị trường” (market reserve). Họ viết rằng chính sách này “xuất phát từ tinh thần dân tộc chủ nghĩa cho rằng Brazil có thể và nên tự sản xuất phần cứng và phần mềm của mình”. Trong bầu không khí ấy, khách hàng của Tecgraf “không kham nổi việc mua phần mềm đặt làm riêng từ nước ngoài, cả về chính trị lẫn tài chính”. Theo quy định của chính sách này, muốn mua thì khách hàng phải trải qua một thủ tục hành chính phức tạp để chứng minh rằng không công ty Brazil nào đáp ứng được nhu cầu của mình. Các tác giả cho biết những trở ngại ấy, cộng với việc Brazil cách biệt về địa lý với các trung tâm nghiên cứu khác, đã khiến Tecgraf tự xây dựng từ đầu những công cụ cơ bản của mình. Chính sách này chấm dứt năm 1992, một năm trước khi Lua ra đời.

Giữa năm 1993: một ngôn ngữ thay cho hai

Khoảng giữa năm 1993, bộ ba — Ierusalimschy, khi đó là trợ lý giáo sư ngành khoa học máy tính tại PUC-Rio; de Figueiredo, nghiên cứu viên sau tiến sĩ; và Celes, nghiên cứu sinh — đi đến kết luận rằng có thể thay ngôn ngữ nhập liệu DEL và ngôn ngữ báo cáo SOL bằng một ngôn ngữ duy nhất, mạnh hơn. Lẽ ra họ có thể dùng luôn một ngôn ngữ có sẵn. Theo lời họ, năm 1993 “ứng viên thực sự duy nhất” là Tcl, một ngôn ngữ kịch bản được thiết kế để nhúng vào ứng dụng. Nhưng Tcl có cú pháp lạ lẫm, khả năng mô tả dữ liệu kém và chỉ chạy trên Unix. Họ loại Lisp và Scheme vì “cú pháp không thân thiện”. Python lúc đó “vẫn còn trứng nước”. Còn trong “bầu không khí tự do, việc gì cũng tự làm lấy” ở Tecgraf, như cách họ mô tả, thì việc thử tự viết một ngôn ngữ riêng là chuyện “khá tự nhiên”.

Thiết kế của họ xuất phát từ hai quyết định: ngôn ngữ phải đơn giản, nhỏ gọn; phần cài đặt (implementation) cũng phải đơn giản và khả chuyển, tức dễ mang sang chạy trên loại máy khác. Tính khả chuyển là yêu cầu bắt buộc. Petrobras là công ty nhà nước, phải tuân theo những quy định rất chặt chẽ về chi tiêu công quỹ, nên không thể tự chọn một loại phần cứng cụ thể. Vì vậy, phần mềm của Tecgraf phải chạy được trên mọi máy tính mà Petrobras có: “PC DOS, Windows (khi đó là 3.1), Macintosh và đủ mọi biến thể Unix”. Nhiều người dùng sẽ không phải là lập trình viên chuyên nghiệp, nên ngôn ngữ mới phải tránh kiểu cú pháp khó hiểu. Ngay cả dấu chấm phẩy cũng phải đem ra thương lượng: bắt buộc dùng thì các kỹ sư quen Fortran có thể bối rối, cấm dùng thì lập trình viên C và Pascal có thể lúng túng. Thế là, “đúng kiểu làm việc của một ủy ban”, dấu chấm phẩy trở thành tùy chọn.

Vì ngôn ngữ mới lấy cảm hứng một phần từ SOL — “mặt trời” trong tiếng Bồ Đào Nha — nên Carlos Henrique Levy, một người bạn ở Tecgraf, gợi ý một cái tên: Lua, tiếng Bồ Đào Nha nghĩa là “mặt trăng”. Trang web của dự án nhấn mạnh rằng Lua là một danh từ chứ không phải từ viết tắt, và không nên viết in hoa toàn bộ. Đến tháng 7 năm 1993, Celes đã hoàn thành bản cài đặt đầu tiên, dưới dạng một đồ án môn học do Ierusalimschy hướng dẫn.

Nhỏ gọn, nhúng được và cuối cùng là miễn phí

Giống SOL trước đó, Lua được xây dựng thành một thư viện có API (giao diện lập trình ứng dụng) bằng C, để một chương trình C có thể nhúng Lua vào và giao bớt một phần việc cho các script. Cấu trúc dữ liệu duy nhất của Lua là bảng (table). Bản ghi dùng tên trường làm khóa, danh sách dùng số, và cùng một cơ chế lo được cả hai.

Lua 1.1, phát hành tháng 7 năm 1994, được dùng miễn phí cho mục đích học thuật, nhưng dùng vào mục đích thương mại thì phải thương lượng. “Phần đó của giấy phép không hiệu quả”, các tác giả thừa nhận. “Chưa từng có trường hợp sử dụng thương mại nào đi đến thỏa thuận.” Tháng 2 năm 1995, Lua 2.1 ra mắt dưới dạng phần mềm tự do, không kèm hạn chế nào, rồi đến Lua 5.0 thì chuyển sang giấy phép MIT vốn rất thoáng.

Lời nhắn từ LucasArts

Lua đến với làng game qua một tạp chí. Tháng 12 năm 1996, Dr. Dobb’s Journal, một ấn phẩm dành cho lập trình viên, đăng bài viết về Lua của ba tác giả ngôn ngữ này. Tháng 1 năm 1997, Bret Mogilefsky — lập trình viên trưởng của Grim Fandango, một game phiêu lưu khi ấy đang được LucasArts phát triển — viết thư cho họ: ông đã đọc bài báo, và nhóm của ông định bỏ ngôn ngữ kịch bản tự chế để chuyển sang Lua. Grim Fandango ra mắt vào tháng 10 năm 1998. Tháng 5 năm 1999, Mogilefsky cho các tác giả biết một khối lượng code “khổng lồ” trong game được viết bằng Lua.

Grim Fandango có nhắc đến Lua và PUC-Rio trong danh sách ghi công cuối game. Các tác giả nhớ lại rằng một số người ở PUC-Rio lần đầu biết đến Lua từ màn hình ghi công ấy, “và ngạc nhiên khi biết phần mềm của Brazil có mặt trong một game ăn khách”. Sau khi Mogilefsky kể lại kinh nghiệm của mình tại hội nghị Game Developers Conference, Lua lan rộng trong giới làm game nhờ truyền miệng.

Sinh ra cho kỹ sư, hợp cả với người thiết kế game

Ngày nay, trang web chính thức của Lua gọi ngôn ngữ này là “ngôn ngữ kịch bản hàng đầu trong game”, viện dẫn một khảo sát năm 2009. Luau, ngôn ngữ kịch bản của Roblox, được phát triển từ Lua. Năm 2007, các tác giả lập luận rằng những đặc điểm làm nên nét riêng của Lua chính là những gì game cần: chỉ cần một trình biên dịch C chuẩn ANSI là đủ để biên dịch Lua; Lua dễ ghép với ngôn ngữ dùng để viết engine của game; và ngôn ngữ này đơn giản, vì “phần lớn người thiết kế game, người viết script và người dựng màn chơi không phải là lập trình viên chuyên nghiệp”. Cũng trong bài báo đó, họ gọi Lua là “ngôn ngữ duy nhất ra đời ở một nước đang phát triển mà có được vị thế toàn cầu”.

Ràng buộc đã tạo nên những gì

  • Một ràng buộc có thể trở thành nguyên tắc thiết kế. Dàn máy đủ loại của một khách hàng đã dẫn tới một ngôn ngữ được thiết kế cho tính khả chuyển ngay từ ngày đầu.
  • Thiết kế cho người dùng thực sự. Cú pháp đơn giản chọn cho các kỹ sư Petrobras cũng hợp với người thiết kế game; ở cả hai nhóm, nhiều người không phải lập trình viên chuyên nghiệp.
  • Giấy phép là một phần của sản phẩm. Các giới hạn về sử dụng thương mại của Lua 1.1 không đem lại thỏa thuận nào, và theo kết luận của các tác giả, thậm chí còn có thể khiến giới học thuật ngại dùng Lua.

Khi một ràng buộc của khách hàng định hình thiết kế của bạn, thành quả ấy có thể lại chính là phần mà người ngoài rốt cuộc quý nhất. Lua bắt nguồn từ một nỗ lực năm 1992 nhằm giúp các kỹ sư Petrobras khỏi phải sửa những cột số; năm 1998, cái tên Lua đã hiện lên trong danh sách ghi công cuối một game của LucasArts.

Bài liên quan

Đọc bằng ngôn ngữ khác: English

Nguồn