Open source untuk Luau, varian pengecekan tipe dari bahasa Lua

Mengumumkan open source dan publikasi rilis mandiri pertama dari bahasa pemrograman Luau, melanjutkan pengembangan bahasa Lua dan kompatibel dengan Lua 5.1. Luau dirancang terutama untuk menyematkan mesin skrip ke dalam aplikasi dan bertujuan untuk mencapai kinerja tinggi dan konsumsi sumber daya yang rendah. Kode proyek ditulis dalam C++ dan terbuka di bawah lisensi MIT.

Luau memperluas Lua dengan kemampuan pemeriksaan tipe dan beberapa konstruksi sintaksis baru seperti string literal. Bahasa ini kompatibel dengan Lua 5.1 dan sebagian dengan versi yang lebih baru. Lua Runtime API didukung, memungkinkan Anda menggunakan Luau dengan kode dan pengikatan yang ada. Waktu proses bahasa didasarkan pada kode waktu proses Lua 5.1 yang dikerjakan ulang secara besar-besaran, namun penerjemahnya sepenuhnya ditulis ulang. Selama pengembangan, beberapa teknik optimasi baru digunakan untuk mencapai kinerja yang lebih tinggi dibandingkan dengan Lua.

Proyek ini dikembangkan oleh Roblox dan digunakan dalam kode platform game, game, dan aplikasi pengguna perusahaan ini, termasuk editor Roblox Studio. Awalnya Luau dikembangkan secara tertutup, namun pada akhirnya diputuskan untuk dipindahkan ke kategori proyek terbuka untuk pengembangan lebih lanjut bersama dengan partisipasi masyarakat.

Fitur utama:

  • Pengetikan bertahap, menempati posisi perantara antara pengetikan dinamis dan statis. Luau memungkinkan Anda menggunakan pengetikan statis sesuai kebutuhan dengan menentukan informasi tipe melalui anotasi khusus. Tipe bawaan "any", "nil", "boolean", "number", "string" dan "thread" disediakan. Pada saat yang sama, kemungkinan menggunakan pengetikan dinamis tanpa secara eksplisit menentukan jenis variabel dan fungsi tetap dipertahankan. fungsi foo(x: angka, y: string): boolean lokal k: string = y:rep(x) return k == “a” end
  • Dukungan untuk literal string (seperti pada Lua 5.3) seperti "\0x**" (angka heksadesimal), "\u{**}" (karakter Unicode) dan "\z" (akhir baris), serta kemampuan untuk memvisualisasikan pemformatan angka (Anda dapat menulis 1_000_000, bukan 1000000), literal untuk bilangan heksadesimal (0x...) dan bilangan biner (0b......).
  • Dukungan untuk ekspresi "lanjutkan", melengkapi kata kunci "break" yang ada, untuk melompat ke iterasi loop baru.
  • Dukungan untuk operator penugasan gabungan (+=, -=, *=, /=, %=, ^=, ..=).
  • Dukungan untuk penggunaan blok bersyarat "if-then-else" dalam bentuk ekspresi yang mengembalikan nilai yang dihitung selama eksekusi blok. Anda dapat menentukan sejumlah ekspresi elseif dalam satu blok. local maxValue = jika a > b maka a else b tanda lokal = jika x < 0 maka -1 elseif x > 0 maka 1 else 0
  • Kehadiran mode isolasi (sandbox), yang memungkinkan Anda menjalankan kode yang tidak dapat dipercaya. Fitur ini dapat digunakan untuk mengatur peluncuran kode Anda sendiri secara berdampingan dan kode yang ditulis oleh pengembang lain, misalnya, perpustakaan pihak ketiga yang keamanannya tidak dapat dijamin.
  • Batasan pustaka standar yang fungsi-fungsinya berpotensi menimbulkan masalah keamanan telah dihapus. Misalnya, perpustakaan “io” (mengakses file dan meluncurkan proses), “paket” (mengakses file dan memuat modul), “os” (berfungsi untuk mengakses file dan mengubah variabel lingkungan), “debug” ( operasi tidak aman dengan memori) , “dofile” dan “loadfile” (akses FS).
  • Menyediakan alat untuk analisis kode statis, mengidentifikasi kesalahan (linter) dan memeriksa kebenaran penggunaan tipe.
  • Memiliki parser, penerjemah bytecode, dan kompiler berkinerja tinggi. Luau belum mendukung kompilasi JIT, namun diklaim bahwa penerjemah Luau cukup sebanding kinerjanya dengan LuaJIT dalam beberapa situasi.

Sumber: opennet.ru

Tambah komentar