กลับไปหน้าบทความ

อ่าน 5 นาที

คอมไพเลอร์ Tiny C

Tiny C Compilerหรือ TCC, tCc หรือ TinyCC เป็นคอม ไพเลอร์ภาษาซี ที่กำหนดเป้าหมายไปที่สถาปัตยกรรม x86 (32 บิต), x86-64และARMซึ่งเขียนขึ้นครั้งแรกโดยFabrice

คอมไพเลอร์ Tiny C

คอมไพเลอร์ Tiny C
นักพัฒนาฟาบริซ เบลลาร์ด
เวอร์ชันเสถียร
0.9.27 / 17 ธันวาคม 2017 ( 17 ธันวาคม 2017 )
เขียนเป็นCและการประกอบ
ระบบปฏิบัติการลินุกซ์ , ยูนิกซ์ , วินโดวส์
ผู้มาก่อนOTCC, คอมไพเลอร์ Tiny C ที่ถูกทำให้คลุมเครือ[ 1 ]
พิมพ์คอมไพเลอร์C
ใบอนุญาตLGPLv2.1
เว็บไซต์bellard.org/tcc/ แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • repo .or .cz /tinycc .git

Tiny C Compilerหรือ TCC, tCc หรือ TinyCC เป็นคอม ไพเลอร์ภาษาซี ที่กำหนดเป้าหมายไปที่สถาปัตยกรรม x86 (32 บิต), x86-64และARMซึ่งเขียนขึ้นครั้งแรกโดยFabrice Bellardมันถูกออกแบบมาให้ใช้งานได้กับคอมพิวเตอร์ที่ทำงานช้าและมีพื้นที่ดิสก์เหลือน้อย (เช่น ในดิสก์กู้ระบบ ) การรองรับระบบปฏิบัติการ Windowsถูกเพิ่มเข้ามาในเวอร์ชัน 0.9.23 (17 มิถุนายน 2548) TCC เผยแพร่ภายใต้สัญญาอนุญาต GNU Lesser General Public License

TCC อ้างว่าได้นำ มาตรฐาน ANSI C (C89/C90) ทั้งหมดมาใช้[ 2 ]มาตรฐาน ISO C99ส่วนใหญ่[ 3 ]และส่วนขยาย GNU C จำนวนมาก รวมถึงการประกอบแบบ อิน ไลน์

คุณสมบัติ

TCC มีคุณสมบัติหลายประการที่แตกต่างจากคอมไพเลอร์ภาษา C อื่นๆ ในปัจจุบัน:

  • เนื่องจากขนาดไฟล์เล็ก (ประมาณ 100 KB สำหรับไฟล์ปฏิบัติการ x86 TCC) และใช้หน่วยความจำน้อยจึงสามารถใช้งานได้โดยตรงจากฟลอปปี้ดิสก์ขนาด 1.44 MB แผ่นเดียว เช่น ดิสก์กู้ระบบ
  • TCC มีจุดประสงค์เพื่อสร้างโค้ด x86, x86-64 และ ARM ดั้งเดิมได้อย่างรวดเร็วมาก ตามที่ Bellard กล่าวไว้ TCC สามารถคอมไพล์ แอสเซมบลี และลิงก์ได้เร็วกว่า GCC ประมาณเก้าเท่า[ 4 ]ปี 2023 สาขาการพัฒนา "mob" ยังรวมถึงการสนับสนุนRISC-VและTMS320C67xx ( ชิป DSP ) ด้วย
  • TCC มีคุณลักษณะเฉพาะของภาษาหลายประการที่ออกแบบมาเพื่อปรับปรุงการใช้งานให้มีประสิทธิภาพยิ่งขึ้น เช่น ตัวตรวจสอบหน่วยความจำและขอบเขตที่เป็นตัวเลือก เพื่อเพิ่มเสถียรภาพของโค้ด
  • TCC อนุญาตให้เรียกใช้โปรแกรมโดยอัตโนมัติในระหว่างการคอมไพล์โดยใช้สวิตช์บรรทัดคำสั่ง ซึ่งช่วยให้สามารถเรียกใช้โปรแกรมเป็นสคริปต์เชลล์ภายใต้ระบบที่คล้าย Unix ซึ่งรองรับ ไวยากรณ์ คำสั่งแปลshebang shebang สำหรับ TCC (ตามที่ระบุไว้ในเว็บไซต์ TCC อย่างเป็นทางการ) [ 2 ]คือ(สมมติว่า TCC ติดตั้งอยู่ที่ตำแหน่งการติดตั้งอาจแตกต่างกันไปตามระบบ) [ 5 ]#!/usr/local/bin/tcc -run/usr/local/bin/tcc

ประสิทธิภาพของโปรแกรมที่รวบรวมไว้

