Peta Ekosistem

Penyebaran Lua pada LÖVE 2D, Neovim, skrip Redis, LuaJIT, dan Luau.

Daftar isi

Topik ini memetakan penyebaran Lua pada aplikasi host yang nyata, yaitu LÖVE 2D, Neovim, Redis, LuaJIT, Luau, dan pengelola paket LuaRocks. Pemetaan mencakup peran Lua pada setiap host, basis versi yang digunakannya, serta konsekuensi kompatibilitas ketika skrip berpindah dari satu host ke host lain. Setelah topik ini dibaca, pilihan pemeriksaan versi dan pembatasan fitur sebelum menulis skrip untuk host tertentu sudah tersedia.

Host gim dan editor#

LÖVE 2D adalah kerangka kerja gim dua dimensi yang menyematkan Lua sebagai bahasa utamanya. Seluruh logika gim, mulai dari perulangan gambar, pembacaan masukan, hingga pemutaran suara, ditulis sebagai skrip Lua yang memanggil API milik kerangka kerja tersebut. Situs resminya beserta wikinya menyediakan referensi API yang menjadi titik awal pengembangan gim dengan Lua, dan gim yang dihasilkan didistribusikan sebagai berkas skrip di atas mesin yang telah dikompilasi.

Neovim, penyunting teks yang ditujukan bagi pengembang perangkat lunak, menggunakan Lua sebagai bahasa konfigurasi dan plugin di samping Vimscript. Panduan Lua resminya menjelaskan cara menyunting konfigurasi, menulis plugin, dan mengakses API editor dari skrip. Versi Lua yang disematkan dapat berbeda menurut versi Neovim dan komponennya, dengan LuaJIT yang umum digunakan sebagai mesinnya, sehingga dokumentasi resminya tetap menjadi rujukan utama mengenai kemampuan bahasanya.

Skrip atomik pada server#

Redis menyematkan penerjemah Lua 5.1 yang dapat mengeksekusi skrip melalui perintah EVAL. Skrip berjalan di dalam server dengan sifat atomik, yaitu tidak ada perintah lain yang disisipkan selama skrip berjalan, sehingga rangkaian operasi baca tulis dapat dipaketkan menjadi satu langkah. Halaman dokumentasi EVAL beserta halaman API Lua-nya mendokumentasikan kemampuan yang tersedia bagi skrip, misalnya fungsi redis.call untuk menjalankan perintah Redis dari dalam skrip.

Lingkungan skrip Redis berupa sandbox yang ketat. Skrip tidak mengakses berkas sistem dan tidak menggunakan jam sistem secara langsung, dan penerjemahnya adalah Lua 5.1 yang bukan versi terbaru bahasa ini. Kedua sifat tersebut berpengaruh pada penulisan skrip, karena fitur yang muncul setelah Lua 5.1 tidak tersedia pada versi tersebut. Contoh konsepnya telah dibahas pada model sandboxing, dan halaman resminya menjadi acuan batasan yang berlaku saat skrip ditulis.

LuaJIT, Luau, dan LuaRocks#

LuaJIT adalah implementasi mandiri dari Lua yang menargetkan kompatibilitas Lua 5.1 dan dikenal cepat pada banyak kasus berkat pelaksana just-in-time, yaitu kompilasi kode menjadi instruksi mesin saat program berjalan. LuaJIT menambahkan perpanjangan di luar Lua 5.1, termasuk FFI (foreign function interface) yang memungkinkan kode Lua memanggil fungsi C secara langsung tanpa pembungkus tambahan. Situs resminya mendokumentasikan batas kompatibilitas beserta daftar perpanjangannya, dan sebagian host pada tabel berikut menggunakannya sebagai mesin.

Luau adalah turunan Lua yang dikembangkan untuk Roblox dan menjadi bahasa utama platform tersebut. Basis bahasanya adalah Lua 5.1 dengan perpanjangan sendiri, dan pengembangannya menambahkan sistem tipe bertahap (gradual typing), yaitu anotasi tipe yang bersifat opsional dan dapat diperiksa per bagian kode. Halaman kompatibilitas resminya mencatat perbedaan-perbedaannya dari Lua standar, termasuk fakta bahwa goto tidak didukung, sehingga pola Lua 5.4 tidak dapat begitu saja disalin ke skrip Luau.

