2011-08-31 24 views
25

Công ty của tôi có một cơ sở mã Java kế thừa lớn và nhiều khách hàng của chúng tôi chạy WebSphere và WebLogic. Chúng tôi đang xem xét việc bắt đầu sử dụng Scala nhưng không thể xác nhận rằng Scala (2.9.X) hoạt động tốt với JDK của IBM (và JRA của BEA).Scala có hoạt động tốt trên JVM độc quyền không?

Vì các JVM này vượt qua TCK Tôi có thể nói rằng nó chỉ hoạt động, nhưng do các vấn đề khác nhau mà tôi đã có với các JVM khác nhau trong những năm qua, tôi là một chút nervous. Có bất kỳ gotchas để được nhận thức khi sử dụng scala với JVM khác?

  1. Bất kỳ cờ biên dịch nào sử dụng (hoặc tránh)?
  2. Tôi có nên biên dịch mã bằng cách sử dụng Scala trên điểm phát sóng hoặc trên JVM của khách hàng không?
  3. Bất kỳ vấn đề nào với việc trộn JAR được biên dịch bằng các phiên bản khác nhau của Scala/Java trên các JVM khác nhau?

Mọi câu chuyện, liên kết và đề xuất chiến tranh đều được chào đón.

Trả lời

13

Trình biên dịch Scala sẽ tạo cùng một mã byte bất kể JVM bạn sử dụng. Tôi mong đợi Scala sẽ chạy trên cả ba nền tảng tuy nhiên HotSpot đã cố gắng tối ưu hóa cho các ngôn ngữ động và có thể tốt hơn một chút. Trong những năm gần đây, ngày càng có ít sự khác biệt giữa các nền tảng này và trong tương lai gần, tôi hy vọng tất cả chúng sẽ trực tiếp dựa trên OpenJDK (như IBM đã đồng ý hỗ trợ OpenJDK ngay bây giờ). Các nhóm JRockit và Hotspot đã được sáp nhập trong một thời gian kể từ khi Oracle sở hữu cả hai.

Tuy nhiên, nếu bạn không chạy phiên bản JDK gần đây, bạn có thể thấy một số vấn đề.

Các JVM trao đổi với nhau rất tốt và tôi sẽ xem xét việc chạy Scala trong JVM của riêng mình để cô lập bất kỳ mối lo ngại nào bạn có thể có.

4
  1. Không có gì tôi có thể nghĩ đến.

  2. Trình biên dịch không nên tạo sự khác biệt, trên thực tế nếu chạy scalac trên máy ảo khác nhau sẽ tạo ra bytecode khác nhau, đó chắc chắn là lỗi.

  3. Bạn nên luôn chạy mã Scala với cùng phiên bản Scala mà nó đã được biên dịch. Mã được biên dịch trên 2.x sẽ không chạy trên 2.x + 1 theo mặc định. Mã được biên dịch trên 2.x.y sẽ chạy trên 2.x.y + 1, mặc dù.

Tôi đồng ý rằng tốt hơn nên lấy giấy phép từ các nhà cung cấp bên thứ ba như IBM hoặc Azul để đưa các nền tảng đó vào thử nghiệm.

5

Có, Scala hoạt động trên JVM không phải Sun. Hãy xem xét, ví dụ: hai nhận xét này từ mã nguồn:

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

Không có nhiều trong số này. Sau khi tất cả, JVM khác nhau là nghĩa vụ để tương thích - và thử nghiệm cho nó. Tuy nhiên, trong khi các vấn đề phát sinh, hành động được thực hiện để đảm bảo mọi thứ diễn ra trôi chảy.

Các vấn đề liên quan