โดยทั่วไป การใช้งาน TCC เน้นความเล็กมากกว่าผลลัพธ์ที่มีประสิทธิภาพสูงสุด TCC สร้างโค้ดในรอบเดียวและไม่ได้ทำการเพิ่มประสิทธิภาพส่วนใหญ่ที่คอมไพเลอร์อื่นทำ TCC คอมไพล์แต่ละคำสั่งแยกกัน และเมื่อสิ้นสุดแต่ละคำสั่ง ค่า รีจิสเตอร์จะถูกเขียนกลับไปยังสแต็กและต้องอ่านใหม่แม้ว่าบรรทัดถัดไปจะใช้ค่าในรีจิสเตอร์ (สร้างคู่บันทึก/โหลดที่ไม่จำเป็นระหว่างคำสั่ง) TCC ใช้รีจิสเตอร์ที่มีอยู่เพียงบางส่วนเท่านั้น (เช่น บน x86 จะไม่ใช้ ebx, esi หรือ edi เพราะต้องเก็บรักษาไว้ระหว่างการเรียกฟังก์ชัน) [ 6 ]

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

ต่อไปนี้เป็นตัวอย่างมาตรฐานสองตัวอย่าง:

  1. การคำนวณเลข ฟิโบนาชี่แบบเรียกซ้ำ บนแล็ปท็อป Intel Centrino 1.8 GHz ที่มี RAM 512 MB แสดงให้เห็นความแตกต่างอย่างเห็นได้ชัดในผลลัพธ์ระหว่าง คอมไพเลอร์ Microsoft Visual C++เวอร์ชัน 13.10.3052 และ TCC โดยโปรแกรม MS Visual C++ ใช้เวลานานกว่าโปรแกรมที่คอมไพล์ด้วย TCC ประมาณ 18% ในการคำนวณเลขฟิโบนาชี่ลำดับที่ 49
  2. การทดสอบเปรียบเทียบคอมไพเลอร์ C ต่างๆ โดยใช้คอมไพเลอร์เหล่านั้นในการคอมไพล์GNU C Compiler (GCC) เอง จากนั้นใช้คอมไพเลอร์ที่ได้มาในการคอมไพล์ GCC อีกครั้ง เมื่อเปรียบเทียบกับ GCC 3.4.2 แล้ว TCC ที่แก้ไขเพื่อคอมไพล์ GCC สามารถคอมไพล์คอมไพเลอร์ได้เร็วกว่าถึงสิบเท่า แต่ไฟล์ .exe ที่ได้จะมีขนาดใหญ่ขึ้น 57% และทำงานช้าลงมาก โดยใช้เวลานานขึ้น 2.2 เท่าในการคอมไพล์ GCC อีกครั้ง[ 7 ]

    ผลการทดสอบพบว่า การรัน cc1 (คอมไพเลอร์ C ของ GCC) ใช้เวลา 518 วินาทีเมื่อคอมไพล์ด้วย GCC 3.4.2, 545 วินาทีเมื่อใช้คอมไพเลอร์ C ของ Microsoft และ 1145 วินาทีเมื่อใช้ TCC ส่วนการสร้างคอมไพเลอร์เหล่านี้ GCC (3.4.2) ใช้เวลา 744 วินาที ในขณะที่ TCC ใช้เวลาเพียง 73 วินาที ระดับการปรับแต่งประสิทธิภาพในแต่ละคอมไพเลอร์คือ -O1 หรือใกล้เคียงกัน

การใช้งาน

  • TCCBOOT [ 8 ]เป็นเทคนิคที่ TCC โหลดและบูตเคอร์เนล Linuxจากซอร์สโค้ดในเวลาประมาณ 10 วินาที กล่าวคือ เป็น " บูตโหลดเดอร์ " ที่อ่านซอร์สโค้ด เคอร์เนล Linux จากดิสก์ เขียนคำสั่งที่สามารถเรียกใช้งานได้ลงในหน่วยความจำ และเริ่มการทำงาน ซึ่งจำเป็นต้องมีการเปลี่ยนแปลงในกระบวนการสร้าง Linux
  • TCC ถูกใช้เพื่อคอมไพล์ GCC แม้ว่า จะต้องมี การแก้ไข หลายอย่าง เพื่อให้ใช้งานได้[ 9 ]
  • TCC ถูกใช้เพื่อสาธิตการป้องกันการโจมตีความไว้วางใจ[ 10 ]นอกจากนี้ยังใช้ในGNU Guix [ 11 ]ในความพยายามที่จะทำให้การแจกจ่ายสามารถบูตได้โดยไม่ต้องใช้ไบนารีใดๆ[ 12 ]
  • Cinpy [ 13 ]เป็นไลบรารีPython ที่อนุญาตให้คุณใช้งานฟังก์ชันด้วยภาษา C ในโมดูล Python ฟังก์ชันเหล่านี้จะถูกคอมไพล์ด้วย TCC ในขณะรันไทม์ ผลลัพธ์ที่ได้จะสามารถเรียกใช้งานได้ใน Python ผ่านไลบรารี ctypes [ 14 ]
  • TCC ถูกใช้เป็นข้อมูลอ้างอิงสำหรับเวอร์ชันที่คอมไพล์ของซอร์สโค้ดโปรแกรม Super Micro-Max Chess [ 15 ]
  • Bunใช้ TCC เพื่อเปิดเผย API ที่อนุญาตให้ผู้ใช้คอมไพล์และรันโปรแกรม C จาก JavaScript [ 16 ]

