2009-04-28 42 views
14

Theo câu trả lời nàyĐiều đó thực sự có nghĩa là ngôn ngữ lập trình là gì?

https://stackoverflow.com/questions/551950/what-stackless-programming-languages-are-available/671296#671296

tất cả các ngôn ngữ lập trình là Stackless

  • Stackless Python
  • PyPy
  • Lisp
  • Scheme
  • Tcl
  • 012.
  • Lua
  • Parrot VM

hiện nó thực sự có ý nghĩa gì đối với họ là Stackless? Điều đó có nghĩa là họ không sử dụng ngăn xếp cuộc gọi? Nếu họ không sử dụng ngăn xếp cuộc gọi, họ sẽ sử dụng gì?

+0

Xem câu trả lời tại http://stackoverflow.com/questions/1016218/how-does-a-stackless-language-work/1053159#1053159 –

+0

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 –

Trả lời

14

Đ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ó.

10

Chúng không sử dụng ngăn xếp cuộc gọi vì chúng hoạt động trong continuation-passing style. Nếu bạn không quen thuộc với tối ưu hóa cuộc gọi đuôi, đó có thể là một bước đầu tiên tốt để hiểu ý nghĩa của điều này.

Để mô phỏng cuộc gọi/trả lại truyền thống trên mô hình này, thay vì đẩy địa chỉ trả lại và mong phần còn lại của khung vẫn giữ nguyên, người gọi đóng trên phần còn lại của mã và bất kỳ biến nào vẫn cần (phần còn lại được giải phóng). Sau đó nó thực hiện một cuộc gọi đuôi đến callee, đi qua sự tiếp tục này như một đối số. Khi callee "trả về", nó làm như vậy bằng cách gọi sự tiếp tục này, chuyển giá trị trả về làm đối số cho nó.

Theo như ở trên, nó chỉ đơn thuần là một cách phức tạp để thực hiện các cuộc gọi chức năng. Tuy nhiên, nó khái quát rất độc đáo với các kịch bản phức tạp hơn:

  1. khối ngoại lệ/cuối cùng/etc rất dễ dàng được mô hình hóa - nếu bạn có thể vượt qua một lần tiếp theo, bạn có thể vượt qua 2 (hoặc nhiều hơn) dễ dàng. các khối "điều kiện xử lý điều kiện" (có thể hoặc không thể trả lại quyền kiểm soát cho người gọi) cũng dễ dàng - chuyển tiếp phần tiếp theo cho phần còn lại của hàm này, có thể hoặc không thể được gọi.
  2. Nhiều giá trị trả lại được thực hiện tương tự dễ dàng - chuyển một số đối số vào phần tiếp theo.
  3. Trả về thời gian/sao chép không còn khác với đối số chức năng truyền. Điều này thường làm cho nó dễ dàng hơn để loại bỏ thời gian.
  4. Tối ưu hóa đệ quy đuôi là tầm thường - người gọi chỉ đơn giản là chuyển sang tiếp tục "trả lại" mà nó nhận được thay vì chụp một hình thức mới.
Các vấn đề liên quan