Apa Itu Lua?

Definisi Lua sebagai bahasa skrip tersemat, tempat bahasa ini berjalan, dan filosofi desainnya.

Daftar isi

Topik ini mendefinisikan Lua sebagai bahasa pemrograman, menjelaskan makna penyematan pada aplikasi host, menunjukkan tempat bahasa ini berjalan secara nyata, serta merangkum filosofi desain dan status versinya. Pemahaman tersebut menjadi latar sebelum penerjemah dipasang dan skrip pertama ditulis. Setelah topik ini dibaca, karakter Lua beserta alasan bahasa ini dipilih pada banyak aplikasi sudah tergambar dengan jelas.

Bahasa yang hidup di dalam aplikasi lain#

Lua adalah bahasa skrip ringan yang dapat disematkan (embeddable), dirancang sejak 1993 di PUC-Rio, universitas di Rio de Janeiro, Brasil. Penerjemahnya (interpreter) berukuran kecil, ditulis dalam bahasa C, dan berjalan di banyak platform. Sifat tersemat menandai perbedaan mendasar dengan bahasa yang biasa dijalankan mandiri. Program Python atau PHP umumnya berjalan sebagai proses tersendiri yang dibuka dari terminal, sedangkan Lua dirancang untuk hidup di dalam aplikasi lain yang disebut aplikasi host (host). Aplikasi host menyematkan penerjemah Lua ke dalam prosesnya, lalu membuka sebagian fungsi internalnya sebagai perintah yang dapat dipanggil dari skrip.

Diagram berikut memperlihatkan relasi tersebut. Mesin aplikasi dan penerjemah Lua berdampingan di dalam satu proses dan saling bertukar kendali melalui API C, sedangkan berkas skrip yang ditulis pengguna dimuat ke dalam penerjemah saat aplikasi berjalan.

Relasi aplikasi host, penerjemah Lua, dan berkas skripAplikasi hostMesin aplikasi (C)Penerjemah LuaAPI CSkrip .luadimuat
Relasi aplikasi host, penerjemah Lua, dan berkas skrip

Aplikasi host tidak sekadar membaca teks skrip, tetapi mengeksekusinya melalui penerjemah yang disematkan. Pola kerjanya berlaku dua arah. Aplikasi memanggil skrip pada titik tertentu, misalnya saat permainan dimulai atau saat pengguna menekan tombol, dan skrip menjawab dengan memanggil kembali fungsi yang disediakan aplikasi. Potongan berikut meniru gaya skrip konfigurasi yang lazim pada aplikasi host. Dua baris pertama menyimpan nilai pada sebuah nama, dan baris terakhir mencetak kedua nilai tersebut dengan pemisah tab.

lua Contoh: potongan skrip bergaya konfigurasi
-- potongan skrip bergaya konfigurasi pada aplikasi host
judul = "Aplikasi Catatan"
batas = 10

print(judul, batas)
text Keluaran
Aplikasi Catatan	10

Keluaran menunjukkan perilaku yang tidak dimiliki teks konfigurasi biasa. Skrip menghitung, mengambil keputusan, dan memanggil perintah milik host, sehingga aplikasi dapat mengubah perilakunya tanpa kompilasi ulang. Kemampuan inilah yang membuat Lua lazim disebut bahasa skrip, yaitu bahasa yang menulis perilaku di atas fondasi yang telah disediakan aplikasi.

Tempat Lua berjalan#

Sifat tersemat membuat Lua muncul di tempat yang jarang disadari penggunanya. Addon antarmuka pada gim World of Warcraft, yaitu pengaya yang disunting pemain untuk mengubah tampilannya, ditulis dalam Lua, sehingga banyak pemain menjalankan skrip Lua setiap kali membuka layar gim. Neovim, penyunting teks yang dirancang bagi pengembang perangkat lunak, menggunakan Lua sebagai bahasa konfigurasi dan plugin, yaitu pengaya yang memperluas kemampuannya, di samping Vimscript. Server Redis mengeksekusi skrip atomik yang dikirim klien melalui perintah EVAL, dan skrip tersebut dijalankan oleh penerjemah Lua yang tersemat di dalam server itu sendiri.

Dua contoh lain memperlihatkan Lua sebagai bahasa utama sebuah platform. LÖVE 2D adalah kerangka kerja gim dua dimensi yang seluruh logika gimnya ditulis dalam Lua, mulai dari menggambar hingga membaca masukan pemain. Roblox, platform gim daring berukuran besar, menggunakan Luau, yaitu turunan Lua yang dikembangkan dengan dialek dan alat pemeriksa tipenya sendiri. Peran Lua pada contoh-contoh itu berbeda-beda, mulai dari pelapis antarmuka, bahasa konfigurasi, hingga bahasa utama platform, tetapi mekanisme penyematannya tetap sama. Semua contoh tersebut berbagi satu pola, yaitu aplikasi besar yang membuka titik ekstensi bagi kode Lua, sedangkan perbedaannya hanya terletak pada jenis fungsi yang dibuka host kepada skrip.

Karakter bahasa#

