2011-08-31 18 views
25

Mi empresa tiene una gran base de código Java heredada y muchos de nuestros clientes ejecutan WebSphere y WebLogic. Estamos considerando comenzar a usar Scala pero no hemos podido confirmar que Scala (2.9.X) funcione bien con JDK de IBM (y JRockit de BEA).¿Scala funciona bien en las JVM propietarias?

Dado que estas JVM pasan el TCK, diría que debería funcionar, pero teniendo en cuenta los diversos problemas que he tenido con las diferentes JVM a lo largo de los años, soy un poco nervous. ¿Hay algún inconveniente que tener en cuenta al usar Scala con otras JVM?

  1. ¿Banderas del compilador para usar (o evitar)?
  2. ¿Debo compilar el código usando Scala en hotspot o en la JVM de clientes?
  3. ¿Algún problema con mezclar JAR compilados usando diferentes versiones de Scala/Java en diferentes JVM?

Cualquier historia de guerra, enlaces y sugerencias son bienvenidos.

Respuesta

13

El compilador de Scala debe producir el mismo código de bytes independientemente de la JVM que utilice. Esperaría que Scala se ejecutara en las tres plataformas, sin embargo HotSpot ha intentado optimizar para lenguajes dinámicos y podría ser un poco mejor. (Posiblemente no es suficiente de qué preocuparse)

En los últimos años ha habido menos diferencias entre estas plataformas y en un futuro cercano espero que todas estén basadas directamente en OpenJDK (ya que IBM aceptó admitir OpenJDK ahora) Los equipos JRockit y Hotspot se han fusionado por un tiempo dado que Oracle posee ambos.

Sin embargo, si no está ejecutando la versión más reciente del JDK, es posible que vea algún problema.

Las JVMs se comunican entre sí muy bien y yo consideraría ejecutar Scala en su propia JVM para aislar cualquier preocupación que pueda tener.

4
  1. Nada en lo que pueda pensar.

  2. El compilador no debería marcar la diferencia, de hecho, si ejecutar scalac en una VM diferente se generaría un bytecode diferente, definitivamente es un error.

  3. Siempre debe ejecutar el código Scala con la misma versión de Scala con la que se compiló. El código compilado en 2.x no se ejecutará en 2.x + 1 de forma predeterminada. Sin embargo, el código compilado en 2.x.y debería ejecutarse en 2.x.y + 1.

Estoy de acuerdo, sin embargo, que sería bueno para conseguir licencias de terceros proveedores como IBM o Azul para incluir esas plataformas en las pruebas.

5

Sí, Scala funciona en una JVM no Sun. Considere, por ejemplo, estos dos comentarios del código fuente:

//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 

No hay muchos de estos. Después de todo, los diversos JVM son supuestos para ser compatibles y probados para ello. Pero, mientras surgen problemas, se toman medidas para garantizar que las cosas funcionen sin problemas.

Cuestiones relacionadas