Луа хэлний төрөл шалгах хувилбар болох Луаугийн нээлттэй эх сурвалж

Луа хэлийг үргэлжлүүлэн хөгжүүлж, Луа 5.1-тэй хоцрогдсон нийцтэй Луау програмчлалын хэлний анхны бие даасан хувилбарыг нээлттэй эх сурвалж, хэвлэн нийтлэхээ зарлав. Luau нь үндсэндээ скриптийн хөдөлгүүрүүдийг програмуудад суулгахад зориулагдсан бөгөөд өндөр гүйцэтгэл, бага нөөц зарцуулалтад хүрэх зорилготой юм. Төслийн код нь C++ хэл дээр бичигдсэн бөгөөд MIT лицензийн дагуу нээлттэй.

Луау нь Lua-г төрөл шалгах чадварууд болон string literals гэх мэт шинэ синтаксийн бүтцүүдээр өргөтгөдөг. Энэ хэл нь Lua 5.1 болон шинэ хувилбаруудтай хэсэгчлэн нийцдэг. Lua Runtime API-г дэмждэг бөгөөд энэ нь танд одоо байгаа код болон холболттой Luau-г ашиглах боломжийг олгоно. Хэлний ажиллах хугацаа нь ихээхэн дахин боловсруулсан Lua runtime 5.1 код дээр үндэслэсэн боловч орчуулагчийг бүрэн дахин бичсэн. Хөгжлийн явцад Луа-тай харьцуулахад илүү өндөр гүйцэтгэлд хүрэхийн тулд зарим шинэ оновчлолын техникийг ашигласан.

Төслийг Roblox боловсруулсан бөгөөд энэ компанийн тоглоомын платформ, тоглоом, хэрэглэгчийн програм, түүний дотор Roblox Studio засварлагчийн кодонд ашигладаг. Эхэндээ Луауг хаалттай хаалганы цаана боловсруулж байсан боловч эцэст нь олон нийтийн оролцоотойгоор цаашид хамтран хөгжүүлэх зорилгоор нээлттэй төслийн ангилалд шилжүүлэхээр шийдсэн.

Үндсэн онцлогууд:

  • Аажмаар бичих, динамик ба статик бичих хооронд завсрын байрлалыг эзэлдэг. Luau нь тусгай тэмдэглэгээгээр төрлийн мэдээллийг зааж өгөх замаар шаардлагатай бол статик бичих боломжийг танд олгоно. "Any", "nil", "boolean", "number", "string" болон "thread" гэсэн үндсэн төрлүүдийг оруулсан болно. Үүний зэрэгцээ хувьсагч, функцийн төрлийг тодорхой тодорхойлохгүйгээр динамик бичих боломжийг хадгалах боломжтой. функц foo(x: тоо, у: мөр): логикийн локал k: мөр = y:rep(x) буцах k == “a” төгсгөл
  • "\5.3x**" (0-тын тоо), "\u{**}" (Юникод тэмдэгт) болон "\z" (мөрийн төгсгөл) зэрэг мөрийн литералуудыг (Lua 1-ийн адил) дэмждэг. тооны форматыг дүрслэх чадвар (та 000-ын оронд 000_1000000_0 гэж бичиж болно), 0-тын тоо (XNUMXx...) болон хоёртын тоонуудын (XNUMXb......) литерал.
  • Шинэ давталтын давталт руу шилжихийн тулд одоо байгаа "завсарлага" гэсэн түлхүүр үгийг нөхөж "үргэлжлүүлэх" илэрхийллийг дэмжинэ.
  • Нийлмэл хуваарилалтын операторуудын дэмжлэг (+=, -=, *=, /=, %=, ^=, ..=).
  • Блокыг гүйцэтгэх явцад тооцоолсон утгыг буцаах илэрхийлэл хэлбэрээр "if-then-alse" нөхцөлт блокуудыг ашиглахад дэмжлэг үзүүлэх. Та блок дотор дурын тооны elseif илэрхийллийг зааж өгч болно. орон нутгийн maxValue = хэрэв a > b бол a else b локал тэмдэг = хэрэв x < 0 бол -1 elseif x > 0 бол 1 өөр 0
  • Найдваргүй кодыг ажиллуулах боломжийг олгодог тусгаарлах горим (sandbox) байгаа эсэх. Энэ функцийг өөрийн код болон өөр хөгжүүлэгчийн бичсэн код, тухайлбал гуравдагч талын номын сангуудын аюулгүй байдлыг хангах боломжгүй зэрэгцүүлэн эхлүүлэх ажлыг зохион байгуулахад ашиглаж болно.
  • Аюулгүй байдлын асуудал үүсгэж болзошгүй функцуудыг устгасан стандарт номын сангийн хязгаарлалт. Жишээлбэл, "io" (файл руу нэвтрэх, эхлүүлэх процессууд), "багц" (файл руу хандах, модулиудыг ачаалах), "os" (файл руу хандах, орчны хувьсагчдыг өөрчлөх функцууд), "дибаг хийх" (санах ойтой аюулгүй ажиллагаа) гэх мэт сангууд. , "dofile" болон "loadfile" (FS хандалт).
  • Статик кодын дүн шинжилгээ хийх, алдааг тодорхойлох (линтер) болон төрлүүдийн зөв хэрэглээг шалгах хэрэгслүүдээр хангах.
  • Өндөр хүчин чадалтай задлагч, байт код тайлбарлагч, хөрвүүлэгчтэй. Луау нь JIT эмхэтгэлийг хараахан дэмждэггүй боловч зарим тохиолдолд Luau орчуулагчийг LuaJIT-тэй харьцуулах боломжтой гэж мэдэгджээ.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх