Хорошо ли работает Scala на проприетарных JVM? - PullRequest
25 голосов
/ 31 августа 2011

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 31 августа 2011

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

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

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

5 голосов
/ 31 августа 2011

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

 //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 должны быть совместимыми - и проверены на это.Но, несмотря на возникшие проблемы, принимаются меры для обеспечения бесперебойной работы.

4 голосов
/ 31 августа 2011
  1. Ничего, о чем я мог думать.

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

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

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

...