Per un gioco di programmazione multigiocatore, sto lavorando a un server di compilation in background per Scala che supporta la compilazione di più alberi di sorgenti indipendenti inviati dai giocatori. Sono riuscito a correre veloce, compilations sequenziali senza ricaricare il compilatore istanziando l'oggetto Global
compilatore tramiteIl compilatore di Scala è rientranti?
val compilerGlobal = new Global(settings, reporter)
e quindi eseguire i lavori individuali di compilazione via
val run = new compilerGlobal.Run
run.compile(sourceFilePathList)
Vorrei ora ideale per parallelizzare il server (vale a dire eseguire più sessioni di compilazione contemporaneamente), ma senza ricaricare il compilatore (principalmente per evitare di ri-analizzare la lib) da zero ogni volta. È possibile, cioè la seconda parte mostrata sopra (in modo sicuro :-) ri-entrante, o mantiene lo stato globale? Se no, c'è qualcos'altro che posso provare? Attualmente sono concentrato sul supporto di Scala 2.9.1.
Detiene lo 'stato globale' della tabella dei simboli, per cominciare. – EJP
Utilizzare un pool di istanze del compilatore. – retronym
@retronym Grazie per il suggerimento. La mia domanda principale, tuttavia, è "quanto posso riciclare?". Il tuo commento suggerisce che non esiste uno stato globale condiviso tra istanze del compilatore (in memoria) (classe Global), che è un buon inizio. Ma stai anche suggerendo che l'individuo esegua lo stato di condivisione DO (oltre la normale lib standard analizzata)? Avrei bisogno di più informazioni. –