Distribusi skrip dan pustaka Lua dipusatkan oleh LuaRocks, pengelola paket untuk bahasa ini. Paket pada LuaRocks dilacak versinya dan dipasang dari terminal, sehingga pustaka pihak ketiga dapat digunakan pada host yang mengizinkannya. Tidak semua host membuka akses tersebut, karena sandbox yang tertutup seperti pada Redis mengesampingkan pemasangan paket pihak ketiga. Dokumentasi resminya menjelaskan bentuk paket dan cara pemasangannya.

Ladang ranjau kompatibilitas versi#

Basis versi yang berbeda membuat perpindahan skrip dari satu host ke host lain penuh jebakan. Kode yang ditulis untuk Lua 5.4 murni dapat gagal pada host berbasis 5.1, misalnya kode yang menggunakan goto, operator pembagian bulat //, atau bilangan bulat 64-bit, karena ketiganya baru muncul setelah Lua 5.1. Arah sebaliknya juga berlaku, yaitu perpanjangan milik LuaJIT atau Luau tidak ada pada penerjemah standar 5.4. Tabel berikut merangkum basis versi pada setiap host sebagai peta awal.

HostPeran LuaBasis versi
Penerjemah standaracuan bahasa dan pustakaLua 5.4 dan 5.5
LÖVE 2Dbahasa utama seluruh logika gimLuaJIT atau Lua 5.4, tergantung versi dan platform
Neovimkonfigurasi dan pluginLuaJIT yang tersemat, tergantung versi
Redisskrip atomik melalui EVALLua 5.1 yang tersemat
LuaJITimplementasi mandiri yang cepattarget kompatibilitas Lua 5.1 dengan perpanjangan
Luaubahasa utama RobloxLua 5.1 dengan perpanjangan sendiri

Tabel di atas perlu dibaca dengan kualifikasi, karena setiap host dapat memperbarui basis versinya seiring waktu. Luau mencatat perbedaannya dari Lua standar pada halaman kompatibilitas resminya, sedangkan LuaJIT menyebut target Lua 5.1 beserta perpanjangannya pada situsnya. Perubahan perilaku kecil juga dapat muncul antarversi penerjemah standar, sehingga tabel ini hanya menjadi peta awal dan bukan jaminan kompatibilitas.

Panduan praktis memeriksa host#

Kebiasaan yang menghemat banyak waktu adalah memeriksa versi penerjemah sebelum menulis skrip. Pada penerjemah standar, global _VERSION berisi nama versi yang menjalankan skrip, sedangkan host tertentu menyebut versinya pada dokumentasinya atau menyediakan perintah pemeriksaan sendiri. Blok berikut menunjukkan pemeriksaan paling sederhana pada penerjemah standar.

lua
-- periksa versi penerjemah yang menjalankan skrip
print(_VERSION)
text Keluaran
Lua 5.4

Nilai _VERSION menyebut versi besar dan minor saja, dan host yang berjalan di atas LuaJIT umumnya melaporkan versi Lua yang ditirunya melalui global yang sama. Praktik yang menyertai pemeriksaan versi adalah menahan diri dari fitur paling baru apabila skrip akan dipindah ke host lain, menguji skrip pada penerjemah yang benar-benar digunakan host, dan merujuk dokumentasi resmi setiap host untuk API domainnya. Dengan kebiasaan tersebut, pemetaan pada topik ini berperan sebagai panduan pemilihan, bukan sumber kejutan.

Ringkasan#

  • LÖVE 2D menjalankan seluruh logika gimnya dengan Lua, Neovim menggunakan Lua untuk konfigurasi dan plugin, dan Redis mengeksekusi skrip atomik pada penerjemah Lua 5.1 yang tersemat.
  • LuaJIT menargetkan Lua 5.1 dengan perpanjangan seperti FFI, sedangkan Luau berbasis Lua 5.1 dengan sistem tipe bertahap dan tanpa dukungan goto.
  • Basis versi yang berbeda menjadikan kompatibilitas ladang ranjau, karena fitur seperti goto, operator //, dan bilangan bulat 64-bit tidak ada pada host berbasis 5.1.
  • Periksa versi penerjemah host melalui _VERSION atau dokumentasinya sebelum menulis dan menyebarkan skrip.

Referensi#