Возможно, вы захотите взглянуть на каркасы плагинов для .NET и на то, как они работают. Обычно кто-то пишет роботу для предоставления библиотеки DLL, которая экспортирует (в некоторой степени в зависимости от инфраструктуры плагинов) объект, реализующий интерфейс, предоставленный вашим кодом. Затем ваш код обращается к этому интерфейсу, чтобы сообщить роботу об окружающей среде и выяснить, что делает робот.
Многоязычная поддержка хороша, если расширена совместимость с .NET, то есть, если ваше ядро находится на C #, будет легко извлечь что-либо написанное на любом языке .NET, способном реализовать интерфейс плагина в правильный путь. Так что да, они могут использовать C ++, если они используют C ++ / CLI. Они также могут использовать Clojure / CLR, Niecza, Nemerle и т. Д.
Если вы хотите сделать его максимально совместимым с как можно большим количеством вещей, вам необходимо поддерживать библиотеки C в виде плагинов - C подобен базовому уровню межязыковой совместимости, и существует множество языков, которые могут представлять C-подобный интерфейс к миру. Хотя иногда приходится прыгать через какие-то ужасные обручи, чтобы это сработало.
Что касается безопасности, то в базовой форме вы смотрите на свободный код в DLL, поэтому он может делать абсолютно все, что угодно в рамках разрешений, предоставляемых операционной системой (при условии наличия ошибок безопасности в ОС, это означает что угодно совсем). Песочница для DLL-библиотек - хорошая идея, но ее нетривиально достичь. Если вам повезет, вы можете подключиться к системе песочницы .NET / Silverlight.
Совершенно другая идея состоит в том, чтобы определить протокол механизма робота <-> как сетевой протокол, чтобы роботы подключались к главному серверу и обменивались данными с помощью некоторого простого проводного протокола. Это позволило бы устранить проблемы с совместимостью языков - вы могли бы написать это во всем, что может обрабатывать сетевые подключения, - и вы могли бы запустить его на другом компьютере или, возможно, в виртуальной машине на том же компьютере, что дает вам форму «песочницы», если безопасность беспокойство, поскольку тогда это могло только уничтожить ВМ.
Вариант того, что я видел в системе боевых роботов много лет назад, - это написать каждого робота как исполняемый файл, который связывается через stdin и stdout с родительским процессом, который отвечает за его запуск и присоединение каналов к дочернему процессу, что они могут общаться.