6

Có một số ngôn ngữ/runtimes trên đỉnh JVM: như JRuby, Groovy, Jython, Clojure, Rhino, Scala, và vân vân ...Ngôn ngữ/thời gian hoạt động dựa trên JVM tạo ra bytecode Java như thế nào?

  • Làm thế nào để các tạo ra mã bytecode Java này?
  • Có các thư viện được chuẩn hóa để thực hiện việc này không?
  • Cách bytecode được tạo sẽ được thực hiện?

(Hoặc là giả định của tôi sai, và một số ngôn ngữ nói làm không tạo bytecode?)

Trả lời

9

Một số trong số họ tạo ra bytecode. Một số có một hệ thống thời gian chạy thực hiện như một thông dịch viên. Một số có một sự pha trộn của cả hai. JVM là, sau khi tất cả, một CPU (mà chỉ xảy ra để không thực sự tồn tại) với một kiến ​​trúc nhất định và một bộ nhất định các hướng dẫn. Bạn nhắm mục tiêu nó với trình tạo mã của bạn giống như cách bạn tạo mã đối tượng cho bất kỳ CPU nào. (Bây giờ công bằng, bộ hướng dẫn của nó tập trung rất nhiều vào khả năng và nhu cầu của Java, nhưng nó vẫn đủ chung để hỗ trợ các mô hình khác.)

Có nhiều cách để tạo mã byte JVM. Bạn có thể biên soạn các thói quen tạo tệp lớp của riêng mình (vì định dạng và tập lệnh là well-specified). Bạn có thể sử dụng một số thư viện như ASM hoặc BCEL (đó là cách tiếp cận phổ biến nhất, tôi nghĩ). Hoặc bạn có thể tạo mã Java làm đại diện trung gian của bạn và sau đó biên dịch với các công cụ Java thông thường.

Bạn thực thi mã giống như cách bạn thực thi mã được biên dịch Java: thời gian chạy Java tải các tệp .class đã tạo và bắt đầu chạy. Đây cũng là một phần của số specification.

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