Para un juego de programación multijugador, estoy trabajando en un servidor de compilación de fondo para Scala que admite la compilación de múltiples fuentes independientes presentadas por los jugadores. Tuve éxito en la gestión de compilaciones rápidas y secuenciales sin tener que recargar el compilador creando una instancia de objeto Global
compilador través¿Está el reentrante del compilador Scala?
val compilerGlobal = new Global(settings, reporter)
y luego ejecutar trabajos de compilación individuales a través de
val run = new compilerGlobal.Run
run.compile(sourceFilePathList)
quisiera ahora idealmente le gustaría poner en paralelo el servidor (es decir, realizar varias ejecuciones de compilación al mismo tiempo), pero sin volver a cargar el compilador (principalmente para evitar volver a analizar la lib) desde cero cada vez. ¿Es esto posible, es decir, se muestra la segunda parte arriba (de manera segura :-) reentrante, o tiene estado global? Si no, ¿hay algo más que pueda probar? Actualmente estoy enfocado en dar soporte a Scala 2.9.1.
Tiene el 'estado global' de la tabla de símbolos, para empezar. – EJP
Utilice un conjunto de instancias de compilador. – retronym
@retronym Gracias por la sugerencia. Mi pregunta principal, sin embargo, es "¿cuánto puedo reciclar?". Su comentario sugiere que no existe un estado compartido global entre las instancias del compilador (en la memoria) (clase Global), que es un buen comienzo. ¿Pero también está sugiriendo que el individuo ejecuta DO share state (más allá de la lib estándar analizada)? Necesitaría más información. –