13

Trình biên dịch thường chọn biểu diễn trung gian (IR), hoặc là đăng ký dựa trên stack hoặc vô hạn. Những lợi thế của những cây biểu hiện trên là gì?Ưu điểm của bytecode dựa trên stack hoặc máy đăng ký vô hạn

+0

Một lợi thế mà tôi có thể nghĩ đến là các cây biểu thức khó hơn một chút để biểu diễn dưới dạng một chuỗi byte, trong khi chương trình VM dựa trên stack rất tự nhiên được dịch sang luồng byte. –

+0

@romkyns: đối với trình biên dịch IL, hầu như không quan trọng; tất cả những gì bạn cần là một tập hợp các cấu trúc dữ liệu được liên kết bởi các chỉ mục/con trỏ. –

Trả lời

17

Cây biểu thức hoạt động cho các biểu thức, nhưng không hiệu quả để lập mô hình toàn bộ chương trình. Đặc biệt, một biểu diễn tốt của một chương trình thực sự là một biểu đồ (của các hoạt động và hành động) được kết nối bởi các luồng điều khiển và dữ liệu. Thông thường, mọi người nói về việc sử dụng "bộ ba" hình thành chính xác một biểu đồ như vậy.

Mã máy ngăn xếp dễ dàng cho giao diện người dùng để tạo, nhưng khó hơn cho quá trình phân bổ đăng ký cuối cùng cần thiết để tạo mã thực, vì nó có tập hợp các vị trí tạm thời ("ngăn xếp") với kiến ​​trúc đích và làm cho các dataflows bất tiện để xử lý. ("mã nào sử dụng kết quả của phần bổ sung này?").

Máy đăng ký khó hơn một chút để tạo mã, nhưng có xu hướng bảo toàn luồng dữ liệu bằng cách sử dụng các thanh ghi vô hạn đó như các luồng dữ liệu cơ bản. Đó là dataflow và khả năng phân bổ nó dễ dàng để đăng ký thực (có một phân bổ đăng ký tiêu chuẩn "bằng màu đồ thị") làm cho nó tương đối dễ dàng để tạo ra mã tốt.

Nếu bạn quyết định tạo mã máy ảo trực tiếp từ các mã này, bạn sẽ nhận được các đặc tính hiệu suất khác nhau. Về cơ bản, các máy xếp chồng có xu hướng nhận được các dấu chân mã nhỏ hơn. Máy đăng ký vô hạn có xu hướng thực hiện diễn giải nhanh. Dalvik của Google khác với JVM vì lý do chính xác này. (Có thể họ không muốn bị kiện bởi Sun/Oracle trên các định dạng tệp lớp học nữa.)

Tôi đề xuất tài liệu sau: Virtual Machine Showdown: Stack Versus Registers. (PS: bất cứ điều gì với Anton Ertl như một tác giả có xu hướng là một thú vị đọc).

+0

Tôi đã đăng chính xác câu trả lời! : D BTW, tôi cũng sẽ nói rằng ngăn xếp VM dễ dàng hơn để bắt đầu vì nó dễ dàng hơn để tạo mã cho họ ... –

+1

Tôi thấy nó đáng thất vọng rằng câu trả lời của bạn so sánh Stack vs Đăng ký, trong khi câu hỏi yêu cầu về cây biểu hiện vs Stack/Đăng ký . –

+0

@romkyns: Đủ công bằng. Trả lời sửa đổi. –

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