Jedyną korzyścią, o której obecnie myślę, jest to, że możesz dokonywać aktualizacji kodowania za pośrednictwem Lua bez konieczności ponownej kompilacji.
Nie lekceważ użyteczności tego tak łatwo. Nigdy nie zrozumiesz, jak będziesz produktywny, dopóki nie usuniesz kroku ponownej kompilacji.
„Płynąć” jest dość dobrze rozumieć pojęcie psychologiczne, jeśli chodzi o pracę. Płynie z tego uczucie, gdy koncentrujesz się na aktywności, kiedy analizujesz i rozwiązujesz problemy prawie bez zastanowienia itp. Jesteś najbardziej wydajny, kiedy „płyniesz”.
Czasy kompilacji wszystko psują. Trudno jest pozostać w ruchu, jeśli masz 10-sekundową kompilację między testowaniem czegoś.
Kiedy rozwijasz rozgrywkę, zwykle masz „ciasną pętlę”. Masz pomysł, kodujesz test, aby sprawdzić, czy działa, a następnie wypróbowujesz. Jeśli to nie działa, zmodyfikuj go i spróbuj ponownie. Czas „testowania kodu” jest bardzo ważny dla utrzymania przepływu. Kluczowe znaczenie ma zmniejszenie jej do minimum.
Lua (lub dowolny wbudowany język skryptowy) pozwala ci testować zmiany, nie tylko bez „kompilacji”, ale także w grze . W zależności od tego, jak zbudujesz grę, możesz uruchomić polecenie, które uruchomi ponownie grę z nowymi skryptami, bez konieczności zatrzymywania i ponownego ładowania danych itd. Nie tylko nie musisz ponownie kompilować, nie musisz ponownie uruchamiać.
Zdolność do tego, przy odpowiednim wsparciu silnika, może znacznie zwiększyć wydajność.
Kolejną ważną zaletą skryptów jest możliwość po prostu nie dbania. Jeśli spędziłeś dużo czasu na pisaniu C ++, byłbyś zaskoczony, ile czasu spędzasz w ciągu kilku minut. Gdzie pamięć jest usuwana. Gdzie to się uwalnia. Nawet jeśli używasz shared_ptr
wszędzie, wystarczy samo wpisanie wszystkich tych nazw zmiennych spowalnia cię.
W dynamicznie pisanym języku skryptowym nie musisz się tym przejmować. Określanie zakresu jest proste. Funkcje są pierwszorzędnymi obiektami; nie musisz ręcznie budować funktorów. Tak łatwo jest robić pewne rzeczy.
To ma negatywne strony, jeśli nie jesteś zdyscyplinowanym programistą. W Lua bardzo łatwo jest używać globałów (choć istnieją sposoby, aby temu zapobiec). Brak opieki oznacza, że możesz być bardzo niechlujny podczas pisania kodu.
Ale z drugiej strony bycie bardzo niechlujnym może mieć zalety .
Kolejną zaletą Lua jest to, że tworzy ładny język opisu danych. Podobnie jak JSON to tylko plik JavaScript, który buduje i zwraca tablicę / tabelę, możesz tworzyć skrypty Lua zwracające tabele.
Jest to przydatne w przypadku plików konfiguracyjnych; Format tabeli Lui jest znacznie lepszy niż format .ini. Format jest nadal dość czysty, kompaktowy i rozszerzalny.
Aha, i wciąż jest to skrypt Lua, więc może wykonywać logikę. Minusem tego jest ... cóż, jest to skrypt Lua, więc może on wykonywać rzeczywistą logikę . To może być katastrofalne w grze, ponieważ użytkownik może potencjalnie zacząć coś popsuć.
Ale tak naprawdę łatwo sobie z tym poradzić. Lua została zaprojektowana do osadzania, co oznacza, że izolacja jest w rzeczywistości dość łatwa. Rzeczywiście, nowy stan Lua domyślnie nie zapewnia niczego ; musisz zrobić coś, aby odsłonić nawet najbardziej podstawowe ze standardowych bibliotek Lua. Dostęp do plików, dostęp do stanu gry itp. Jest wyłącznie opt-in, a nie opt-out. I każdy stan Lua jest odrębny od siebie. Stan Lua używany przez skrypty AI nie musi być stanem Lua używany przez pliki konfiguracyjne.
Mam trochę kodu, który pozwala ci zarejestrować wiele standardowych bibliotek Lua, ale przechodzi i usuwa wszystkie pliki IO. Ostatecznie najgorsze, co może zrobić plik konfiguracyjny oparty na skryptach Lua, powoduje awarię gry natychmiast po uruchomieniu, powodując brak pamięci. A ponieważ nie udostępniasz ręcznie tych plików konfiguracyjnych, haker nie byłby zbyt zabawny.
Powiedziałbym, że największym minusem każdego języka skryptowego jest debugowanie. Większość języków skryptowych nie ma debuggerów, a Lua nie jest inaczej. Lua ma wszystkie narzędzia potrzebne do zbudowania narzędzi do debugowania. Ale tak naprawdę nie ma wbudowanego debugera. Musisz go połączyć. A to będzie wymagało rozsądnego poziomu pracy.
Lub możesz zrobić to z „debugowaniem printf”. To zależy od tego, ile kodu Lua piszesz.