Как выбрать архитектуру приложения с учетом необходимости использования нескольких языков программирования?
Требуется создать приложение так чтобы можно было использовать в при его расширении несколько языков(С/С++, Common Lisp, Prolog, Python и возможно, но не обязательно java), ну то есть как единую среду.
Ну да, что-бы как MSIL у майкрософт, примерно.
Можно, и это наверное правильно, организовать всё взаимодействие через Си.
Но тогда не ясно как правильно, вот с си в си всё ясно, и пока в нём лисп или скажем питон - тоже. Но если я хочу скажем вызвать из питона лисп код(или наоборот), когда они оба в приложении? Поднимать сервера на локалхосте, добавлять функционал в си, или как?
Дайте пожалуйста совет или скажите что про подобное можно почитать.
Язык теперь называется IL. Вас же интересует виртуальная машина (и ее окружение) - CLR, в в которой исполняется байткод, в который компилируется (ассемблируется?) IL.
Толстый Лорри, Меня интересует то что в результате можно вызывать то что напинано на бейсике(или другом CLR языке) из C#(или другого). Сам эффект, но без .Net\MONO.
Ну я и подумал, может кто-то уже долбался с таким, возможно статьи есть, или где-то в книгах описаны варианты подобного. Однако, то-ли формулирую криво, то-ли нет такого в поисковике.
Вы не сказали что за приложение. Если это сервер, то делайте микросервисы на чём хотите. Если более-менее нагруженное десктопное приложение - то ищите способы вызвать код на каждом языке из, допустим, С/С++. Если не сильно требовательное к производительности десктопное приложение, то можно через stdout или соккеты данные передавать между несколькими приложениями на разных языках (как это в AI Russian Cup делается).
Это будет нечто вроде среды для обучения\научных работ(уровня студентов ВУЗа), кроме симуляций процессов(иногда), пожалуй ничего больше особо требовательного там не будет.
Но предполагалось сначала построить фреймворк для взаимодействия, чтобы его-же использовать и в серверной части игрушек, и в идеале вообще везде где понадобится.
И да, спасибо, ваш ответ уже наталкивает на некий путь, и даже не один.
наверное вам стоит пойти путём онлайн песочниц - сделать систему на одном языке, которая умеет создавать контейнеры под разные задачи. Хотите проверить код студента на питоне - ок, запустите контейнер с пистоном, запустите в нём код, сравните выхлоп с эталоном.
Иван Корюков, вы правы, для проверки домашних\лабораторных работ это вполне вариант.
Но как быть с... Блин, кажется я понял как быть(с многоязычием), простоты как с дотнетом конечно не выйдет. но таки за костыли надо расплачиваться удобством.
Самый правильный способ взаимодействия в этом случае - микросервисы обменивающиеся сообщаниями. Надо поискать подходящий брокер сообшений, поддерживаемый нужными языками, и строить инфраструктуру на его базе. Классическое решение - RabbitMQ, но может быть будет удобнее взять MQTT или что-то, что уже есть под рукой (в .net вроде какой-то есть).
Посмотрите в сторону SOA - сервис ориентированная архитектура. На основе wcf. У сервиса (на любом языке) есть интерфейс, на его основе генерируются контракты (xml), которые подключаются в другие языки и получаются вызывы методы сторонних сервисов.