Хорошо ли работает Scala на проприетарных JVM?

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

Поскольку эти JVM проходят TCK, я бы сказал, что это должно работать, но, учитывая различные проблемы, которые я сталкивался с различными JVM на протяжении многих лет. td1989679.html" rel="noreferrer">нервный. Есть ли какие-либо ошибки, о которых следует знать при использовании scala с другими JVM?

  1. Какие флаги компилятора использовать (или избегать)?
  2. Должен ли я компилировать код с помощью Scala в точке доступа или на клиентской JVM?
  3. Есть ли проблемы со смешиванием JAR-файлов, скомпилированных с использованием разных версий Scala/Java на разных JVM?

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


person Lars Tackmann    schedule 31.08.2011    source источник


Ответы (3)


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

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

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

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

person Peter Lawrey    schedule 31.08.2011

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

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

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

person Daniel C. Sobral    schedule 31.08.2011

  1. Я ничего не мог придумать.

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

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

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

person soc    schedule 31.08.2011