- Luau adalah bahasa skrip embedded yang cepat, aman, dan mendukung tipe gradual, diturunkan dari Lua 5.1
- Bahasa ini berkembang dengan peningkatan pada performa, alat bantu bahasa, dan sistem tipe untuk mendukung game kompleks dan codebase berskala besar di platform Roblox
- Tidak seperti Lua standar, Luau memiliki fitur sandboxing sehingga kode dengan tingkat hak akses berbeda dapat berjalan berdampingan
- Sintaksnya kompatibel dengan Lua 5.1, tetapi menyediakan ekstensi sintaks tambahan dan alat analisis (linter, type checker) untuk meningkatkan kualitas kode
- Dengan optimasi performa, bytecode kustom, dukungan JIT, dan lainnya, Luau menargetkan kecepatan eksekusi setara LuaJIT serta memiliki potensi besar untuk digunakan di berbagai lingkungan embedded di luar Roblox
Motivation (latar belakang)
- Sekitar tahun 2006, Roblox mengadopsi Lua 5.1 sebagai bahasa scripting untuk game
- Seiring waktu, tingkat kompleksitas game di platform Roblox meningkat dan ukuran tim membesar, sehingga bahasa dan implementasinya ditingkatkan secara besar-besaran untuk mengatasi keterbatasan Lua lama
- Sejalan dengan pertumbuhan platform, banyak investasi dilakukan pada optimasi performa, kemudahan penggunaan, dan pengembangan tool terkait bahasa
- Secara khusus, saat mengelola codebase skala besar dengan lebih dari 1 juta baris kode pada 2020, mereka menyadari bahwa penerapan sistem tipe gradual menjadi hal yang esensial
- Berdasarkan kebutuhan ini, Roblox mengembangkan bahasa turunan dari Lua bernama Luau, yang menyediakan kemampuan untuk menjadi cepat, kecil, aman, sekaligus memungkinkan penerapan tipe secara gradual
- Penjelasan lebih rinci tersedia di dokumen Why Luau
Ikhtisar Luau
- Luau adalah bahasa skrip embedded berbasis Lua 5.1
- Menyediakan runtime yang cepat dan ringan
- Mendukung sistem tipe gradual sehingga analisis dinamis dan statis dapat digunakan bersamaan
- Terintegrasi ke Roblox Studio, dan mode strict dapat diaktifkan dengan flag
--!strict - Developer dapat melihat dokumentasi yang terhubung dengan Roblox di Luau Creator Docs
Sandboxing (fitur sandbox)
- Luau membatasi pustaka standar yang diekspos dan menyediakan fitur sandboxing tambahan
- Dengan ini, kode non-privileged yang ditulis developer umum dan kode privileged internal platform dapat dijalankan secara paralel dengan aman
- Karena itu, lingkungan eksekusinya berbeda dari Lua standar
- Detail lebih lanjut dapat dilihat pada penjelasan Sandbox
Compatibility (kompatibilitas)
- Sebisa mungkin mempertahankan kompatibilitas mundur dengan Lua 5.1, sambil juga mengadopsi sebagian fitur dari versi yang lebih baru
- Namun, Luau tidak menerima semua keputusan desain Lua, melainkan mencerminkan use case dan batasan khas Roblox
- Status dukungan fitur dari versi setelah Lua 5.1 tersedia di dokumen Compatibility
Syntax (sintaks)
- Sepenuhnya kompatibel dengan sintaks Lua 5.1
- Selain itu, menyediakan ekstensi sintaks yang modern dan familier untuk meningkatkan kenyamanan pengembangan
- Sintaks lengkap dapat dilihat di dokumen Syntax
Analysis (alat analisis)
-
Menyediakan alat analisis skrip untuk membantu menulis kode yang benar
-
Komponennya:
- Linter: mendeteksi kesalahan umum
- Type Checker: memverifikasi tipe
-
Dapat dijalankan melalui tool CLI
luau-analyze -
Untuk aturan lint lihat dokumen Lint, dan untuk panduan type checking lihat dokumen Typecheck
Performance (performa)
- Menyediakan frontend kustom yang mencakup parser, linter, dan type checker, serta bytecode, interpreter, dan compiler yang dioptimalkan
- Dalam beberapa kasus, performanya dapat bersaing dengan interpreter LuaJIT
- Mendukung compiler JIT manual pada platform x64 dan ARM64, yang dapat sangat meningkatkan performa program tertentu
- Runtime terus dioptimalkan dan sebagian komponennya ditulis ulang untuk meningkatkan efisiensi
- Karakteristik performa secara rinci tersedia di dokumen Performance
Libraries (pustaka)
- Bahasa ini sendiri merupakan superset penuh dari Lua 5.1
- Pada pustaka standar, beberapa fungsi dihapus dan beberapa fungsi baru ditambahkan
- Saat di-embed ke dalam aplikasi, bahasa ini juga dapat mengakses pustaka ekstensi khusus aplikasi
- Dokumentasi pustaka lengkap tersedia di dokumen Library
1 komentar
Komentar Hacker News
srcmemiliki 11 ribu baris kode C dan 1.900 baris header.CreateThread(fn),Wait(ms)untuk menangani coroutine dengan mudah seperti di FiveM, serta fitur Await/Promises (implementasi Luau Promise). Di FiveM, wrapper seperti ini sangat membantu optimisasi skrip dan pengelolaan coroutine: contoh scheduler Lua FiveM--!strict, kode tetap berjalan tanpa error atau warning sama sekali meski ada pelanggaran tipe yang jelas. Itu berbeda dari perilaku yang saya harapkan.luau, pemeriksaan tipe tidak diterapkan. Kalau di lingkungan embedded semua kode dipaksa menjalani type checking sebelum kompilasi, maka Anda bisa mendapatkan pengalaman sesuai harapan, yaitu type error tertangkap. Ini merupakan desain yang nyaris tak terhindarkan karena mereka memindahkan jutaan baris kode Lua 5.1 ke Luau sekaligus.tsc, dan setelah itu error/hasilnya dipetakan kembali ke Luau, apakah itu bisa menjadi cara cepat membuat type checker untuk berbagai bahasa dinamis?