Po pięciu latach rozwoju wydanie , szybki i kompaktowy język programowania skryptowego, który stał się szeroko stosowany jako język osadzony (na przykład do definiowania konfiguracji lub pisania rozszerzeń). Kod interpretera Lua został napisany w języku C i na licencji MIT.
Lua łączy prostą składnię proceduralną z zaawansowanymi możliwościami opisu danych poprzez zastosowanie tablic asocjacyjnych i rozszerzalnej semantyki języka. Lua wykorzystuje dynamiczne typowanie, a konstrukcje języka są konwertowane na kod bajtowy, który jest uruchamiany na wirtualnej maszynie opartej na rejestrach z automatycznym zbieraniem śmieci. Sam interpreter został zaprojektowany jako biblioteka, którą można łatwo zintegrować z projektami w językach C i C++.
:
- Wprowadzono nowy tryb zbierania śmieci — „„, który uzupełniał poprzednio dostępny tryb przyrostowego zbierania śmieci. Nowy tryb obejmuje częstsze uruchamianie krótszego indeksowania, obejmującego tylko ostatnio utworzone obiekty. Pełne przeglądanie wszystkich obiektów jest wykonywane tylko wtedy, gdy pożądane wartości zużycia pamięci nie zostały osiągnięte po skróconym przeglądaniu. Takie podejście pozwala na wyższą wydajność i mniejsze zużycie pamięci w sytuacjach, w których przechowywana jest duża liczba krótkotrwałych obiektów.
- Dodano możliwość definiowania zmiennych stałych, zdefiniowanych za pomocą atrybutu „const”. Takie zmienne można przypisać tylko raz i nie można ich zmienić po inicjalizacji.
- Dodano obsługę zmiennych „", które są przypisywane za pomocą atrybutu "close" i przypominają stałe zmienne lokalne (z atrybutem const), różniąc się od nich tym, że wartość jest zamykana (wywoływana jest metoda "__close") za każdym razem, gdy następuje wyjście z zakresu, np. po normalnym zakończeniu bloku, przejściu za pomocą break/goto/return lub wyjściu w przypadku wystąpienia błędu.
- Typ "", która zapewnia możliwość przechowywania dowolnych danych C w zmiennych Lua (reprezentuje blok danych w pamięci lub zawiera wskaźnik C), może teraz zawierać wiele wartości (posiadać wiele metatabel).
- Zaprezentowano nową implementację funkcji generowania liczb pseudolosowych — math.random.
- Dodano system ostrzeżeń definiowanych za pomocą wyrażenia i, w przeciwieństwie do błędów, nie mają wpływu na dalsze wykonywanie programu.
- Dodano informacje debugowania dotyczące argumentów funkcji i wartości zwracanych w poleceniu „return”.
- Zaproponowano nową semantykę iterowania po liczbach całkowitych w pętlach.". Liczba iteracji jest obliczana przed rozpoczęciem pętli, co pozwala uniknąć przepełnienia zmiennej i pętli. Jeśli wartość początkowa jest większa od wartości granicznej, wyświetlany jest błąd.
- W funkcji 'dodano nowy opcjonalny argument „init”, który określa, od której pozycji rozpocząć wyszukiwanie (domyślnie od 1 znaku).
- Dodano nowe funkcje '' (resetuje wątek, czyści cały stos wywołań i zamyka wszystkie zmienne „do zamknięcia”) i '(zamyka współprogram i wszystkie powiązane zmienne „do zamknięcia”).
- Funkcje konwertujące ciągi znaków na liczby zostały przeniesione do biblioteki „string”.
- Wywołanie funkcji alokacji pamięci może teraz zakończyć się niepowodzeniem, jeśli rozmiar bloku pamięci zostanie zmniejszony.
- W funkcji 'dodano obsługę nowego specyfikatora formatu '%p' (wskaźnik zwrócony przez lua_topointer).
- Biblioteka utf8 zapewnia obsługę z liczbami do 2^31.
Źródło: opennet.ru
