Я знаю, что многие крупномасштабные приложения, такие как видеоигры, создаются с использованием нескольких языков. Например, вполне вероятно, что игровые / физические движки написаны на C ++, в то время как игровые задачи, GUI написаны на чем-то вроде Python или Lua.
я понимаю Зачем это разделение ролей сделано; Используйте языки нижнего уровня для задач, которые требуют экстремальной оптимизации, настройки, эффективности и скорости, в то время как языки более высокого уровня ускоряют время производства и снижают количество неприятных ошибок.
Недавно я решил заняться более крупным личным проектом и хотел бы разделить части проекта, подобные вышеописанным. На данный момент я действительно запутался в том, как работает эта совместимость между языками (особенно скомпилированными и интерпретированными).
Я хорошо знаком с деталями перехода от теста кода ANSCII к загрузке исполняемого файла, когда он написан на языке C / C ++. Мне очень любопытно, как работает нечто вроде видеоигры, построенной на разных языках. Это большой / широкий вопрос, но особенно меня интересует:
На самом деле мне трудно найти информацию о том, что происходит на уровне машины, поэтому любая помощь будет принята с благодарностью. Хотя в целом мне интересно узнать о взаимодействии программного обеспечения, я особенно заинтересован во взаимодействии C ++ и Python.
Большое спасибо за любую информацию, даже если она просто указывает мне, где я могу найти больше информации.
В конкретном случае с Python у вас есть в основном три варианта (и это обычно применяется по всем направлениям):
Хост Python на C ++: с точки зрения программы на C ++ интерпретатор python является библиотекой C. Что касается Python, вам может понадобиться или не понадобиться использовать что-то вроде ctypes для представления API C (++).
Python использует код C ++ в качестве DLL / SO — код C ++, вероятно, ничего не знает о python, python определенно должен использовать интерфейс сторонних функций.
Межпроцессное взаимодействие — в основном, два отдельных процесса работают, и они общаются через сокет. В наши дни вы, вероятно, будете использовать какую-то архитектуру веб-сервисов для достижения этой цели.
В зависимости от того, что вы хотите сделать:
Посмотрите на SWIG: http://www.swig.org/ Это инструмент, предназначенный для соединения кода C / C ++ с Python, Tcl, Perl, Ruby и т. Д. Распространенным вариантом использования является интерфейс Python (графический или нет), который вызывает код C / C ++. SWIG проанализирует код C / C ++ для генерации интерфейсов.
Libpython: это библиотека, которая позволяет встраивать код Python. У вас есть несколько примеров здесь: http://docs.python.org/3.0/extending/embedding.html