Filosofi desain Lua terbaca pada tiga keputusan yang konsisten sejak versi awal. Pertama, Lua menyediakan satu struktur data bernama table yang berperan sebagai daftar sekaligus kamus, sehingga kebutuhan penyimpanan data pada skrip terpusat pada satu bentuk yang dipelajari sekali. Kedua, penerjemahnya dibuat sekecil mungkin. Kode sumber penerjemah terdiri atas puluhan ribu baris C, jauh lebih kecil daripada mesin bahasa umum, dan hasil kompilasinya cukup muat pada perangkat tertanam. Ketiga, portabilitasnya bertumpu pada bahasa C. Penerjemah hanya menuntut compiler C, yaitu program yang mengompilasi kode sumber menjadi berkas yang dapat dijalankan, yang tersedia di hampir semua platform, sehingga Lua berjalan dari perangkat mikro hingga server.

Sifat-sifat itu menempatkan Lua pada kelasnya sendiri. Lua bukan bahasa untuk membangun aplikasi dari nol, melainkan bahasa untuk melengkapi aplikasi yang sudah ada. Pustaka standarnya pun sengaja ramping karena kebutuhan seperti akses jaringan atau grafika justru disediakan oleh aplikasi host yang menyetirnya. Ketiga keputusan itu saling menguatkan, karena table menyatukan kebutuhan data pada skrip, penerjemah kecil memudahkan penyematan, dan akar C menjamin penerjemah dapat dikompilasi di hampir mana pun.

Kapan Lua dipilih#

Lua menjadi pilihan yang tepat apabila aplikasi membutuhkan lapisan skrip yang ditulis atau disunting setelah aplikasi dirilis. Kasus yang lazim mencakup konfigurasi berbentuk kode, perilaku yang disunting pengguna seperti addon gim, dan kode perekat (glue code) yang menghubungkan komponen-komponen milik host. Pada kasus semacam ini, penyematan Lua jauh lebih ringan daripada membangun bahasa skrip sendiri, dan perubahan perilaku tidak lagi menuntut kompilasi ulang aplikasi. Banyak host juga memuat ulang skrip tanpa menghentikan aplikasinya, sehingga penyuntingan dapat diuji seketika. Keuntungan lain berada di sisi pemeliharaan, karena perbaikan kecil pada perilaku cukup dilakukan pada berkas skrip tanpa menyentuh kode aplikasi hostnya.

Sebaliknya, aplikasi yang berdiri sendiri tanpa kebutuhan ekstensi jarang menjadikan Lua sebagai intinya. Penerjemah yang ramping berarti pustaka standar yang sengaja dibatasi, sehingga proyek yang menuntut ekosistem pustaka besar biasanya memilih bahasa lain. Pemilihan Lua dengan demikian bertumpu pada satu pertanyaan, yaitu apakah aplikasi membutuhkan perilaku yang dapat disunting tanpa membangun ulang aplikasinya.

Status versi#

Lua 5.4 adalah seri rilis yang masih dipelihara, sedangkan Lua 5.5 yang dirilis pada Desember 2025 merupakan rilis terbaru bahasa ini. Jalur ini menggunakan Lua 5.4 sebagai acuan karena seri tersebut paling luas dipakai dan stabil. Pada praktiknya, versi Lua yang disematkan setiap host sering berbeda satu sama lain. Sebagian host masih berjalan di atas Lua 5.1 atau LuaJIT, yaitu implementasi Lua berkecepatan tinggi yang kompatibel dengan Lua 5.1, sedangkan host lain sudah menggunakan 5.4. Roblox bahkan berjalan di atas Luau yang dialeknya bergerak sendiri.

Kenyataan tersebut menuntut kebiasaan memeriksa versi sebelum mengandalkan fitur tertentu. Dokumentasi setiap host umumnya menyebut versi Lua yang disematkan, dan skrip yang hanya menggunakan fitur inti yang mapan umumnya berjalan di banyak host sekaligus. Materi jalur ini memakai fitur inti Lua 5.4 yang stabil, sehingga contoh-contohnya aman diikuti pada penerjemah 5.4. Perbedaan versi juga berarti perilaku tertentu dapat berubah antarhost, sehingga menguji skrip pada penerjemah yang digunakan host menjadi kebiasaan yang baik sebelum skrip disebarkan.

Ringkasan#

  • Lua adalah bahasa skrip ringan yang dirancang untuk disematkan pada aplikasi host, sehingga skripnya berjalan di dalam proses aplikasi lain, bukan sebagai program mandiri.
  • Aplikasi host menyematkan penerjemah Lua, memuat berkas skrip ke dalamnya, dan saling bertukar pemanggilan dengan skrip melalui fungsi yang dibuka host.
  • Desainnya bertumpu pada table sebagai satu-satunya struktur data, penerjemah kecil berbasis C, dan portabilitas yang tinggi.
  • Lua 5.4 tetap dipelihara, Lua 5.5 adalah rilis terbaru, dan versi yang disematkan setiap host sering berbeda sehingga perlu diperiksa lebih dahulu.

Referensi#