2011-08-31 13 views
25

La mia azienda ha una base di codice Java legacy di grandi dimensioni e molti dei nostri clienti eseguono WebSphere e WebLogic. Stiamo considerando di iniziare a usare Scala ma non siamo stati in grado di confermare che Scala (2.9.X) funzioni bene con JDK di IBM (e JRockit di BEA).Scala funziona bene su JVM di proprietà?

Poiché queste JVM superano lo TCK, direi che dovrebbe funzionare, ma visti i vari problemi che ho avuto con le diverse JVM nel corso degli anni, sono un po 'nervous. Ci sono trucchi da sapere quando si usa scala con altri JVM?

  1. Eventuali flag del compilatore da utilizzare (o evitare)?
  2. Devo compilare il codice utilizzando Scala su hotspot o sulla JVM clienti?
  3. Problemi con il mix di JAR compilati utilizzando versioni diverse di Scala/Java su JVM diversi?

Eventuali storie di guerra, collegamenti e suggerimenti sono benvenuti.

risposta

13

Il compilatore Scala deve produrre lo stesso codice byte indipendentemente dalla JVM che si utilizza. Mi aspetto che Scala funzioni su tutte e tre le piattaforme, tuttavia HotSpot ha cercato di ottimizzare le lingue dinamiche e potrebbe essere leggermente migliore. (Probabilmente non abbastanza da preoccupare)

Negli ultimi anni c'è stata sempre meno differenza tra queste piattaforme e nel prossimo futuro mi aspetto che siano tutte basate direttamente su OpenJDK (come IBM ha accettato di supportare OpenJDK ora) I team JRockit e Hotspot sono stati uniti per qualche tempo da quando Oracle possiede entrambi.

Tuttavia, se non si esegue la versione recente del JDK, è possibile che si verifichi qualche problema.

Le JVM si parlano molto bene e prenderei in considerazione l'esecuzione di Scala nella propria JVM per isolare qualsiasi dubbio si possa avere.

4
  1. Nulla che potessi pensare.

  2. Il compilatore non dovrebbe fare la differenza, infatti se l'esecuzione di scalac su diverse VM genererebbe un codice di bytecode diverso, è sicuramente un bug.

  3. Si dovrebbe sempre eseguire il codice Scala con la stessa versione di Scala con cui è stato compilato. Il codice compilato su 2.x non verrà eseguito su 2.x + 1 per impostazione predefinita. Il codice compilato in 2.x.y dovrebbe essere eseguito su 2.x.y + 1, comunque.

Sono d'accordo, tuttavia, che sarebbe bello ottenere licenze da fornitori di terze parti come IBM o Azul per includere tali piattaforme in testing.

5

Sì, Scala funziona su JVM non Sun. Consideriamo, ad esempio, questi due commenti dal codice sorgente:

//print SourceAnnotation in a predefined way to insure 
// against difference in the JVMs (e.g. Sun's vs IBM's) 

    // on IBM J9 1.6 do not use ForkJoinPool 

Non ce ne sono molti. Dopo tutto, le varie JVM sono supposte per essere compatibili e testate per questo. Ma, mentre sorgono problemi, viene intrapresa un'azione per assicurarsi che le cose procedano senza intoppi.

Problemi correlati