Що ви шукаєте на мові сценаріїв? [зачинено]


10

Я пишу трохи вкладеної мови для іншого проекту. Хоча розробка ігор не була її первинним наміром, вона починає виглядати як непогана форма, і я думаю, я буду розвивати її в тій дузі в якийсь момент.

Не розкриваючи жодних деталей (щоб уникнути упередженості), мені цікаво знати:

Які особливості ви любите мовою сценаріїв для розвитку ігор?

Якщо ви використовували Lua, Python або іншу вбудовану мову, наприклад Tcl або Guile, як свою основну мову сценаріїв в ігровому проекті, які аспекти ви вважаєте найбільш корисними?

  • Мовні особливості (лямбди, заняття, паралелізм)

  • Особливості впровадження (оптимізація продуктивності, JIT, апаратне прискорення)

  • Особливості інтеграції (прив'язки C, C ++ або .NET)

  • Або щось зовсім інше?


2
Заплутаність: Тому що, якщо її можна притупити, то, ймовірно, вона також є досить гнучкою. Візьмемо, наприклад, Perl, який може бути затуманений настільки, що він схожий на вихід, викликаний лінійним шумом від модему 300 Гбіт / с (коли хтось інший підняв телефон на іншому кінці будинку) ще в часи, коли вони були швидко. ;-P
Рендольф Річардсон

1
@Randolf: Добрий момент. Єдина проблема з припухлістю полягає в тому, що вона, як правило, покладається на стабільну мову, якою молоді мови не є. Обфускатор, який працює з 0,10, може не працювати з 0,11.
Джон Перді,

@Jon Purdy: Це правильно (+1 для вас). Існує також аспект прихованого коду, який важче підтримувати. Однак важливо, що слід зазначити, що припухлість може дати один цікавий показник того, наскільки гнучка мова.
Рендольф Річардсон,

5
@Randolf: коли perl не виглядає так?
Кен

1
@Joe Wreschnig Це приказка "кого мені вибрати", це більше "які функції є хорошими в мові сценаріїв".
Качка комуністична

Відповіді:


4

Я шукаю дві речі - швидкість та інтеграція. Зазвичай двоє йдуть разом і при знайомстві. На жаль, для C ++ майже немає мов, які пропонують швидкість та інтеграцію. Я використовував Lua, і це смоктало, жахливо. Я весь час писав прив’язки і ніде майже не вистачало фактично написання коду.

Мовні особливості? Сенс вбудовування мови сценаріїв не в тому, щоб він міг мати яскраві динамічні особливості мови, яких у моїй оригінальній мові не було, це так, що її можна інтерпретувати під час виконання . Мені це не байдуже, якщо це в основному функціонально, то це чудово і відповідає моїй мові хоста (в даному випадку C ++). Однак дивно, що мови, призначені для інтеграції в хост-програми, абсолютно не відповідають тій частині інтеграції .

Чи потрібні спільні процедури? Ні, мені спільні процедури не потрібні. Чи потрібен мені динамічний набір тексту? Ні, мені потрібно знати які типи повертаються до мене з моєї мови сценаріїв, і оскільки весь мій існуючий код побудований на основі дуже сильного набору тексту, я б дуже хотів, щоб мій код сценарію теж міг поважати це. Чи потрібно мені збирання сміття? Ні, мої типи вже керують власними ресурсами, і я, безумовно, хочу детерміновану знищення. Я хочу гото? Ні - я хочу кинути винятки.

Проблема, яку я знайшов, полягала в тому, що в основному всі існуючі мови сценаріїв були розроблені для розширення C, а не C ++, і не мають належної підтримки моделі C ++ багатьма способами, і крім цього вони мають абсолютно різну семантику. Як на землі я збираюся перевести shared_ptr, що є автоматичним детермінованим знищенням, у середовище, що збирається сміттям? Ви можете писати будь-які бібліотеки для обгортання, які ви хочете, ви не зміните семантику основної мови, несумісну з мовою, яку ви намагаєтеся розширити. Як я можу переконатися, що це void*правильний тип? Як я можу впоратися зі спадщиною? Як я кидаю та ловлю винятки? Це просто не працює.

Хорошою мовою сценаріїв для C ++ було б статично набрано, значення семантики, детерміновано знищено, кидати та ловити винятки та поважати моїх деструкторів / конструкторів / конструкторів копій, тому що тоді всі мої типи будуть просто працювати, приємно і легко, і отримана мова буде швидкий і підтримую всю мою оригінальну семантику, легко пов'язується.


Вам слід спробувати щось подібне до цієї бібліотеки обгортки, яку я нещодавно написав для себе, щоб вирішити деякі ті самі проблеми, які у вас були. Ви можете використовувати shared_ptrs та інше з ним просто чудово, це безпечно для типу (наскільки це може бути все-таки), ви можете вирішити, чи хочете ви життя чимось, що контролюється вашим кодом або оточенням Lua, воно підтримує успадкування, і це надзвичайно схожий на звичайний API Lua. Я не впевнений, що я отримую скаргу на прив'язку, але я просто використовую фрагменти vim, щоб зробити свої прив'язки в 99% часу.
Алекс Еймс

2

Для веб-ігор три важливі для мене фактори:

  • Ознайомлення
  • Швидкість
  • Інтеграція

Особливо мені подобається Perl, почасти тому, що я вже знайомий з мовою, і тому, що з модулем веб-сервера, як mod_perl2, є величезна користь від продуктивності та інтеграції - mod_perl2 зберігає в RAM складену версію сценаріїв (інтерпретується лише на Перше завантаження), що дає йому головну перевагу швидкості порівняно з іншими інтерпретованими мовами, які не мають параметрів компіляції, а також інтегрується в сервер Apache HTTPd з багатофункціональним API, що забезпечує доступ до безлічі дуже потужних функцій.

Ці фактори можуть бути корисними для розробки ігор на основі веб-сторінок (і там, де потрібен доступ до бази даних, кешування підключень до бази даних допомагає додатково скоротити час відгуку для користувачів). Звичайно, це може бути не найбільш ідеальним рішенням для всього, оскільки кожна мова має свої переваги (і недоліки), але вона завжди добре працювала для моїх потреб.


2

Впорядковано у порядку (зменшувальної) важливості:

  • Зрозумілий з першого погляду. Власне, це вимога до будь-якої мови, яку я хочу використовувати, але для написання сценаріїв це, мабуть, важливіше: сценарії, за визначенням, змінюються частіше, ніж "основний" код. Отже, не LISP чи PERL.
  • Терзистість. Сценарії постійно пишуться та переписуються, а введення лотів та партій коду «котлопластика» неефективне.
  • Легка налагодження. Переважно з точками прориву, прохідними і т.д.
  • Легка інтеграція з обраною вами основною технологією. Якщо я використовую C ++ для своєї гри, мені знадобляться гарні прив’язки на C ++, як у LUA. Якщо гра в C #, я б вибрав мову на основі CLI: C #, IronPython, Boo.
  • Мовні особливості: легкі асоціативні масиви, супроводи, можливо лямбда. Власне, це в основному залежить від того, для чого я буду використовувати сценарії. Сценарії AI відрізняються від, скажімо, скриптів ініціалізації.
  • Хороша документація. У C # присвячений цілий MSDN, а у Бу є лише джерела. тому C # набагато кращий.
  • Гарне середовище розвитку. VS або Eclipse щоразу б'є Блокнот.

+1 Це мені дуже допомагає, дякую. Я зачекаю, чи є ще якась дискусія, але я думаю, ви це добре висвітлили.
Джон Перді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.