เหตุใดฟังก์ชันที่ไม่ระบุชื่อส่วนใหญ่จึงไม่สามารถรวบรวม JIT และจะไม่ได้รับการปรับให้เหมาะสมที่สุด


10

ฉันเพิ่งอ่านhttps://techfindings.one/archives/2652เกี่ยวกับการเขียนโปรแกรมการทำงานและมาพร้อมกับสิ่งนี้:

ฟังก์ชั่นที่ไม่ระบุชื่อมักจะไม่สามารถรวบรวม JIT และจะไม่ถูกปรับ

มีคนอธิบายให้ฉันฟังได้ไหมว่าเพราะอะไรในกรณีนี้



ฉันคิดว่า downvote ไม่ได้เป็นธรรมที่นี่และลิงก์ไม่สามารถใช้กับคำถามของฉันได้ ฉันถามคำถามทางเทคนิคเกี่ยวกับ JIT และฟังก์ชั่นนิรนาม - ฉันไม่ได้ขอความคิดเห็น / ลิ้มรสหรือการอภิปราย ฉันขอให้ผู้อื่นอธิบายให้ฉันฟังว่าเพราะเหตุใดฟังก์ชันที่ไม่ระบุตัวตนจึงไม่สามารถรวบรวม JIT ได้ แม้แต่ลิงก์ของคุณก็บอกว่า "ฉันต้องการให้คนอื่นอธิบาย ______ ถึงฉัน" จากนั้นคุณก็โอเค "@gnat
thadeuszlay

4
ก่อนที่คุณจะถาม "ทำไม" คุณควรถามก่อนว่า "นี่เป็นเรื่องจริงหรือไม่?" ฉันเรียก BS ว่าการเรียกร้องนั้น มีเอ็นจิน JS 4 ตัวที่แตกต่างกันในเบราว์เซอร์หลัก ๆ 4 แบบและผ้าห่มอ้างว่าไม่มีสิ่งใดที่จะเพิ่มประสิทธิภาพของฟังก์ชั่นที่ไม่ระบุชื่อโดยไม่มีการอ้างอิงหรือข้อมูลเพื่อสำรองข้อมูล
เซบาสเตียนเรดล

1
ฉันค่อนข้างแน่ใจว่าอย่างน้อยเครื่องยนต์ V8 นั้นสามารถใช้งานฟังก์ชั่นนิรนามแบบ JIT ได้อย่างแน่นอน ที่มา: ฉันได้อ่านส่วนที่เกี่ยวข้องของรหัสต้นฉบับ และไม่มีเหตุผลทางเทคนิคว่าทำไมจึงเป็นไปไม่ได้ ดังนั้นหลักฐานของคำถามจึงผิด นี่ทำให้เกิดคำถามว่าทำไมผู้เขียนคิดว่าคำพูดนั้นสมเหตุสมผล แต่เราไม่สามารถรู้ได้และนี่ไม่ใช่สถานที่ที่จะพูดคุยดังที่อธิบายโดยลิงก์ของริ้น
amon

ฉันเห็นประเด็นของคุณและเห็นด้วยกับคุณ @SebastianRedl ฉันไม่เข้าใจคำแถลงนี้ แต่แทนที่จะขุดลึกฉันทำเส้นทางที่ง่ายและถามที่นี่
thadeuszlay

คำตอบ:


15

มีความเข้าใจผิดทั่วไปเกี่ยวกับฟังก์ชั่นที่ซ้อนกันชื่อหรือไม่ระบุชื่อที่ผู้คนคิดว่าเพราะฟังก์ชั่นที่มีการประกาศในฟังก์ชั่นอื่นที่คอมไพเลอร์จะต้องคอมไพล์ใหม่ทุกครั้งที่มีการเรียกใช้ สิ่งนี้ไม่เป็นความจริง โค้ดของฟังก์ชันนั้นคงที่แม้ว่าบริบทการโทรจะไม่ได้อยู่และสามารถถูกinlineหรือปรับให้เหมาะสมเหมือนกับฟังก์ชันอื่น ๆ ความสับสนนี้ดูเหมือนว่าจะมีประโยชน์อย่างยิ่งในหมู่โปรแกรมเมอร์ซึ่งส่วนใหญ่ใช้ฟังก์ชั่นที่ซ้อนกันในการใช้งานภาษาตีความ / JIT เช่นในคำถามนี้

บทความนั้นมีความเข้าใจผิดอื่น ๆ ที่คล้ายคลึงกันสองสามข้อซึ่งแสดงว่าเขาไม่เข้าใจปัญหาเช่นเดียวกับที่เขาคิด ฉันจะไม่ถือว่าเป็นแหล่งที่น่าเชื่อถือสำหรับการเรียนรู้เกี่ยวกับการเขียนโปรแกรมการทำงาน


ขอบคุณสำหรับการชี้แจง ฉันไม่ใช่ผู้เชี่ยวชาญด้านวิทยาศาสตร์คอมพิวเตอร์ (CS) ด้วยตัวเอง ฉันไม่มีปริญญาหรือเรียน CS ดังนั้นจึงเป็นเรื่องยากสำหรับฉันที่จะค้นคว้าทุกอย่างด้วยตัวเอง คุณช่วยอธิบายให้ชัดเจนว่าประเด็นอื่น ๆ ที่ผู้เขียนบทความที่เชื่อมโยงนั้นไม่ได้รับการแก้ไขอย่างสมบูรณ์?
thadeuszlay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.