Как интероперабельности работает

Я знаю, что многие крупномасштабные приложения, такие как видеоигры, создаются с использованием нескольких языков. Например, скорее всего, игровые / физические движки написаны на C++ , а игровые задачи, GUI написаны на чем-то вроде Python или Lua.

Я понимаю почему это разделение ролей сделано; используйте языки нижнего уровня для задач, требующих экстремальной оптимизации, настройки, эффективности и скорости, при использовании языков более высокого уровня для ускорения производства время, уменьшить неприятные ошибки и так далее.

недавно я решил предпринять более крупный личный проект и хотел бы разделить части проекта, подобные приведенным выше. На данный момент я действительно смущен тем, как работает эта совместимость между языками (особенно скомпилированными vs интерпретируемыми).

Я хорошо знаком с деталями перехода от теста кода ANSCII к загрузке исполняемого файла, когда он написан на чем-то вроде C/C++. Мне очень интересно, как что-то вроде работает видеоигра, построенная на разных языках. Это большой/широкий вопрос, но конкретно меня интересует:

  • как работает логика уровня кода? Т. е. как я могу вызвать код Python из программы на C++? Тем более, что они не поддерживают одни и те же встроенные типы?
  • как выглядит изображение программы? Из того, что я могу сказать, видеоигра работает в одном процессе, так как выглядит образ среды выполнения при запуске программы на C / C++ это вызывает функцию Python?
  • если вызов кода из интерпретируемого языка из скомпилированной программы, какова последовательность событий, которые происходят? Т. е. если я внутри своего скомпилированного исполняемого файла и по какой-то причине вызываю интерпретируемый язык внутри цикла, должен ли я ждать интерпретатора каждую итерацию?

мне на самом деле трудно найти информацию о том, что происходит на машинном уровне, поэтому любая помощь будет оценена. Несмотря на то Мне любопытно в целом о взаимодействии программного обеспечения, меня особенно интересует взаимодействие C++ и Python.

большое спасибо за любое понимание, даже если это просто указывает мне, где я могу найти больше информации.

2 ответов


в конкретном случае python у вас есть в основном три варианта (и это обычно применяется по всем направлениям):

  1. Host python в C++: с точки зрения программы на C++ интерпретатор python является библиотекой C. На стороне python вам может потребоваться или не понадобиться использовать что-то вроде ctypes для предоставления api C (++).

  2. Python использует код C++ в качестве DLL / SOS-c++ код, вероятно, ничего не знает о python, python определенно должен использовать интерфейс внешней функции.

  3. Межпроцессная связь-в основном, запускаются два отдельных процесса, и они разговаривают через сокет. В наши дни вы, вероятно, используете какую-то архитектуру веб-служб для этого.


в зависимости от того, что вы хотите сделать:

  • взгляните на SWIG:http://www.swig.org/ это инструмент, который направлен на соединение кода C / C++ С Python, Tcl, Perl, Ruby и т. д. Общим вариантом использования является интерфейс Python (графический или нет), который вызовет код C/C++. SWIG будет анализировать код C / C++ для генерации интерфейсов.

  • Libpython: это lib, который позволяет вставлять код Python. У вас есть несколько примеров здесь: http://docs.python.org/3.0/extending/embedding.html