อาคาร C / C ++: เกิดอะไรขึ้นจริงและทำไมมันใช้เวลานานมาก
เวลาส่วนใหญ่ในการพัฒนาซอฟต์แวร์ไม่ได้ถูกใช้ในการเขียน, รัน, ดีบั๊กหรือแม้กระทั่งการออกแบบรหัส แต่รอให้การคอมไพล์เสร็จสิ้น ก่อนอื่นเราต้องเข้าใจว่าเกิดอะไรขึ้นเมื่อคอมไพล์ซอฟต์แวร์ C / C ++ ขั้นตอนคร่าว ๆ ดังนี้:
- องค์ประกอบ
- สร้างเครื่องมือเริ่มต้น
- การตรวจสอบการพึ่งพา
- การรวบรวม
- การเชื่อมโยง
ตอนนี้เราจะพิจารณาแต่ละขั้นตอนอย่างละเอียดโดยเน้นที่วิธีการที่จะทำให้เร็วขึ้น
องค์ประกอบ
นี่เป็นขั้นตอนแรกเมื่อเริ่มสร้าง โดยปกติแล้วหมายถึงการรันสคริปต์กำหนดค่าหรือ CMake, Gyp, SCons หรือเครื่องมืออื่น ๆ สิ่งนี้อาจใช้เวลาตั้งแต่หนึ่งวินาทีถึงหลายนาทีในการกำหนดค่าสคริปต์ที่ใช้ Autotools ขนาดใหญ่มาก
ขั้นตอนนี้เกิดขึ้นค่อนข้างน้อย จำเป็นต้องรันเมื่อเปลี่ยนการกำหนดค่าหรือเปลี่ยนการกำหนดค่าการสร้าง สั้น ๆ ของการเปลี่ยนแปลงระบบสร้างมีไม่มากที่ต้องทำเพื่อให้ขั้นตอนนี้เร็วขึ้น
สร้างเครื่องมือเริ่มต้น
นี่คือสิ่งที่เกิดขึ้นเมื่อคุณเรียกใช้ make หรือคลิกที่ไอคอนบิลด์บน IDE (ซึ่งมักจะเป็นนามแฝงสำหรับสร้าง) เครื่องมือสร้างไบนารีเริ่มต้นและอ่านไฟล์การกำหนดค่ารวมถึงการกำหนดค่าการสร้างซึ่งมักจะเป็นสิ่งเดียวกัน
ขึ้นอยู่กับความซับซ้อนและขนาดของการสร้างสิ่งนี้สามารถทำได้ทุกที่ตั้งแต่เสี้ยววินาทีถึงหลายวินาที ด้วยตัวเองนี้จะไม่เลวร้าย น่าเสียดายที่ระบบการสร้างที่อิงตามระบบส่วนใหญ่เป็นสาเหตุทำให้ต้องมีการเรียกใช้หลายสิบถึงร้อยเท่าของทุกบิลด์ โดยปกติจะเกิดจากการใช้ยี่ห้อซ้ำ (ซึ่งไม่ดี)
ควรสังเกตว่าเหตุผลที่ทำให้ช้ามากไม่ใช่ข้อผิดพลาดในการใช้งาน ไวยากรณ์ของ Makefiles มีนิสัยใจคอบางอย่างที่ทำให้การติดตั้งใช้งานได้รวดเร็ว แต่ก็เป็นไปไม่ได้ ปัญหานี้จะเห็นได้ชัดเจนยิ่งขึ้นเมื่อรวมกับขั้นตอนถัดไป
การตรวจสอบการพึ่งพา
เมื่อเครื่องมือสร้างอ่านการกำหนดค่าแล้วมันจะต้องพิจารณาว่าไฟล์ใดที่มีการเปลี่ยนแปลงและไฟล์ใดที่ต้องทำการคอมไพล์ใหม่ ไฟล์การกำหนดค่ามีกราฟ acyclic กำกับที่อธิบายถึงการพึ่งพาการสร้าง โดยปกติแล้วกราฟนี้จะถูกสร้างขึ้นในระหว่างขั้นตอนการกำหนดค่า เวลาเริ่มต้นเครื่องมือสร้างและสแกนเนอร์อ้างอิงจะทำงานในทุกบิลด์เดียว รันไทม์ที่รวมกันของพวกเขาจะกำหนดขอบเขตที่ต่ำกว่าในวงจรการแก้ไข สำหรับโครงการขนาดเล็กเวลานี้มักจะไม่กี่วินาทีหรือดังนั้น สิ่งนี้ทนได้ มีทางเลือกในการทำ เร็วที่สุดคือ Ninja ซึ่งสร้างโดยวิศวกร Google สำหรับ Chromium หากคุณใช้ CMake หรือ Gyp เพื่อสร้างเพียงสลับไปที่แบ็กเอนด์นินจาของพวกเขา คุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรในไฟล์บิลด์ด้วยตัวเองเพียงแค่สนุกกับการเพิ่มความเร็ว Ninja ไม่ได้บรรจุในการแจกแจงส่วนใหญ่
การรวบรวม
ณ จุดนี้ในที่สุดเราก็เรียกคอมไพเลอร์ การตัดมุมบางส่วนนี่คือขั้นตอนโดยประมาณ
- การผสานรวม
- การแยกรหัส
- การสร้างรหัส / การปรับให้เหมาะสม
ตรงกันข้ามกับความเชื่อที่ได้รับความนิยมการรวบรวม C ++ ไม่ใช่สิ่งที่ช้าอย่างแท้จริง STL ช้าและเครื่องมือสร้างส่วนใหญ่ที่ใช้ในการคอมไพล์ C ++ นั้นช้า อย่างไรก็ตามมีเครื่องมือและวิธีการที่รวดเร็วกว่าในการลดส่วนที่ช้าของภาษา
การใช้มันต้องใช้จาระบีข้อศอกเล็กน้อย แต่ข้อดีก็คือไม่สามารถปฏิเสธได้ เวลาในการสร้างที่เร็วขึ้นนำไปสู่นักพัฒนาที่มีความสุขความคล่องตัวมากขึ้นและในที่สุดรหัสที่ดีกว่า