รหัสที่ซับซ้อนใช้เวลาในการรวบรวมนานเท่าใด


2

XKCDการ์ตูนด้านล่างแสดงให้เห็นว่ารหัสจะเป็นจำนวนเงินที่สำคัญของเวลาในการรวบรวม (อาจจะไม่มีเวลามากพอที่จะเป็นเวทีการต่อสู้ดาบ แต่คุณได้รับความคิด) อย่างไรก็ตามด้วยรหัส Java แบบง่าย ๆ ที่ฉันได้ทำมันใช้เวลาน้อยกว่า 2 วินาทีในการรวบรวม 1,000 บรรทัดหรือมากกว่านั้นใน BlueJ และ IDE อื่น ๆ เช่น Eclipse ดูเหมือนจะรวบรวมได้ทันที

ดังนั้นภายใต้สถานการณ์ใด (ภาษาความซับซ้อนของรหัส ฯลฯ ) จะต้องใช้เวลานานในการรวบรวม (พูด> 1 นาที) หรือเป็นการ์ตูนเรื่องนี้ที่ใช้เสรีภาพในการสร้างสรรค์

ป้อนคำอธิบายรูปภาพที่นี่


5
เคอร์เนล linux แบบเต็มพาฉันไป 15 นาทีเช่นกัน
djsmiley2k

3
เป็นการยากที่จะหาปริมาณ ... มันขึ้นอยู่กับเครื่องของคุณ แต่ Linux Kernel อาจใช้เวลาครึ่งชั่วโมงในการคอมไพล์ OpenOffice เคยใช้เวลามากกว่าหนึ่งชั่วโมงและ Firefox ใช้เวลาพอสมควร 1,000 บรรทัดแทบไม่มีอะไรเลยในแง่ของความซับซ้อนของซอฟต์แวร์
Mokubai

ดูที่ Gentoo หรือ Linux ตั้งแต่เริ่มต้น
Sacha K

ขึ้นอยู่กับการวาดการ์ตูน ย้อนกลับไปในปี 1970 สร้างระบบปฏิบัติการ IBM 360 ที่ใช้ในการทำงานข้ามคืน แต่นั่นใช้มาโคร Assembler
David Marshall

2
เรื่องตลกที่การ์ตูนทำคือเจ้านายไม่ทราบว่าต้องใช้เวลาในการรวบรวมนานแค่ไหนดังนั้นพวกเขาจึงใช้มันเป็นข้ออ้างที่จะทำ
psusi

คำตอบ:


0

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

เมื่อทำการคอมไพล์โค้ด. NET หลายล้านบรรทัดกระจายไปหลายร้อยโปรเจ็กต์เวลาในการรวบรวมของคุณจะเริ่มมีขนาดค่อนข้างใหญ่ เมื่อทำการคอมไพล์ไลบรารี่ขนาดใหญ่ในขณะที่คอมไพล์ซอร์สโค้ดของคุณเองมักจะทำกันในโลก C / C ++ คุณก็จะเพิ่มเวลาในการคอมไพล์

โดยเฉพาะอย่างยิ่งกับ C และ C ++ เวลาที่ใช้ในการแยกวิเคราะห์ส่วนหัวนั้นสำคัญมาก มันเป็นกระบวนการผูก I / O ที่หนักหน่วงมากในการอ่านส่วนหัวซ้ำ ๆ หลายพันครั้ง นี่คือเหตุผลหนึ่งว่าทำไมจึงสร้างเทคนิคส่วนหัวที่รวบรวมไว้ล่วงหน้า แน่นอนว่า SSD นั้นเพิ่มความเร็วได้อย่างมากเช่นกัน

แก้ไข: ฉันลืมที่จะพูดถึงว่าการสร้างมักจะรวมถึงการสร้างรหัสพิเศษหรือคอมไพเลอร์ DSL เครื่องมือเหล่านี้มักจะทำเองภายในโครงการที่ไม่ได้รับการปรับให้เหมาะสมอย่างมากกับเครื่องมือที่ใช้กันอย่างแพร่หลายดังนั้นพวกเขาจึงสามารถกลายเป็นคอขวดได้หากใช้งานหนัก


0

ด้วยเทคโนโลยีในปัจจุบันมันต้องใช้รหัสฐานที่ค่อนข้างใหญ่เพื่อให้สามารถรวบรวมได้แม้แต่นาทีเดียว แต่กลับมาเมื่อไดโนเสาร์ (เมนเฟรมคอมพิวเตอร์และมินิคอมพิวเตอร์ขนาดใหญ่ - PDP 11/70, 64K ของหน่วยความจำหลักมาถึงใจ) ท่องไปทั่วโลก (ช่วงกลางยุค 70) หรือแม้แต่เทอร์มินัลที่เชื่อมต่อกับคอมพิวเตอร์เพียงเครื่องเดียวสำหรับทีมซอฟต์แวร์ พีซีตั้งโต๊ะ หากคุณมีการเชื่อมต่อแบบรับส่งสัญญาณถึง 9600 คุณเป็นหนึ่งในไม่กี่คนที่เลือก - เราส่วนใหญ่รู้สึกขอบคุณที่ได้รับการอัปเกรดเป็น 2,400! เครื่องใช้เวลาร่วมกันระหว่างผู้ใช้ที่เชื่อมต่องานแบ่งเวลาตามแฟชั่นแบบโรบิน

เมื่อกำหนดเส้นตายใกล้เข้ามาและทุกคนก็พยายามรวบรวมชิ้นส่วนของระบบเป้าหมายที่รวบรวมไว้ ในกรณีที่รุนแรงซีพียูใช้เวลามากในการแลกเปลี่ยนงานจากดิสก์เหมือนกับที่ใช้ในการประมวลผล ในสถานการณ์เหล่านั้นเวลาในการรวบรวมคำสั่งเป็นเวลาหลายนาทีไม่ใช่เรื่องแปลก

ฉันจำบทสนทนาที่คล้ายกัน (แย่กว่านั้น) กับการ์ตูนเรื่องนั้นประมาณ 3:30 น. คืนหนึ่งเมื่อใกล้ถึงกำหนด แผนกทำงานกับกะ 3 ครั้ง (shift-differential? Screw that!) เพราะโครงการนี้ช่างแย่เหลือเกิน \\\\ เอ้อเครื่องจักรเพียงเครื่องเดียวสำหรับ 25 SWE จึงจมลง ฉันถูกเรียกให้ออกไปอ่านหนังสือพิมพ์ที่เทอร์มินัลพยายามที่จะไม่เผลอหลับไปในขณะที่รอการรวบรวมให้เสร็จสมบูรณ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.