Otwarte oprogramowanie dla Luau, wariantu języka Lua sprawdzającego typ

Ogłoszono otwarcie kodu źródłowego i publikację pierwszego samodzielnego wydania języka programowania Luau, kontynuującego rozwój języka Lua i wstecznie kompatybilnego z Lua 5.1. Język Luau jest przeznaczony przede wszystkim do osadzania silników skryptowych w aplikacjach i ma na celu osiągnięcie wysokiej wydajności i niskiego zużycia zasobów. Kod projektu napisany jest w języku C++ i jest otwarty na licencji MIT.

Luau rozszerza Lua o możliwości sprawdzania typów i kilka nowych konstrukcji składniowych, takich jak literały łańcuchowe. Język jest wstecznie kompatybilny z Lua 5.1 i częściowo z nowszymi wersjami. Obsługiwany jest interfejs API Lua Runtime, umożliwiający używanie Luau z istniejącym kodem i powiązaniami. Środowisko wykonawcze języka opiera się na mocno przerobionym kodzie wykonawczym Lua 5.1, ale interpreter został całkowicie przepisany. Podczas opracowywania zastosowano kilka nowych technik optymalizacji, aby osiągnąć wyższą wydajność w porównaniu z Lua.

Projekt został opracowany przez firmę Roblox i jest wykorzystywany w kodzie platformy do gier, gier i aplikacji użytkownika tej firmy, w tym w edytorze Roblox Studio. Początkowo Luau powstawało za zamkniętymi drzwiami, jednak ostatecznie zdecydowano się przenieść je do kategorii projektów otwartych w celu dalszego wspólnego rozwoju z udziałem społeczności.

Najważniejsze cechy:

  • Pisanie stopniowe, zajmujące pozycję pośrednią pomiędzy pisaniem dynamicznym i statycznym. Luau pozwala w razie potrzeby używać pisania statycznego, określając informacje o typie za pomocą specjalnych adnotacji. Dostępne są wbudowane typy „any”, „nil”, „boolean”, „number”, „string” i „thread”. Jednocześnie zachowana jest możliwość stosowania typowania dynamicznego bez jednoznacznego definiowania typu zmiennych i funkcji. funkcja foo(x: liczba, y: ciąg): wartość logiczna lokalna k: ciąg = y:rep(x) return k == „a” koniec
  • Obsługa literałów łańcuchowych (jak w Lua 5.3), takich jak „\0x**” (liczba szesnastkowa), „\u{**}” (znak Unicode) i „\z” (koniec linii), a także możliwość wizualizacji formatowania liczb (można zapisać 1_000_000 zamiast 1000000), literałów dla liczb szesnastkowych (0x...) i binarnych (0b......).
  • Obsługa wyrażenia „kontynuuj”, uzupełniającego istniejące słowo kluczowe „break”, aby przejść do nowej iteracji pętli.
  • Obsługa złożonych operatorów przypisania (+=, -=, *=, /=, %=, ^=, ..=).
  • Obsługa stosowania bloków warunkowych „jeśli-to-else” w postaci wyrażeń zwracających wartość obliczoną podczas wykonywania bloku. Można określić dowolną liczbę wyrażeń elseif w bloku. local maxValue = jeśli a > b to a else b znak lokalny = jeśli x < 0 to -1 elseif x > 0 to 1 else 0
  • Obecność trybu izolacji (piaskownica), który umożliwia uruchomienie niezaufanego kodu. Tej funkcji można użyć do zorganizowania uruchomienia obok własnego kodu i kodu napisanego przez innego programistę, na przykład biblioteki stron trzecich, których bezpieczeństwa nie można zagwarantować.
  • Usunięto ograniczenie standardowej biblioteki, z której usunięto funkcje mogące potencjalnie stwarzać problemy bezpieczeństwa. Na przykład biblioteki „io” (dostęp do plików i uruchamianie procesów), „pakiet” (dostęp do plików i ładowanie modułów), „os” (funkcje dostępu do plików i zmiany zmiennych środowiskowych), „debug” (niebezpieczna praca z pamięcią) , „dofile” i „loadfile” (dostęp FS).
  • Udostępnienie narzędzi do statycznej analizy kodu, identyfikacji błędów (lintera) i sprawdzenia poprawności użycia typów.
  • Własny, wysokowydajny parser, interpreter kodu bajtowego i kompilator. Luau nie obsługuje jeszcze kompilacji JIT, ale twierdzi się, że interpreter Luau jest w niektórych sytuacjach porównywalny pod względem wydajności z LuaJIT.

Źródło: opennet.ru

Dodaj komentarz