Depende de cómo quieras diseñar tu sistema de modulación. Exploraré dos de ellos.
SDK
Lo más probable es que requiera que sus modders usen el mismo idioma que usted y carguen mods a través de la reflexión (o similar, según el idioma que elija). Obviamente, esto lo limitará a los lenguajes que pueden realizar enlaces tardíos, y hay muchos que pueden hacerlo (incluso C puede hacer enlaces tardíos con algunos LoadLibrary
trucos ingeniosos ). Incluso podría hacer algunos meta-modding, donde un mod podría alojar otros mods (por ejemplo, mods con script).
El primer problema con este enfoque es ocultar el estado interno. Tomando C # por ejemplo, un modder podría simplemente usar la reflexión para acceder a miembros privados, C también puede hacer esto (aunque se requiere más esfuerzo).
El segundo problema es el hosting. A la gente realmente no le gusta el código extranjero que se ejecuta en su sistema sin un entorno limitado. Como el peor de los casos, podría escribir un mod que configure una caja de semillas; Si se instaló en un ISP, podría dañar gravemente su reputación.
Scripting
Modders usaría un lenguaje como Lua para crear mods. Necesitaría un idioma que pudiera invocar código nativo (para interactuar con Lua); o tendría que escribir su propio lenguaje de secuencias de comandos en el idioma de su elección.
El primer problema aquí es que la mayoría de los lenguajes de secuencias de comandos se interpretan, lo que puede no ser aceptable para sistemas en tiempo real (aunque, vea LuaJIT); como los juegos
Irónicamente, el segundo problema todavía existe aquí; Tomando a Lua como ejemplo, me sentí extremadamente decepcionado porque tiene funciones de 'bombardeo' incluidas en la biblioteca principal / predeterminada, lo que lo hace completamente inútil como un entorno de espacio aislado (sin una gran cantidad de esfuerzo, suerte y mantenimiento), es difícil Describo lo enojado que estoy por esto, pero realmente espero que estén bebiendo algunos cócteles fuertes cuando incluyeron estas características . Obviamente, podría evitar esto fácilmente si desarrolla su propio lenguaje (consulte: UnrealScript).
Finalmente, el costo de interactuar con un motor de secuencias de comandos puede ser prohibitivo, tomando nuevamente a Lua como ejemplo, combinado con C #: C # tiene una sobrecarga considerable al invocar funciones nativas (a través de P / Invoke) y Lua es una API bastante 'conversadora'. Esto podría generar problemas si la forma en que diseña el 'SDK de script' requiere mucha conversación entre su idioma principal y su lenguaje de script (tenga en cuenta que C realmente no tiene este problema). Una vez más, podría esquivar esto escribiendo su propio lenguaje de secuencias de comandos (y en el caso de C # compilándolo en MSIL) y ejecutándolo de la manera más rápida en su entorno [virtual].
Debido a que el script se ejecuta esencialmente en un sistema completamente diferente a su código primario, puede controlar el acceso al estado interno por completo (a menos que hagan algunas cosas sofisticadas con las funciones de shell mencionadas anteriormente).
Conclusión
Hice veer un tema de bits, sin embargo, lo que básicamente se puede Garner de ese muro de texto es que usted debe ser capaz de hacer un juego modificable en cualquier idioma (me atrevería a decir que usted puede ) - pero en algunos idiomas puede llevar a más trabajo. ¿Soy un poco anal acerca de la seguridad? Sí, también debería serlo cuando se trata de código de usuario.