Это будет зависеть от того, какой именно язык вы хотите использовать как для графического интерфейса, так и для логики. Как ответил Дэвид, у вас в основном есть только эти два варианта, и у них обоих есть свои преимущества и недостатки:
Размещение всего в одном приложении является лучшим с точки зрения производительности, потому что, когда вы будете выполнять вызовы на другой язык, он не будет ждать, пока другой процесс получит контроль, а затем не будет ждать, пока ваш процесс получит контроль снова, чтобы получить ответ. Это также самое простое решение, если вы можете встроить язык в другой язык, тогда они по определению будут работать в одном и том же процессе.
Использование разных процессов может быть полезно, если вы все время делаете много вещей в «логическом» процессе, но хотите, чтобы графический интерфейс по-прежнему оставался отзывчивым. (хотя это может быть достигнуто с помощью потоков, в одном процессе). Кроме того, если вы не можете встроить языки, это будет самое простое решение. (например, использование простых сокетов для IPC, которые существуют почти на всех языках и действительно переносимы. (что не так верно для таких вещей, как каналы или общая память)
Так что это действительно зависит от языков, которые вы выберете.