2012-11-14 12 views

Trả lời

28

Bắt đầu với 2.10 trình biên dịch Scala sử dụng ASM 4 phát ra bytecode, hỗ trợ -target: JVM-1.5, -target: JVM-1.6, và -target: khía cạnh thực hiện JVM-1,7

của backend được mô tả trong:

Bytecode phát (GenASM, nguồn liên kết dưới đây) đến thăm một Flow Control Graph (CFG) được xây dựng bởi một giai đoạn trước đó, và sử dụng các API Truyền ASM để trực tiếp phát ra classfiles:

https://github.com/scala/scala/blob/master/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala

Đó là cách mọi thứ hoạt động ngay bây giờ. Trong lĩnh vực khả năng thử nghiệm, tôi đã làm việc trên một bytecode thử nghiệm phát ra nhanh hơn, một phần vì nó bỏ qua việc xây dựng CFG và truy cập trực tiếp Scala Abstract Syntax Trees (sử dụng API Tree ASM để xây dựng các tệp lớp trong bộ nhớ). Chi tiết trong:

https://github.com/magarciaEPFL/scala/blob/GenBCodeOpt/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala

+0

Điều gì trước scala 2.10? – Freewind

+1

Trước 2.10 "GenJVM" đã được sử dụng. Nó đã được EOL'd bây giờ. GenJVM đã sử dụng thư viện thao tác bytecode được phát triển trong nhà (ví dụ: không theo kịp với khung bản đồ chồng JDK6) –

+0

Tôi gắn dấu sao câu hỏi này, nhưng chỉ vì câu trả lời của bạn. Thông tin tuyệt vời! – Andy