Open source para sa Luau, isang variant ng pagsuri ng uri ng wikang Lua

Inanunsyo ang open source at paglalathala ng unang standalone na paglabas ng Luau programming language, na nagpatuloy sa pagbuo ng wikang Lua at pabalik na katugma sa Lua 5.1. Ang wikang Luau ay pangunahing inilaan para sa pag-embed ng mga scripting engine sa mga application at naglalayong makamit ang mataas na pagganap at mababang pagkonsumo ng mapagkukunan. Ang code ng proyekto ay nakasulat sa C++ at bukas sa ilalim ng lisensya ng MIT.

Pinapalawak ni Luau ang Lua na may mga kakayahan sa pagsuri ng uri at ilang bagong syntactic na konstruksyon tulad ng mga literal na string. Ang wika ay pabalik na tugma sa Lua 5.1 at bahagyang may mas bagong mga bersyon. Sinusuportahan ang Lua Runtime API, na nagbibigay-daan sa iyong gamitin ang Luau na may umiiral nang code at mga binding. Ang runtime ng wika ay nakabatay sa isang napakahusay na reworked na Lua runtime 5.1 code, ngunit ang interpreter ay ganap na muling isinulat. Sa panahon ng pag-unlad, ang ilang mga bagong diskarte sa pag-optimize ay ginamit upang makamit ang mas mataas na pagganap kumpara sa Lua.

Ang proyekto ay binuo ng Roblox at ginagamit sa code ng gaming platform, mga laro, at mga application ng user ng kumpanyang ito, kabilang ang editor ng Roblox Studio. Sa una, ang Luau ay binuo sa likod ng mga saradong pinto, ngunit sa huli ay napagpasyahan na ilipat ito sa kategorya ng mga bukas na proyekto para sa karagdagang pinagsamang pag-unlad kasama ang pakikilahok ng komunidad.

Pangunahing mga tampok:

  • Unti-unting pag-type, na sumasakop sa isang intermediate na posisyon sa pagitan ng dynamic at static na pag-type. Pinapayagan ka ng Luau na gumamit ng static na pag-type kung kinakailangan sa pamamagitan ng pagtukoy ng impormasyon ng uri sa pamamagitan ng mga espesyal na anotasyon. Ang mga built-in na uri na "any", "nil", "boolean", "number", "string" at "thread" ay ibinigay. Kasabay nito, ang posibilidad ng paggamit ng dynamic na pag-type nang walang tahasang pagtukoy sa uri ng mga variable at function ay napanatili. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == β€œa” end
  • Suporta para sa mga string literal (tulad ng sa Lua 5.3) gaya ng "\0x**" (hexadecimal number), "\u{**}" (Unicode character) at "\z" (end of line), pati na rin ang kakayahang makita ang pag-format ng numero (maaari kang sumulat ng 1_000_000 sa halip na 1000000), mga literal para sa hexadecimal (0x...) at mga binary na numero (0b......).
  • Suporta para sa expression na "magpatuloy", na umakma sa umiiral nang keyword na "break", upang lumipat sa isang bagong pag-ulit ng loop.
  • Suporta para sa mga operator ng compound assignment (+=, -=, *=, /=, %=, ^=, ..=).
  • Suporta para sa paggamit ng mga conditional na "if-then-else" na mga bloke sa anyo ng mga expression na nagbabalik ng halaga na kinakalkula sa panahon ng pagpapatupad ng block. Maaari kang tumukoy ng di-makatwirang bilang ng mga elseif na expression sa isang bloke. lokal na maxValue = kung a > b pagkatapos a iba b lokal na palatandaan = kung x < 0 pagkatapos -1 elseif x > 0 pagkatapos 1 iba 0
  • Ang pagkakaroon ng isang mode ng paghihiwalay (sandbox), na nagbibigay-daan sa iyo upang patakbuhin ang hindi mapagkakatiwalaang code. Maaaring gamitin ang feature na ito para ayusin ang paglulunsad nang magkatabi ng sarili mong code at code na isinulat ng isa pang developer, halimbawa, mga third-party na library para sa kaligtasan nito na hindi matitiyak.
  • Isang limitasyon ng karaniwang library kung saan inalis ang mga function na maaaring lumikha ng mga problema sa seguridad. Halimbawa, ang mga aklatan na "io" (pag-access sa mga file at proseso ng paglulunsad), "package" (pag-access ng mga file at pag-load ng mga module), "os" (mga function para sa pag-access ng mga file at pagbabago ng mga variable ng kapaligiran), "debug" (hindi ligtas na operasyon gamit ang memorya) , β€œdofile” at β€œloadfile” (FS access).
  • Nagbibigay ng mga tool para sa pagsusuri ng static na code, pagtukoy ng mga error (linter) at pagsuri sa tamang paggamit ng mga uri.
  • Sariling high-performance parser, bytecode interpreter at compiler. Hindi pa sinusuportahan ng Luau ang JIT compilation, ngunit sinasabing ang Luau interpreter ay medyo maihahambing sa pagganap sa LuaJIT sa ilang sitwasyon.

Pinagmulan: opennet.ru

Magdagdag ng komento