Как интероперабельности работает
Я знаю, что многие крупномасштабные приложения, такие как видеоигры, создаются с использованием нескольких языков. Например, скорее всего, игровые / физические движки написаны на C++ , а игровые задачи, GUI написаны на чем-то вроде Python или Lua.
Я понимаю почему это разделение ролей сделано; используйте языки нижнего уровня для задач, требующих экстремальной оптимизации, настройки, эффективности и скорости, при использовании языков более высокого уровня для ускорения производства время, уменьшить неприятные ошибки и так далее.
недавно я решил предпринять более крупный личный проект и хотел бы разделить части проекта, подобные приведенным выше. На данный момент я действительно смущен тем, как работает эта совместимость между языками (особенно скомпилированными vs интерпретируемыми).
Я хорошо знаком с деталями перехода от теста кода ANSCII к загрузке исполняемого файла, когда он написан на чем-то вроде C/C++. Мне очень интересно, как что-то вроде работает видеоигра, построенная на разных языках. Это большой/широкий вопрос, но конкретно меня интересует:
- как работает логика уровня кода? Т. е. как я могу вызвать код Python из программы на C++? Тем более, что они не поддерживают одни и те же встроенные типы?
- как выглядит изображение программы? Из того, что я могу сказать, видеоигра работает в одном процессе, так как выглядит образ среды выполнения при запуске программы на C / C++ это вызывает функцию Python?
- если вызов кода из интерпретируемого языка из скомпилированной программы, какова последовательность событий, которые происходят? Т. е. если я внутри своего скомпилированного исполняемого файла и по какой-то причине вызываю интерпретируемый язык внутри цикла, должен ли я ждать интерпретатора каждую итерацию?
мне на самом деле трудно найти информацию о том, что происходит на машинном уровне, поэтому любая помощь будет оценена. Несмотря на то Мне любопытно в целом о взаимодействии программного обеспечения, меня особенно интересует взаимодействие C++ и Python.
большое спасибо за любое понимание, даже если это просто указывает мне, где я могу найти больше информации.
2 ответов
в конкретном случае python у вас есть в основном три варианта (и это обычно применяется по всем направлениям):
Host python в C++: с точки зрения программы на C++ интерпретатор python является библиотекой C. На стороне python вам может потребоваться или не понадобиться использовать что-то вроде ctypes для предоставления api C (++).
Python использует код C++ в качестве DLL / SOS-c++ код, вероятно, ничего не знает о python, python определенно должен использовать интерфейс внешней функции.
Межпроцессная связь-в основном, запускаются два отдельных процесса, и они разговаривают через сокет. В наши дни вы, вероятно, используете какую-то архитектуру веб-служб для этого.
в зависимости от того, что вы хотите сделать:
взгляните на 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