ข้ามไปเนื้อหา

ชุดแปลโปรแกรมของกนู

จากวิกิพีเดีย สารานุกรมเสรี
GNU Compiler Collection
ผู้ออกแบบRichard Stallman
นักพัฒนาGNU Project
วันที่เปิดตัว22 มีนาคม 1987; 37 ปีก่อน (1987-03-22)[1]
รุ่นเสถียร
14.2[2] แก้ไขบนวิกิสนเทศ / 1 สิงหาคม 2024
ที่เก็บข้อมูล
ภาษาที่เขียนC, C++[3]
ระบบปฏิบัติการCross-platform
แพลตฟอร์มGNU and many others
ขนาด~15 million LOC[4]
ภาษาEnglish
ประเภทCompiler
สัญญาอนุญาตGPLv3+ with GCC Runtime Library Exception[5]
เว็บไซต์gcc.gnu.org

ชุดแปลโปรแกรมของกนู (อังกฤษ: GNU Compiler Collection) หรือเรียกโดยย่อว่า จีซีซี (อังกฤษ: GCC) เป็นชุดโปรแกรมแปลโปรแกรมสำหรับแปลภาษาโปรแกรมต่าง ๆ พัฒนาโดยโครงการกนู (GNU) และแจกจ่ายเป็นซอฟต์แวร์เสรีภายใต้สัญญาอนุญาตแบบ GPL และ LGPL โดยชุด GCC ถือว่าเป็นชุดคอมไพเลอร์มาตรฐานในระบบปฏิบัติการแบบยูนิกซ์ อย่างเช่น ลินุกซ์ หรือ Mac OS X เป็นต้น

ชื่อเดิมของ GCC คือ GNU C Compiler เนื่องจากในระยะแรกถูกพัฒนาขึ้นเป็นคอมไพเลอร์ของภาษาซีเท่านั้น แต่ในภายหลังเมื่อได้พัฒนาให้สนับสนุนภาษาโปรแกรมอื่นๆ มากขึ้น จึงเปลี่ยนชื่อเพื่อให้สื่อครอบคลุมความหมายมากกว่าเดิม

ภาพรวม

[แก้]

GCC เริ่มพัฒนาใน ค.ศ. 1985 โดยริชาร์ด สตอลแมน ซึ่งเขาเริ่มจากการแปลงคอมไพเลอร์ของภาษา Pastel (ส่วนขยายของภาษาปาสกาล) ให้ใช้กับภาษาซีได้ GCC ถูกเขียนขึ้นมาใหม่อีกครั้งโดยใช้ภาษาซีทั้งหมด เพื่อเป็นคอมไพเลอร์สำหรับภาษาซีและเป็นส่วนสำคัญของโครงการกนูในยุคแรก ซึ่งทิศทางการพัฒนากำหนดโดย Free Software Foundation

ใน ค.ศ. 1997 กลุ่มนักพัฒนา GCC จำนวนหนึ่งไม่พอใจการพัฒนาของ GCC สายหลักที่ล่าช้า จึงแยกตัวออกมาพัฒนา EGCS (Experimental/Enhanced GNU Compiler System) ทำให้การพัฒนาเกิดขึ้นรวดเร็วกว่า GCC เดิมมาก ในปี ค.ศ. 1999 EGCS กลายมาเป็น GCC เวอร์ชันหลักแทน GCC เก่าในท้ายที่สุด

นอกจากจะเป็นคอมไพเลอร์มาตรฐานบนระบบปฏิบัติการแบบยูนิกซ์แล้ว GCC ยังถูกนำมาแปลงให้ใช้ได้บนระบบปฏิบัติการอื่นๆ เช่น NeXTSTEP และ Mac OS X รวมถึงระบบฝังตัวอื่นๆ เช่น Symbian, PlayStation และ Dreamcast เป็นต้น

ภาษาโปรแกรมที่สนับสนุน

[แก้]

ในชุดคอมไพเลอร์มาตรฐานเวอร์ชัน 4.3 สนับสนุนภาษาโปรแกรมดังต่อไปนี้[6]

นอกจากนี้ยังสนับสนุนภาษาโปรแกรมอื่นๆ เพิ่มเติม แต่ไม่ได้รวมอยู่ในชุดคอมไพเลอร์มาตรฐาน

สถาปัตยกรรมคอมพิวเตอร์ที่สนับสนุน

[แก้]

โพรเซสเซอร์ที่สนับสนุนโดย GCC รุ่น 4.3 ได้แก่

โพรเซสเซอร์อื่นที่สนับสนุนได้แก่:

โพรเซสเซอร์อื่นที่สนับสนุนโดย GCC แต่การพัฒนาและบำรุงรักษา แยกจากรุ่นของ FSF:

โครงสร้างการทำงาน

[แก้]

