کامپایلر کوچک C

کامپایلر کوچک C (با نام مستعار tCc, TCC یا TinyCC) کامپایلر C پردازنده x86، X86-64 و ARM است که توسط فابریس بلارد ایجاد شده‌است. این کامپایلر برای کار کردن روی رایانه های کند و با فضای ذخیره‌سازی کم طراحی شده‌است (به عنوان مثال در دیسک‌های نجات). پشتیبانی سیستم عامل ویندوز در نسخه ۰٫۹٫۲۳ (۱۷ ژوئن ۲۰۰۵) اضافه شد. TCC تحت مجوز عمومی GNU توزیع شده‌است.
TCC ادعا می‌کند که کلیه استاندارد C89 / C90) ANSI C) را پیاده‌سازی کرده‌است،Tiny C Compiler Reference Documentation accessed on 2008-08-07 بسیاری از استاندارد ISO C99،According to the project's TODO list complex types are the only missing C99 feature. Variable Length Arrays have been added in TCC 0.9.26 و بسیاری از برنامه‌های افزودنی GNU C از جمله زبان اسمبلی درون خطی پیاده‌سازی کرده‌است.

 امکانات 
TCC دارای چندین ویژگی است که آن را از دیگر کامپایلرهای جریان فعلی C متمایز می‌کند:
 اندازه فایل آن (حدود ۱۰۰ کیلوبایت برای قابل اجرایی x86 TCC) و حافظه اشغالی اجازه می‌دهد تا مستقیماً از یک فلاپی دیسک 1.44 M، مانند دیسک نجات استفاده شود.
 TCC در نظر گرفته شده‌است که بسیار سریع کد x86، x86-64 و ARM را تولید کند. طبق گفته Bellard، تقریباً ۹ برابر سریعتر از GCC، کامپایل، مونتاژ و پیوند کتابخانه را انجام می‌دهد.Tiny C Compiler homepage
 TCC دارای تعدادی از ویژگی‌های خاص زبان کامپایلر است که برای بهبود عملی آن، از قبیل حافظه اختیاری و جستجوگر محدود، برای بهبود ثبات کدها در نظر گرفته شده‌است.
 TCC اجازه می‌دهد تا برنامه‌ها به‌طور خودکار در زمان کامپایل با استفاده از یک سوئیچ خط فرمان اجرا شوند. این اجازه می‌دهد تا برنامه‌ها به عنوان یک اسکریپت پوسته تحت سیستم‌های مانند یونیکس اجرا شوند که از دستورات نحوی راهنمای مفسر Shebang پشتیبانی می‌کنند.

 عملکرد برنامه کامپایل شده 
اگرچه کامپایلر TCC خود فوق‌العاده سریع است، بین اندازه کامپایلر و عملکرد کدی که TCC تولید می‌کند، نسبت ذاتی وجود دارد.

TCC چند بهینه‌سازی از قبیل انتشار مداوم برای کلیه عملیات‌ها را انجام می‌دهد، ضرب‌ها و تقسیم‌ها در صورت لزوم بهینه‌سازی می‌شوند و عملگرهای مقایسه به‌طور ویژه بهینه می‌شوند (با حفظ حافظه پنهان (cache) مخصوص flagهای پردازنده). این کار همچنین برخی از تخصیص ثبات ساده را انجام می‌دهد، که از بسیاری از جفت‌های صرفه جویی / بار اضافی در داخل یک Statement برنامه‌نویسی جلوگیری می‌کند.

به‌طور کلی، ساختار TCC به جای نتایج بهینه عملکرد بر کوچک بودن تأکید می‌کند. TCC کدها را در یک گذر واحد برنامه تولید می‌کند و اکثر بهینه‌سازی‌های انجام شده توسط دیگر کامپایلرها را انجام نمی‌دهد. TCC هر Statement برنامه‌نویسی را به تنهایی گردآوری می‌کند، و در پایان هر بیانیه مقادیر ثبت و به پشته برگردانده می‌شوند و باید دوباره خوانده شود حتی اگر خط بعدی از مقادیر در رجیسترها استفاده کند (ایجادهای ذخیره بیرونی / بار بین جفت Statement‌های برنامه‌نویسی). TCC فقط از برخی از ثبت‌های موجود استفاده می‌کند (به عنوان مثال، در x86 هرگز از ebx , esi یا edi استفاده نمی‌کند زیرا باید در فراخوانی تابع حفظ شود).Glöckner, Daniel. Re: Tinycc-devel (no subject), September 8, 2006.

