Подтвердить что ты не робот

Работает ли Scala на собственном JVM?

В моей компании есть большая устаревшая база кода Java, и многие из наших клиентов используют WebSphere и WebLogic. Мы рассматриваем возможность использования Scala, но не смогли подтвердить, что Scala (2.9.X) хорошо работает с IBM JDK (и BEA JRockit).

Поскольку эти JVM проходят TCK, я бы сказал, что он должен просто работать, но с учетом различных проблем, которые у меня были с разными JVM годы, когда я немного нервный. Есть ли какие-либо ошибки, которые следует учитывать при использовании Scala с другими JVM?

  • Любые флаги компилятора для использования (или избежания)?
  • Должен ли я компилировать код с помощью Scala на горячей точке или на JVM клиента?
  • Любые проблемы с микшированием JAR, скомпилированные с использованием разных версий Scala/Java на разных JVM?

Любые военные рассказы, ссылки и предложения приветствуются.

4b9b3361

Ответ 1

Компилятор Scala должен создавать одинаковый байт-код независимо от используемой вами JVM. Я ожидал бы, что Scala будет работать на всех трех платформах, однако HotSpot попытался оптимизировать динамические языки и может быть немного лучше. (Возможно, этого недостаточно, чтобы беспокоиться)

В последние годы между этими платформами все меньше и меньше разница, и в ближайшем будущем я ожидаю, что все они будут напрямую основаны на OpenJDK (поскольку IBM согласилась поддержать OpenJDK сейчас) Команды JRockit и Hotspot были объединены для через некоторое время с тех пор, как Oracle владеет обоими.

Однако, если вы не используете последнюю версию JDK, вы можете увидеть некоторые проблемы.

JVM очень хорошо разговаривают друг с другом, и я бы рассмотрел запуск Scala в своей собственной JVM, чтобы изолировать любые проблемы, которые могут возникнуть.

Ответ 2

Да, Scala работает на не-Sun JVM. Рассмотрим, например, эти два комментария из исходного кода:

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

    // on IBM J9 1.6 do not use ForkJoinPool

Их не так много. В конце концов, различные JVM должны быть совместимы - и проверены на это. Но, в то время как проблемы возникают, предпринимаются действия, чтобы обеспечить бесперебойную работу.

Ответ 3

  • Ничего не могу придумать.

  • Компилятор не должен иметь никакого значения, ведь если запуск scalac на другой виртуальной машине будет генерировать другой байт-код, это определенно ошибка.

  • Вы всегда должны запускать Scala код с той же версией Scala, скомпилированной с помощью. Код, скомпилированный на 2.x, по умолчанию не будет работать на 2.x + 1. Код, составленный на 2.x.y, должен работать на 2.x.y + 1, однако.

Я согласен с тем, что было бы неплохо получить лицензии от сторонних поставщиков, таких как IBM или Azul, для включения этих платформ в тестирование.