2013-07-29 20 views
7

Tôi đã đọc mã nguồn của Lua và ngạc nhiên thấy rằng nó đã được triển khai để tạo ra một số lệnh lẻ (ví dụ GETUPVAL, FORLOOP, v.v.) Sau đó, các opcodes đó được thực thi bởi một máy ảo. Có bất kỳ lợi ích nào để thực hiện điều này (so với thông dịch viên dựa trên AST thuần túy không?)Tại sao Lua được thiết kế để tạo ra các opcodes trung gian?

Cảm ơn.

Trả lời

9

Sử dụng máy ảo là một kỹ thuật triển khai cũ cho các ngôn ngữ, có niên đại từ ít nhất USCD Pascal, BCPL và Smalltalk. Hầu hết các ngôn ngữ kịch bản giờ đây đều sử dụng một máy ảo. Một số sử dụng một máy ảo có mục đích chung. Lua sử dụng một máy ảo mục đích đặc biệt phản ánh ngữ nghĩa của ngôn ngữ. Do đó các opcodes chuyên ngành. Lua đã giới thiệu tính mới trong lĩnh vực này bằng cách di chuyển trong phiên bản 5.0 sang một máy ảo dựa trên đăng ký, thay vì một máy tính dựa trên nền tảng truyền thống.

+0

Rất hữu ích. Cảm ơn :) – babel92

10

Để so sánh chung về thông dịch viên bytecode và thông dịch viên cú pháp trừu tượng, hãy xem Wikipedia:Interpreter.

Lua đã sử dụng máy ảo kể từ khi ra đời và giới thiệu máy ảo dựa trên đăng ký trong Lua 5.0 (máy ảo đầu tiên đăng ký có sử dụng rộng rãi) The Evolution of Lua, được viết bởi tác giả Lua, cung cấp rất nhiều tài nguyên về chủ đề đó.

Một giấy được viết bởi các tác giả của Lua, The Implementation of Lua 5.0 cung cấp rất nhiều thông tin chi tiết về việc thực hiện, Chương 7 Các Virtual Machine sẽ đặc biệt hữu ích đối với bạn, bài viết này cũng là một tài liệu tham khảo rất tốt cho việc đọc mã nguồn Lua của.

+0

Cảm ơn rất nhiều! Những giấy tờ đó khá hữu ích. – babel92

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