2012-06-17 30 views
7

Tôi đang đọc SICP ngay bây giờ và không thực sự hiểu được sự cần thiết của việc giải quyết từ vựng được mô tả trong 5.5.6 Giải quyết địa chỉ Lexic của SICP.Ưu điểm của việc giải quyết từ vựng trong Chương 5 của SICP là gì?

Vì nó nói "Vì ngôn ngữ của chúng tôi bị lốm đốm, môi trường thời gian chạy cho bất kỳ biểu thức nào sẽ có cấu trúc song song của chương trình mà biểu thức xuất hiện", tôi nghĩ nó giống như tìm kiếm một biến trong môi trường thời gian chạy như để tìm kiếm trong môi trường biên dịch. Tại sao chúng ta bận tâm để thực hiện một môi trường biên dịch? Tôi nghĩ môi trường biên dịch sẽ có cùng cấu trúc song song với cấu trúc từ vựng của chương trình và điều này giống như môi trường thời gian chạy, phải không?

Trả lời

10

Việc định địa chỉ là hữu ích để tăng tốc độ tra cứu biến. Nếu không có địa chỉ từ vựng, tìm kiếm một biến đòi hỏi phải đi qua khung của môi trường hiện tại, hoặc khung môi trường kèm theo của nó, v.v., tất cả tại thời gian chạy - bởi vì chúng ta không biết biến bị ràng buộc ở đâu. Điều này được đề cập trong sách:

Trình biên dịch của chúng tôi, vì chúng tôi đã triển khai cho đến nay, tạo mã sử dụng hoạt động tra cứu biến giá trị của máy đánh giá. Điều này tìm kiếm một biến bằng cách so sánh nó với mỗi biến mà hiện đang bị ràng buộc, làm việc khung theo khung ra ngoài thông qua môi trường thời gian chạy. Tìm kiếm này có thể tốn kém nếu khung được lồng sâu hoặc nếu có nhiều biến.

Ngược lại, thủ tục tra cứu giải quyết từ vựng biết chính xác nơi để tìm thấy một biến tại thời gian biên dịch, giảm đáng kể thời gian cần thiết để tìm một biến:

lexical-address-lookup mất như các đối số một môi trường và một địa chỉ từ vựng bao gồm hai số: một số khung, trong đó xác định có bao nhiêu khung để vượt qua, và một số lượng chuyển, trong đó xác định có bao nhiêu biến để vượt qua trong khung đó. Lexical-address-lookup sẽ tạo ra giá trị của biến được lưu trữ tại địa chỉ từ vựng đó liên quan đến môi trường hiện tại. Nếu chúng ta thêm hoạt động lexical-address-lookup vào máy của chúng tôi, chúng tôi có thể làm cho trình biên dịch tạo mã tham chiếu biến bằng cách sử dụng thao tác này, thay vì lookup-variable-value.

+1

Cảm ơn bạn rất nhiều! Hãy suy nghĩ có điểm. Tiết kiệm thời gian chạy tìm kiếm chi phí bằng cách sử dụng thông tin cụ thể, địa chỉ từ vựng có thể được mua tại thời gian biên dịch. – user1461328

+0

@ user1461328 bạn được chào đón! Xin đừng quên chấp nhận câu trả lời cho câu hỏi của bạn mà bạn cho là đúng, bằng cách nhấp vào dấu kiểm bên trái. –

+0

Có, tôi đã chấp nhận nó. – user1461328

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