Điều gì thực sự có ý nghĩa đối với chúng để không bị xếp chồng? Điều đó có nghĩa là họ không sử dụng ngăn xếp cuộc gọi?
Vâng, điều đó đúng.
Nếu họ không sử dụng ngăn xếp cuộc gọi, họ sẽ sử dụng gì?
Thực hiện chính xác, tất nhiên, thay đổi từ ngôn ngữ này sang ngôn ngữ khác. Trong Stackless Python, có một bộ điều phối khởi động trình thông dịch Python bằng cách sử dụng khung trên cùng và các kết quả của nó. Trình thông dịch xử lý các mã opcodes khi cần một lần cho đến khi nó đạt đến mã vạch CALL_FUNCTION
, tín hiệu mà bạn sắp nhập vào một hàm. Điều này làm cho người điều phối xây dựng một khung mới với thông tin liên quan và trả lại cho người điều phối với cờ thư giãn. Từ đó, điều phối viên bắt đầu lại, chỉ thông dịch viên ở khung trên cùng.
Ngăn xếp ngăn xếp ngăn chặn cuộc gọi ngăn xếp vì một số lý do, nhưng trong nhiều trường hợp, nó được sử dụng để các cấu trúc lập trình nhất định trở nên dễ thực hiện hơn nhiều. Số kinh điển là continuations. Tiếp tục là cấu trúc điều khiển rất mạnh mẽ, rất đơn giản có thể đại diện cho bất kỳ cấu trúc điều khiển thông thường nào mà bạn có thể đã quen thuộc với (while
, do
, if
, switch
, v.v.).
Nếu đó là khó hiểu, bạn có thể muốn thử bạn xoay quanh các bài viết Wikipedia, và đặc biệt là dễ thương tiếp bánh sandwich tương tự:
Giả sử bạn đang ở trong nhà bếp ở phía trước của tủ lạnh , suy nghĩ về một chiếc bánh sandwich. Bạn có một tiếp tục ngay tại đó và dán nó vào túi của bạn. Sau đó, bạn nhận được một số gà tây và bánh mì ra khỏi tủ lạnh và làm cho mình một chiếc bánh sandwich, mà bây giờ đang ngồi trên quầy. Bạn gọi tiếp tục trong túi của bạn, và bạn thấy mình đứng trước tủ lạnh một lần nữa, suy nghĩ về một chiếc bánh sandwich. Nhưng may thay, có một cái bánh sandwich trên quầy, và tất cả các vật liệu được sử dụng để làm nó biến mất. Vì vậy, bạn ăn nó.
Nguồn
2009-04-28 04:32:59
Xem câu trả lời tại http://stackoverflow.com/questions/1016218/how-does-a-stackless-language-work/1053159#1053159 –
Trang không tồn tại http://stackoverflow.com/questions/551950/những gì-stackless-lập trình-ngôn ngữ-có sẵn/671296 # 671296 –