motkot
@motkot
Программирование C#.

Как игровые движки понимают инородные языки?

Всегда было интересно как игровые движки понимают инородные языки. Например много движков написано на языке C++ и во многих из них есть поддержка языков на которых сам движок не написан.

Например:
Unity написан на C++, но игры пишутся на C#
Love2D написан на C++, но игры пишутся на Lua
Cocos2D написан на Python/C++, но игры пишутся на Lua

Каким образом движок написанный на C++ понимает другие языки? Движки которые не используют инородные языки работают быстрее? Можно совместить любые языки?
  • Вопрос задан
  • 798 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
1. Встраивают интерпретатор нужного языка, при необходимости урезают стандартную библиотеку (чтобы не давать коду плагинов лишних возможностей) и подсовывают туда средства общения с хост-программой.
2. Если нет нужды изолировать плагин от остальной программы, то полагаю что да, накладные расходы на поддержку плагинов уменьшатся в случае, когда плагин написан на том же языке, что и программа. В противном случае организация "песочницы" может занять столько же усилий, сколько встраивание интерпретатора.
3. Лучше, если язык плагина является или интерпретируемым (как Lua или JS), или компилируется в байткод (как Python/Java/C#). Также желательно, чтобы язык плагина имел средства интроспекции.
Ответ написан
Комментировать
Интерпретатор lua (в случае Love2D и Cocos), и Mono (в случае Unity) можно подключить, как обычную сишную библиотеку.
В этом случае C++ не нужно "понимать" чужой язык, достаточно лишь понимать, какие сишные функции надо вызывать, чтобы запустить код на "чужом" языке, и как туда передать доступ к функциям движка (это делается, обычно, путём передачи указателей на функции)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev Куратор тега Разработка игр
software engineer

Каким образом движок написанный на C++ понимает другие языки?

Движок - это набор функций. Он может быть создан в виде стандартных библиотек для Windows/Linux
Ну а библиотеки может использовать любая другая программа, включая другие языки программирования.
Тем более, что движки и пишут так, чтобы их было удобно использовать в вызове из другой программы.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
если есть договоренность как передать любую фигню то ее можно передать, даже если нет то тоже получается
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Есть такие штуки - трансляторы, интерпретаторы и компиляторы, которые можно писать на любом языке - хоть на C++, хоть на C# или Python.
Вот этим они и занимаются - понимают любые языки вплоть до самописных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы