Xin lỗi trả lời một câu hỏi cũ hai năm, đặc biệt là với một cái gì đó độc đáo sang ngôn ngữ của riêng tôi Felix http://felix-lang.org nhưng ở đây đi dù sao đi nữa :)
Trong Felix, chức năng và thủ tục là nền tảng khác nhau, và nó không phải là chỉ là thủ tục có tác dụng phụ và được gọi trong báo cáo, trong khi chức năng không có tác dụng phụ và được sử dụng trong các biểu thức (vì Felix cũng có máy phát điện có chức năng với tác dụng phụ .. :)
Không, mô hình thực hiện là về cơ bản khác nhau, chủ yếu vì lý do hiệu suất, nhưng không hoàn toàn. Mô hình là:
- Chức năng đặt địa chỉ trả lại của chúng trên ngăn xếp máy và giá trị trả về cũng vậy.
- Thủ tục sử dụng danh sách được liên kết trên heap. Mã thủ tục là phẳng, nó không sử dụng ngăn xếp máy.
Điều này thường không hiệu quả, vậy tại sao phải làm như vậy? Câu trả lời là: thủ tục Felix là tất cả các khả năng đồng-thói quen (sợi). Họ có thể chuyển quyền kiểm soát sang thủ tục khác bằng cách truy cập kênh. Điều này gây ra sự trao đổi quyền kiểm soát.
- Vì lý do hiệu suất, sao chép ngăn xếp máy trên trao đổi điều khiển không phải là một tùy chọn.
- Vì lý do quản lý bộ nhớ, việc đổi chồng con trỏ cũng không phải là một tùy chọn.
Hệ điều hành thường hoán đổi con trỏ ngăn xếp cho chủ đề, nhanh chóng hợp lý nhưng có vấn đề cơ bản trên máy địa chỉ tuyến tính: bạn phải giới hạn kích thước tối đa của ngăn xếp thành giá trị nhỏ hoặc hạn chế kích thước số lượng chủ đề đến một giá trị nhỏ vô lý. Trên một máy 32 bit, không có đủ không gian địa chỉ để thậm chí chiêm ngưỡng giải pháp này. Trên máy tính 64 bit, hoán đổi ngăn xếp có nhiều tiềm năng hơn, nhưng tất nhiên nhu cầu của người dùng luôn phát triển để vượt qua phần cứng 3 ngày sau khi nó được phát hành .. :)
Felix chỉ hoán đổi một con trỏ duy nhất tới ngăn xếp dựa trên đống, vì vậy các thiết bị chuyển mạch bối cảnh nhanh chóng và không gian địa chỉ rất ít bị lãng phí. Tất nhiên chi phí là phân bổ đống trên các cuộc gọi thủ tục.Trong trình biên dịch, rất nhiều kiến trúc của mô hình lý thuyết được tối ưu hóa trên cơ sở "as-if", vì vậy hiệu năng và thực hiện thực tế có thể khác với mô hình lý thuyết, miễn là trình biên dịch có thể chứng minh rằng bạn không thể nói sự khác biệt .. khác hơn là bị từ chối cơ hội để làm một tách cà phê với giải trí :)
Vì vậy, ở đây, bạn có một câu trả lời khác là tại sao các chức năng và quy trình có thể được xử lý khác nhau.
một câu trả lời tuyệt vời! –
Tôi đồng ý. Đó có lẽ là câu trả lời sai từ quan điểm ngữ nghĩa hoặc lý thuyết, nhưng lý do thực sự có lẽ là lịch sử như được trích dẫn! – Yttrill