Tại sao hầu hết các hàm ẩn danh không thể được biên dịch JIT và sẽ không bao giờ được tối ưu hóa?


10

Tôi vừa đọc https://techfindings.one/archives/2652 về lập trình chức năng và đã đi qua điều này:

Các hàm ẩn danh thường không thể được biên dịch JIT và sẽ không bao giờ được tối ưu hóa

Ai đó có thể giải thích cho tôi tại sao đây là trường hợp?



Tôi nghĩ rằng downvote không được chứng minh ở đây và cũng không thể áp dụng liên kết cho câu hỏi của tôi. Tôi đang hỏi một câu hỏi kỹ thuật về JIT và các chức năng ẩn danh - Tôi không hỏi ý kiến ​​/ sở thích hoặc thảo luận. Tôi đang yêu cầu người khác giải thích cho tôi tại sao các hàm ẩn danh không thể được biên dịch JIT. Ngay cả liên kết của bạn cũng nói "Tôi muốn người khác giải thích cho tôi về ___, thì có lẽ bạn vẫn ổn" @gnat
thadeuszlay

4
Trước khi bạn hỏi "Tại sao?" trước tiên bạn nên hỏi, "Điều này có đúng không?". Tôi gọi cho BS về yêu cầu đó. Có 4 công cụ JS khác nhau trong 4 trình duyệt chính và tuyên bố rằng không ai trong số họ sẽ tối ưu hóa các chức năng ẩn danh, mà không có bất kỳ tham chiếu hoặc dữ liệu nào để sao lưu, rất táo bạo.
Sebastian Redl

1
Tôi khá chắc chắn rằng ít nhất động cơ V8 chắc chắn có khả năng biên dịch các hàm ẩn danh. Nguồn: Tôi đã đọc các phần liên quan của mã nguồn. Và không có lý do kỹ thuật tại sao điều này là không thể. Vì vậy, tiền đề của câu hỏi là sai. Điều này đặt ra câu hỏi tại sao tác giả nghĩ rằng tuyên bố đó có ý nghĩa. Nhưng chúng ta không thể biết điều đó và đây không phải là nơi để thảo luận về nó, như được giải thích bởi liên kết của gnat.
amon

Tôi thấy quan điểm của bạn và đồng ý với bạn @SebastianRedl. Tôi không hiểu câu nói này nhưng thay vì đào sâu hơn, tôi đã thực hiện lộ trình dễ dàng và hỏi ở đây.
thadeuszlay

Câu trả lời:


15

Có một quan niệm sai lầm phổ biến về các hàm lồng nhau, được đặt tên hoặc ẩn danh, nơi mọi người nghĩ rằng vì hàm được khai báo bên trong hàm khác, trình biên dịch phải biên dịch lại nó mỗi khi hàm ngoài được gọi. Điều này không đúng. của hàm là không đổi, ngay cả khi ngữ cảnh gọi của nó không, và nó có thể được nội tuyến hoặc tối ưu hóa giống như bất kỳ hàm nào khác. Sự nhầm lẫn này có vẻ đặc biệt mạnh mẽ giữa các lập trình viên, những người chủ yếu sử dụng các hàm lồng nhau trong các triển khai ngôn ngữ / JIT, như trong câu hỏi này .

Bài báo đó có một vài quan niệm sai lầm tương tự khác cho thấy anh ta không hiểu các vấn đề cũng như anh ta nghĩ rằng anh ta làm. Tôi sẽ không coi đó là một nguồn đáng tin cậy để tìm hiểu về lập trình chức năng.


Cảm ơn đã làm rõ. Bản thân tôi không phải là chuyên gia về Khoa học Máy tính (CS). Tôi thậm chí không có bằng cấp hoặc học CS. Vì vậy, thật khó cho tôi để tự nghiên cứu mọi thứ. Bạn có thể vui lòng làm rõ những điểm khác mà tác giả của bài viết được liên kết không hoàn toàn chính xác?
thadeuszlay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.