คอมไพเลอร์ gcc C เขียนด้วยตัว C เองหรือไม่? หรือเขียนไว้ใน Assembly? ถ้าคอมไพเลอร์เขียนด้วย C แล้วคอมไพเลอร์ที่ใช้ในการรวบรวมโค้ดคอมไพเลอร์คืออะไร?
คอมไพเลอร์ gcc C เขียนด้วยตัว C เองหรือไม่? หรือเขียนไว้ใน Assembly? ถ้าคอมไพเลอร์เขียนด้วย C แล้วคอมไพเลอร์ที่ใช้ในการรวบรวมโค้ดคอมไพเลอร์คืออะไร?
คำตอบ:
ประวัติความเป็นมาที่เฉพาะเจาะจงกับ GCC จะได้รับที่GCC วิกิพีเดีย ประเด็นทั่วไปก็คือโดยทั่วไปแล้วคอมไพเลอร์จะถูกคอมไพเลอร์กับคอมไพเลอร์อื่นจนกว่าจะมีประสิทธิภาพเพียงพอที่จะคอมไพเลอร์เอง อีกวิธีหนึ่งเป็นไปได้ที่จะเขียนคอมไพเลอร์พื้นฐานที่สามารถจัดการกับคุณสมบัติย่อยของคุณในแอสเซมเบลอร์และสร้างจากที่นั่น แต่อีกครั้งสิ่งนี้แทบไม่จำเป็นอีกต่อไป มีคอมไพเลอร์มากมายในหลากหลายภาษา แม้ว่า Stephen Johnson จะเขียน pcc (หนึ่งในคอมไพเลอร์ C ตัวแรก) ก็มีคอมไพเลอร์สำหรับ B พร้อมกับภาษาอื่น ๆ อีกมากมาย gcc มีคอมไพเลอร์หลายตัวให้เลือกสร้างในตอนแรกและ RMS บอกว่าเขาใช้คอมไพเลอร์ Pastel อย่างน้อยในระหว่างการพัฒนาครั้งแรก
โปรดจำไว้ว่าไม่มีข้อกำหนดที่คอมไพเลอร์ C ต้องเขียนด้วย C คุณสามารถเขียนใน Perl ได้หากต้องการ ไม่มีข้อกำหนดว่าจะต้องเขียนคอมไพเลอร์สำหรับแพลตฟอร์มที่กำหนดบนแพลตฟอร์มนั้น (ระบบฝังตัวมักจะถูกคอมไพล์ในระบบอื่น) ดังนั้นจึงมีหลายวิธีที่จะทำให้ตัวคุณเองได้บูต
คำถามนี้มีรายละเอียดปลีกย่อยที่น่าสนใจที่เกี่ยวข้องกับอินสแตนซ์แรกของการบูตคอมไพเลอร์ หากคุณฉลาดมากคุณสามารถใช้ bootstrap นั้นเพื่อทำสิ่งที่น่าทึ่งยอดเยี่ยมและน่ากลัวได้
แต่เดิมมันเขียนด้วยภาษาแอสเซมบลีจากนั้นก็เริ่มให้อาหารสุนัขเอง
แม้ว่านี่จะเป็นเพียงตัวบ่งชี้ที่หยาบมาก แต่ฉันพบว่ารายชื่อด่วนนี้ในgcc-5.1.0-src/gcc/
ไดเรกทอรีนั้นน่าสนใจ ไดเร็กทอรีนี้มีแหล่งที่มาหลักของ GCC (ยกเว้นไลบรารีรันไทม์)
นี่คือจำนวนไฟล์อันดับต้น ๆ (มากกว่า 100) ที่จัดกลุ่มตามนามสกุลที่ถูกครอบงำโดยไฟล์ C และ C ++
112 .opt
118 .def
140 .cc
185 .x
250 .exp
353 .md
366 .mm
414 .f
430 .f03
521 .m
625 .a
1082 .go
1371 .h
1602 .ads
1655 .adb
1828 .ada
3860 .f90
11231 .C // C++
23811 .c // C
โปรดทราบว่าปัจจุบันGCC
อ้างถึง GNU Compiler Collection ไม่ใช่แค่ GNU C Compiler
6.3 ไดเร็กทอรีย่อย gcc
ไดเร็กทอรี gcc มีไฟล์จำนวนมากที่เป็นส่วนหนึ่งของแหล่งข้อมูล C ของ GCC ไฟล์อื่น ๆ ที่ใช้เป็นส่วนหนึ่งของกระบวนการกำหนดค่าและสร้างและไดเร็กทอรีย่อยรวมถึงเอกสารประกอบและ testsuite
อ้างอิง: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html