GHC viết lại assert
s khi tối ưu hóa chỉ id
. Hoặc cách khác, hành vi của nó có thể được thay đổi bằng cờ trình biên dịch. Tuy nhiên, tôi nhận thấy điều tương tự không xảy ra với trace
. Có phiên bản trace
chỉ kết thúc dưới dạng id
nếu cờ không được đặt hay không?Làm "theo dõi" tối ưu hóa như "khẳng định"?
Nói chung, có cách để thay đổi hành vi của một hàm dựa trên cờ trình biên dịch được sử dụng để biên dịch mô-đun gọi (không phải cờ được sử dụng để biên dịch chính nó). Giống như assert
. Hay là ma thuật GHC này chỉ có thể xảy ra với assert
?
Tôi luôn ở hàng rào để trả lời các câu hỏi như thế này. "Tôi không biết một cách" không thực sự là một câu trả lời - nhưng nếu không ai sẵn sàng nói, thì bạn sẽ không nhận được phản hồi nào cả ... –
GHC thực hiện một số biên dịch riêng biệt. Nếu mô-đun xác định không lộ ra một mở ra, mô-đun gọi bị mắc kẹt với mã đối tượng. – dfeuer
Không phải ở máy tính của tôi ngay bây giờ, nhưng còn việc đặt một cuộc gọi để theo dõi bên trong khẳng định, và để cho toàn bộ khẳng định được tối ưu hóa đi? –