در اینجا دو مثال وجود دارد:
 یک الگوریتم بازگشتی فیبوناچی در لپ تاپ GHz 1.8 Intel Centrino با ۵۱۲ RAM MB تفاوت قابل توجهی در نتایج بین کامپایلر Microsoft Visual C ++ 13.10.3052 و TCC نشان می‌دهد. برای محاسبه شماره ۴۹ فیبوناچی، یک برنامه MS Visual C ++ تقریباً ۱۸٪ بیشتر از برنامه تدوین شده TCC طول کشید. 
 با استفاده از یک tcc اصلاح شده برای کامپایل کردن GCC، اجرای cc1 (کامپایلر GCC C) به خودی خود ۵۱۸ ثانیه نیاز دارد تا هنگام استفاده از GCC 3.4.2، ۵۵۸ ثانیه با استفاده از GCC 2.95.3، ۵۴۵ با استفاده از کامپایلر Microsoft C و ۱۱۴۵ ثانیه با استفاده از TCC طول می‌کشد. سطح بهینه‌سازی در هر کامپایلر -O1 یا مشابه بود.grischka, GCC by TCC (some fixes), 29 Sep 2005

 استفاده‌ها 
 TCCBOOT ,TCCBOOT در جایی که TCC حدود ۱۰ ثانیه هسته هسته لینوکس را از منبع خود بارگیری و بوت می‌کند. یعنی «بوت لودر» است که کد منبع هسته لینوکس را از دیسک می‌خواند، دستورالعمل‌های اجرایی را روی حافظه می‌نویسد و شروع به اجرای آن می‌کند. این امر نیاز به تغییر در روند ساخت لینوکس داشت.
 از TCC برای نشان دادن دفاع در مقابل حمله اعتماد استفاده شد.Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling. ACSAC.
 TCC برای کامپایل GCC استفاده شده‌است، اگرچه برای تهیه این کار تکه‌های مختلفی لازم بود.tinycc-devel (thread)
 CinpyCinpy  یک کتابخانه پایتون است که به شما امکان می‌دهد عملکردهایی را با C در ماژول‌های پایتون پیاده‌سازی کنید. توابع با TCC در زمان اجرا کامپایل می‌شوند. نتایج از طریق کتابخانه ctypes در پایتون قابل تماس می‌باشد.
 نصب شده بر روی JavaScript LinuxJavaScript Linux (همچنین توسط Bellard).
 به عنوان مرجع برای نسخه کاملی از منبع برنامه شطرنج فوق‌العاده کوچک-حداکثر استفاده شده‌است.Super Micro-Max Chess Engine

 تاریخ 
TCC منشأ آن را در کامپایلر OTCC) Obfuscated Tiny C) تشکیل می‌دهد، برنامه ای که Bellard برای برنده شدن در مسابقه بین‌المللی C Code Obfuscated C در سال ۲۰۰۱ نوشت. پس از آن زمان، Bellard برنامه را غیرفعال کرد تا TCC را تولید و گسترش بدهد.Bellard, Fabrice. Obfuscated Tiny C Compiler

در برخی از زمان قبل از ۴ فوریه ۲۰۱۲، Fabrice Bellard صفحه رسمی این پروژه را به روز کرد تا گزارش دهد که دیگر در TCC کار نمی‌کند.The oldest archive.org snapshot of the TCC home page showing Fabrice Bellard's announcement of ceasing work on TCC.

از زمان خروج بلارد از این پروژه، افراد و گروه‌های مختلف تکه‌هایی را توزیع کرده‌اند یا forkهای TCC را برای ساختن یا حل مشکلات با TCC حفظ کرده‌اند. این شامل مجموعه Dave Dodge از پتچ‌های tcc غیررسمی،Dave Dodge's collection of unofficial tcc patches  پتچ‌های پایین دست Debian و kfreebsd ,Debian and kfreebsd downstream patches و پتچ‌های gccka grischka است.grischka, GCC by TCC (some fixes), 29 Sep 2005 Grischka همچنین راه اندازی یک مخزن دستگاه گوارش عمومی برای پروژهgrischka, Public Git Hosting for tcc است که شامل یک شاخه mobgrischka, mob branch for tcc که در آن کمک‌های متعدد، از جمله ساخت مشترک، متقابل کامپایلرها، و سازگاری SELinux را اضافه شدند. مخزن GIT Grischka بعداً تبدیل به مخزن رسمی TCC شد (به صفحه پروژه ساوانا فابریس بلارد پیوند داده شدOfficial Savannah project page).

 وضعیت فعلی 
از دسامبر سال ۲۰۱۷، هر دو لیست پستی رسمی TCCOfficial TCC mailing list و مخزن رسمی Git (همان‌طور که توسط صفحه پروژه Fabrice Bellard SavannahOfficial Git source code repository) توسط بسیاری از توسعه دهندگان و کاربران علاقه‌مند بحث و توسعه فعال نشان می‌دهد. در دسامبر سال ۲۰۱۷، grischka در لیست پستی اعلام کرد نسخه TCC 0.9.27 نسخه منتشر شده‌است.Official TCC mailing list, 2017-12-27 entry

 جستارهای وابسته 

 LCC (کامپایلر)
 کامپایلر قابل حمل C
 C-کوچک

 منابع 

 پیوند به بیرون 

 لیست پستی فعال TCC
 مخزن کد منبع
 PTSource IDE - محیط یکپارچه توسعه شامل TCC است.

رده:کامپایلرها و مفسرهای آزاد
رده:کامپایلرهای سی
رده:نرم‌افزارهای آزاد نوشته‌شده با سی
رده:نرم‌افزارهای دارای پروانه ال‌جی‌پی‌ال
رده:نرم‌افزارهای نوشته‌شده با اسمبلی