GCC ทำงานโดยใช้บรรทัดคำสั่ง ผู้ใช้มักเรียกโปรแกรมโดยการเรียกโปรแกรมที่ชื่อ gcc พร้อมทั้งใส่ตัวเลือกต่างๆ ทางพารามิเตอร์ในบรรทัดคำสั่ง โปรแกรมนี้จะวิเคราะห์ภาษาที่ใช้จากนามสกุลของไฟล์ แล้วเรียกพรีโพรเซสเซอร์, คอมไพเลอร์, แอสเซมเบลอร์ และ ลิงเกอร์ มาทำงานตามลำดับ แต่ผู้ใช้สามารถสั่งให้ทำงานเฉพาะบางขั้นตอนข้างบนจากพารามิเตอร์ได้[7]

พรีโพรเซสเซอร์ ที่ใช้เป็นโปรแกรมหนึ่งใน GCC มีชื่อว่า cpp เรียกใช้ก็ต่อเมื่อจะคอมไพล์โปรแกรมที่เขียนในบางภาษา เช่น C หรือ C++ เป็นต้น

ใน GCC แยกคอมไพเลอร์แต่ละภาษาออกเป็นคนละโปรแกรม ตัวอย่างเช่น คอมไพเลอร์ภาษา C จะเป็นโปรแกรมที่ชื่อ cc1 โครงสร้างภายในคอมไพเลอร์แต่ละภาษาแบ่งเป็นสามส่วนเหมือนกัน ได้แก่ ฟรอนต์เอ็นด์ (frontend) มิดเดิลเอ็นด์ (middle-end) และ แบ็คเอ็นด์ (backend)[8][9]

  • ฟรอนต์เอ็นด์ ทำหน้าที่อ่านไฟล์ที่ผ่านการประมวลผล พรีโพรเซสเซอร์ แล้วตีความหมาย ตรวจสอบหาข้อผิดพลาด และสร้างโครงสร้างข้อมูลที่ชื่อ GENERIC ซึ่งมีรูปแบบ abstract syntax tree (AST) ฟรอนต์เอ็นด์นี้เป็นส่วนของคอมไพเลอร์ที่ขึ้นกับภาษา
  • มิดเดิลเอ็นด์ ทำหน้าที่แปลง GENERIC เป็นอีกโครงสร้างหนึ่งที่ชื่อ GIMPLE ซึ่งลดรูปโครงสร้างต่างๆ เช่น ลูป for, while ให้เหลือเพียง if และ goto แล้วแปลงเข้ารูปแบบ static single assignment (SSA) สุดท้ายสร้างโครงสร้างข้อมูลที่ชื่อ Register Transfer Language (RTL) ซึ่งในแต่ละขั้นตอนการแปลข้างบน ก็มีการทำ ออพติไมซ์ (optimize) เพื่อให้โปรแกรมที่ได้ทำงานเร็วขึ้น ส่วนนี้ของคอมไพเลอร์ไม่ขึ้นกับภาษาหรือสถาปัตยกรรมที่ใช้
  • แบ็คเอ็นด์ แปลง RTL ไปเป็นโปรแกรมภาษาแอสเซมบลี ส่วนนี้ขึ้นกับสถาปัตยกรรมที่จะคอมไพล์

ส่วน แอสเซมเบลอร์ และ ลิงเกอร์ นั้นไม่รวมอยู่ในชุดโปรแกรม GCC ในระบบกนูโปรแกรมทั้งสองจะอยู่ในอีกชุดโปรแกรมหนึ่ง คือ binutils แอสเซมเบลอร์ ทำหน้าที่แปลภาษาแอสเซมบลี เป็นภาษาเครื่อง ในขณะที่ ลิงเกอร์ ทำหน้าที่รวมไฟล์ภาษาเครื่อง ซึ่งอาจมีหลายไฟล์ และไลบรารีเข้าด้วยกัน เป็นโปรแกรมที่สมบูรณ์สามารถทำงานได้

อ้างอิง

[แก้]
  1. "GCC Releases". GNU Project. สืบค้นเมื่อ July 24, 2020.
  2. "GCC 14.2 Released". 1 สิงหาคม 2024. สืบค้นเมื่อ 1 สิงหาคม 2024.
  3. "GCC Coding Conventions - GNU Project". gcc.gnu.org. สืบค้นเมื่อ 2022-02-07.
  4. Víctor Rodríguez (2019-10-01). "Cutting Edge Toolchain (Latest Features in GCC/GLIBC)". youtube.com. Linux Foundation. เก็บจากแหล่งเดิมเมื่อ 2021-11-07. สืบค้นเมื่อ 2021-01-19.
  5. "GCC Runtime Library Exception". สืบค้นเมื่อ July 24, 2020.
  6. "GCC Front Ends". สืบค้นเมื่อ 2008-05-11.
  7. "GCC Command Options". สืบค้นเมื่อ 2008-05-11.
  8. "The Conceptual Structure of GCC". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2008-06-04. สืบค้นเมื่อ 2008-05-11.
  9. "GCC 4.0.2 - The Implementation". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2008-06-04. สืบค้นเมื่อ 2008-05-11.

แหล่งข้อมูลอื่น

[แก้]