Sumber terbuka untuk Luau, varian penyemakan jenis bahasa Lua

Mengumumkan sumber terbuka dan penerbitan keluaran kendiri pertama bahasa pengaturcaraan Luau, meneruskan pembangunan bahasa Lua dan serasi ke belakang dengan Lua 5.1. Luau direka terutamanya untuk membenamkan enjin skrip ke dalam aplikasi dan bertujuan untuk mencapai prestasi tinggi dan penggunaan sumber yang rendah. Kod projek ditulis dalam C++ dan dibuka di bawah lesen MIT.

Luau memanjangkan Lua dengan keupayaan menyemak jenis dan beberapa binaan sintaksis baharu seperti literal rentetan. Bahasa ini serasi ke belakang dengan Lua 5.1 dan sebahagiannya dengan versi yang lebih baharu. API Lua Runtime disokong, membolehkan anda menggunakan Luau dengan kod dan pengikatan sedia ada. Masa jalan bahasa adalah berdasarkan kod masa jalan 5.1 Lua yang diolah semula dengan banyak, tetapi penterjemah ditulis semula sepenuhnya. Semasa pembangunan, beberapa teknik pengoptimuman baharu telah digunakan untuk mencapai prestasi yang lebih tinggi berbanding dengan Lua.

Projek ini dibangunkan oleh Roblox dan digunakan dalam kod platform permainan, permainan dan aplikasi pengguna syarikat ini, termasuk editor Roblox Studio. Pada mulanya, Luau dibangunkan secara tertutup, tetapi akhirnya diputuskan untuk memindahkannya ke kategori projek terbuka untuk pembangunan bersama selanjutnya dengan penyertaan masyarakat.

Ciri-ciri utama:

  • Penaipan beransur-ansur, menduduki kedudukan pertengahan antara penaipan dinamik dan statik. Luau membenarkan anda menggunakan penaipan statik seperti yang diperlukan dengan menentukan maklumat jenis melalui anotasi khas. Jenis terbina dalam "mana-mana", "nil", "boolean", "nombor", "rentetan" dan "benang" disediakan. Pada masa yang sama, kemungkinan menggunakan penaipan dinamik tanpa mentakrifkan jenis pembolehubah dan fungsi secara eksplisit dikekalkan. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == β€œa” end
  • Sokongan untuk literal rentetan (seperti dalam Lua 5.3) seperti "\0x**" (nombor perenambelasan), "\u{**}" (aksara Unikod) dan "\z" (hujung baris), serta keupayaan untuk menggambarkan pemformatan nombor (anda boleh menulis 1_000_000 dan bukannya 1000000), literal untuk perenambelasan (0x...) dan nombor perduaan (0b......).
  • Sokongan untuk ungkapan "teruskan", melengkapkan kata kunci "break" sedia ada, untuk melompat ke lelaran gelung baharu.
  • Sokongan untuk pengendali tugasan kompaun (+=, -=, *=, /=, %=, ^=, ..=).
  • Sokongan untuk penggunaan blok "if-then-else" bersyarat dalam bentuk ungkapan yang mengembalikan nilai yang dikira semasa pelaksanaan blok. Anda boleh menentukan bilangan arbitrari ungkapan elseif dalam blok. maxValue tempatan = jika a > b maka a else b tanda tempatan = jika x < 0 maka -1 elseif x > 0 maka 1 lain 0
  • Kehadiran mod pengasingan (kotak pasir), yang membolehkan anda menjalankan kod yang tidak boleh dipercayai. Ciri ini boleh digunakan untuk mengatur pelancaran bersebelahan dengan kod dan kod anda sendiri yang ditulis oleh pembangun lain, contohnya, perpustakaan pihak ketiga yang keselamatannya tidak dapat dijamin.
  • Had perpustakaan standard yang mana fungsi yang berpotensi menimbulkan masalah keselamatan telah dialih keluar. Contohnya, perpustakaan "io" (mengakses fail dan proses pelancaran), "pakej" (mengakses fail dan memuatkan modul), "os" (fungsi untuk mengakses fail dan menukar pembolehubah persekitaran), "nyahpepijat" (operasi tidak selamat dengan memori) , β€œdofile” dan β€œloadfile” (akses FS).
  • Menyediakan alatan untuk analisis kod statik, mengenal pasti ralat (linter) dan menyemak penggunaan jenis yang betul.
  • Penghurai berprestasi tinggi, penterjemah bytecode dan pengkompil sendiri. Luau belum lagi menyokong kompilasi JIT, tetapi didakwa bahawa penterjemah Luau agak setanding dalam prestasi dengan LuaJIT dalam beberapa situasi.

Sumber: opennet.ru

Tambah komen