ประวัติศาสตร์

TCC มีต้นกำเนิดมาจาก Obfuscated Tiny C Compiler (OTCC) [ 1 ]ซึ่งเป็นโปรแกรมที่ Bellard เขียนขึ้นเพื่อชนะการแข่งขัน International Obfuscated C Code Contest (IOCCC) ในปี 2001 หลังจากนั้น Bellard ได้ขยายและถอดรหัสโปรแกรมดังกล่าวเพื่อสร้าง tcc [ 1 ]

ก่อนวันที่ 4 กุมภาพันธ์ 2012 Fabrice Bellard ได้อัปเดตหน้าเว็บอย่างเป็นทางการของโครงการเพื่อรายงานว่าเขาไม่ได้ทำงานเกี่ยวกับ TCC อีกต่อไป[ 17 ]

นับตั้งแต่ Bellard ออกจากโครงการ บุคคลและกลุ่มต่างๆ ได้แจกจ่ายแพตช์หรือดูแลฟอร์กของ TCC เพื่อสร้างหรือแก้ไขปัญหาของ TCC ซึ่งรวมถึงชุดแพตช์ tcc ที่ไม่เป็นทางการของ Dave Dodge [ 18 ] แพตช์ดาวน์สตรีมของ Debianและ kfreebsd [ 19 ]และแพตช์ gcc ของ grischka [ 7 ] Grischka ยังได้ตั้งค่าที่เก็บGit สาธารณะ สำหรับโครงการ[ 20 ]ซึ่งมีสาขา mob [ 21 ]ที่มีการเพิ่มผลงานมากมาย รวมถึงการสร้างร่วมกัน คอมไพเลอร์ข้ามแพลตฟอร์มและ ความเข้ากันได้ กับ SELinuxที่เก็บ GIT ของ Grischka ต่อมากลายเป็นที่เก็บ TCC อย่างเป็นทางการ (เชื่อมโยงโดยหน้าโครงการ Savannah ของ Fabrice Bellard) [ 22 ]

สถานะปัจจุบัน

ณ เดือนธันวาคม 2017 ทั้งรายชื่อผู้รับจดหมายอย่างเป็นทางการของ TCC [ 23 ]และที่เก็บ Git อย่างเป็นทางการ (ตามที่เชื่อมโยงโดยหน้าโครงการGNU Savannah ของ Fabrice Bellard [ 24 ] ) แสดงให้เห็นถึงการอภิปรายและการพัฒนาอย่างแข็งขันโดยนักพัฒนาและผู้ใช้ที่สนใจจำนวนมาก ในเดือนธันวาคม 2017 grischka ได้ประกาศในรายชื่อผู้รับจดหมายว่า TCC เวอร์ชัน 0.9.27 ได้รับการเผยแพร่แล้ว[ 25 ]

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Tiny_C_Compiler&oldid=1355505956 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ คอมไพเลอร์ Tiny C

Tiny C Compilerหรือ TCC, tCc หรือ TinyCC เป็นคอม ไพเลอร์ภาษาซี ที่กำหนดเป้าหมายไปที่สถาปัตยกรรม x86 (32 บิต), x86-64และARMซึ่งเขียนขึ้นครั้งแรกโดยFabrice

คุณสมบัติ

TCC มีคุณสมบัติหลายประการที่แตกต่างจากคอมไพเลอร์ภาษา C อื่นๆ ในปัจจุบัน:

ประสิทธิภาพของโปรแกรมที่รวบรวมไว้

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

การใช้งาน

TCCBOOT [ 8 ] เป็น เทคนิค ที่ TCC โหลดและบูต เคอร์เนล Linux จากซอร์สโค้ดในเวลาประมาณ 10 วินาที กล่าวคือ เป็น " บูตโหลดเดอร์ " ที่อ่าน ซอร์สโค้ด เคอร์เนล Linux จากดิสก์ เขียนคำสั่งที่สามารถเรียกใช้งานได้ลงในหน่วยความจำ และเริ่มการทำงาน...