Depende de como você deseja projetar seu sistema mod. Vou explorar dois deles.
SDK
Provavelmente, você precisará que seus modders usem o mesmo idioma que você e carregue mods por reflexão (ou similar, dependendo do idioma de sua escolha). Obviamente, isso limitará você a idiomas que podem fazer ligação tardia - e muitos podem fazer isso (mesmo C pode fazer ligação tardia com alguns LoadLibrary
truques inteligentes ). Você pode até fazer uma meta-modificação, onde um mod pode hospedar outros mods (por exemplo, mods com script).
O primeiro problema com essa abordagem é ocultar o estado interno. Tomando C #, por exemplo, um modder poderia simplesmente usar reflexão para acessar membros privados, C também pode fazer isso (embora seja necessário mais esforço).
O segundo problema está hospedando. As pessoas realmente não gostam de código estrangeiro em execução no sistema sem sandbox no lugar. Como pior cenário, você pode escrever um mod que configure um seedbox; se isso foi instalado em um ISP, poderia causar sérios danos à sua reputação.
Script
Os modders usariam uma linguagem como Lua para criar mods. Você exigiria uma linguagem que pudesse invocar o código nativo (para fazer interface com Lua); ou você teria que escrever sua própria linguagem de script no idioma de sua escolha.
O primeiro problema aqui é que a maioria das linguagens de script é interpretada, o que pode não ser aceitável para sistemas em tempo real (embora veja LuaJIT); como jogos.
Ironicamente, o segundo problema ainda existe aqui; Tomando Lua como exemplo, fiquei extremamente desapontado por ter funções de 'descasque' incluídas na biblioteca principal / padrão - tornando-o totalmente inútil como um ambiente de área restrita (sem uma grande quantidade de esforço, sorte e manutenção), é difícil retrate o quão bravo estou com isso, mas eu realmente espero que eles estejam bebendo alguns coquetéis fortes quando incluírem esses anti-recursos . Obviamente, você poderia evitar isso facilmente se rolasse sua própria linguagem (consulte: UnrealScript).
Finalmente, o custo de interagir com um mecanismo de script pode ser proibitivo - novamente, tomando Lua como exemplo, combinado com C #: C # possui uma sobrecarga substancial ao invocar funções nativas (via P / Invoke) e Lua é uma API bastante 'falante'. Isso pode causar problemas se a maneira como você cria o 'script SDK' exigir muito bate-papo entre o idioma principal e a linguagem de script (observe que C realmente não tem esse problema). Novamente, você pode evitar isso escrevendo sua própria linguagem de script (e no caso de C # compilando-a no MSIL) e executando-a da maneira mais rápida no seu ambiente [virtual].
Como o script está essencialmente rodando em um sistema completamente diferente do seu código primário, você pode controlar o acesso ao estado interno completamente (a menos que eles façam coisas sofisticadas com as funções de shell mencionadas anteriormente).
Conclusão
Eu fiz veer um tópico off-bit, no entanto, o que você pode basicamente Garner daquela parede de texto é que você deve ser capaz de fazer um jogo moddable em qualquer idioma (eu arriscaria dizer que você puder ) - mas em alguns idiomas pode levar a mais trabalho. Eu sou um pouco anal com segurança? Sim, você também deveria ser quando se trata de código de usuário.