Как работает совместимость

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

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

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

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

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

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

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

6

Решение

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

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

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

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

2

Другие решения

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

  • Посмотрите на 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

0

По вопросам рекламы [email protected]