Nếu tôi có chức năng sau, nó được coi là tinh khiết ở chỗ nó không có tác dụng phụ và sẽ luôn tạo ra cùng một kết quả cho cùng một đầu vào x.Làm cách nào để tối ưu hóa từ "hàm thuần túy" trong C#?
public static int AddOne(int x) { return x + 1; }
Như tôi đã hiểu, nếu thời gian chạy hiểu được độ tinh khiết chức năng, nó có thể tối ưu hóa việc thực hiện để không phải tính lại giá trị trả lại.
Có cách nào để đạt được loại tối ưu hóa thời gian chạy này trong C# không? Và tôi cho rằng có một cái tên cho loại tối ưu hóa này. Nó được gọi là gì?
Chỉnh sửa: Rõ ràng, chức năng mẫu của tôi sẽ không có nhiều lợi ích từ loại tối ưu hóa này. Ví dụ này được đưa ra để thể hiện loại thuần khiết mà tôi có trong tâm trí chứ không phải là ví dụ thực tế.
Câu hỏi thú vị ... Tôi tự hỏi nếu F # sẽ bao gồm các tối ưu hóa này. Nếu vậy, chúng phải có mặt trong thời gian chạy và do đó có sẵn cho C# et al. – harpo
@harpo: nó không (và sẽ không). Khoảng trống trên không nếu nó bắt đầu tùy ý thực hiện điều này sẽ là quan trọng, và không có gì đảm bảo rằng nó có thể tìm thấy số dư 1) để ghi nhớ và 2) chi phí tính toán lại kết quả theo số lần> 1 nó được gọi với cùng một đầu vào. Trong thực tế, nếu nó chỉ được gọi một lần với mỗi đầu vào duy nhất, nó có khả năng sẽ dẫn đến giảm hiệu suất * thời gian * bất lợi. –
@harpo: Tuy nhiên, nó có thể được ghi nhớ trên trang web cuộc gọi. Cho "int s = 0; cho (int i = 0; i <100000; i ++) s + = MyExpensiveFunction (4);" trình biên dịch có thể suy ra rằng nó chỉ cần gọi hàm một lần. Có lẽ là hữu ích hạn chế, mặc dù. – erikkallen