Єдиною перевагою, про яку я зараз можу придумати, є те, що ви можете зробити кілька оновлень кодування через Lua, не потребуючи перекомпіляції.
Не знижуйте корисність цього так легко. Ви ніколи не зрозумієте, наскільки продуктивними ви будете, поки не заберете крок перекомпіляції.
«Потік» досить добре розуміється психологічна концепція , коли мова йде про роботу. Потік - це відчуття, яке ви отримуєте, коли ви зосереджені на діяльності, коли ви майже не замислюєтесь над аналізом та вирішенням проблем і т. Д. Ви є найбільш продуктивними, коли «плинете».
Складіть рази, щоб все це вкрутити. Важко залишатися в потоці, якщо у вас є навіть 10-секундна компіляція між тестуванням чогось.
Коли ви розробляєте геймплей, зазвичай у вас є «тугий цикл». У вас є ідея, ви кодуєте тест, щоб побачити, чи працює він, а потім ви спробуєте його. Якщо це не працює, ви модифікуєте його та повторіть спробу. Час "коду на тест" дуже важливий для підтримки потоку. Отримати її якомога меншою мірою є вирішальним.
Що дозволяє Lua (або будь-якій вбудованій мові сценаріїв) - це перевірити зміни, не тільки без "компіляції", але жити в грі . Залежно від того, як ви будуєте свою гру, ви можете запустити команду, яка перезапустить гру з новими сценаріями без необхідності зупиняти і перезавантажувати дані тощо. Ви не тільки не повинні перекомпілювати, не потрібно повторно запускати.
Здатність робити це, за умови належної підтримки двигуна, може різко підвищити продуктивність.
Ще одна основна перевага сценаріїв - це можливість просто не турбуватися. Якщо ви довго витрачалися на написання С ++, ви були б вражені тим, скільки часу ви витрачаєте за минуту. Де видалено пам'ять. Де це звільняється. Навіть якщо ви використовуєтеshared_ptr
скрізь, саме введення всіх цих назв змінних типів сповільнює вас.
Мовою сценаріїв, що динамічно набирається, вам не доведеться піклуватися. Оцінка простоти проста. Функції - це першокласні об'єкти; не потрібно вручну збирати функтори. Зробити деякі речі просто так просто .
Тепер це має негативи, якщо ви не дисциплінований програміст. У Луа дуже просто користуватися глобалами (хоча є способи запобігти цьому). Небайдужість означає, що ви можете бути дуже неохайними, коли кодуєте.
Але знову ж таки, бути дуже неохайним може мати переваги .
Ще одна перевага Луа полягає в тому, що вона робить приємну мову опису даних. Так само, як JSON - це лише файл JavaScript, який створює та повертає масив / таблицю, ви можете створювати скрипти Lua, які повертають таблиці.
Це корисно для файлів конфігурації; Формат таблиці Lua набагато краще, ніж формати .ini Формат все ще досить чистий, компактний та розширюваний.
О, і це все ще сценарій Lua, тому він може виконувати фактичну логіку. Недоліком цього є ... ну, це сценарій Lua, тому він може виконувати фактичну логіку . Це може бути катастрофічно в грі, оскільки користувач може потенційно почати викручувати речі.
Але насправді з цим легко впоратися. Lua розроблений для вбудовування, а це означає, що ізоляція насправді досить проста. Дійсно, свіжий стан Луа за замовчуванням не забезпечує нічого ; вам потрібно зробити щось, щоб викрити навіть найосновніші зі стандартних бібліотек Lua. Доступ до файлів, доступ до стану ігор тощо тощо - це все відмова, а не відмова. І кожен стан Луа є окремим один від одного. Стан Lua, який ви використовуєте для сценаріїв AI, не повинен бути статусом Lua, який ви використовуєте для файлів конфігурацій.
У мене фактично є код, який дозволяє реєструвати багато стандартних бібліотек Lua, але він проходить і видаляє всі файли IO. Зрештою, найгірше, що може зробити конфігураційний файл на основі скрипту Lua, - це призвести до краху вашої гри відразу після її запуску шляхом запуску її з пам'яті. А оскільки ви не ділитесь цими конфігураційними файлами вручну, це не буде дуже цікаво для хакера.
Я б сказав, що найбільшим недоліком будь-якої мови сценаріїв є налагодження. Більшість мов сценаріїв не мають налагоджувачів, і Lua нічим не відрізняється. У Луї є всі інструменти, які знадобляться для створення інструментів налагодження. Але він насправді не має вбудованого налагоджувача. Ви повинні скласти один. І це вимагатиме розумного ступеня роботи.
Або ви можете зробити це через "налагодження printf". Це дійсно залежить від того, скільки коду Lua ви пишете.