**سی کوچک** (به انگلیسی: Small-C) زیرمجموعه‌ای از زبان برنامه‌نویسی سی است که برای ریزرایانه‌هایی با منابع محدود و سیستم‌های تعبیه شده مناسب است و همچنین اجرای آن زیر مجموعه آن مجموعه می‌باشد. این پیاده‌سازی که در اصل به عنوان یک کامپایلر اولیه برای سیستم‌های میکروکامپیوتری موجود در اواخر دهه ۱۹۷۰ و اوایل دهه ۱۹۸۰ ارزشمند بود، به عنوان مثالی به اندازه کافی ساده برای اهداف آموزشی نیز مفید بوده‌است.

کامپایلر اصلی که به زبان سی کوچک برای اینتل ۸۰۸۰ توسط ران کین نوشته شده بود، در شماره مه ۱۹۸۰ ***مجله دکتر داب (DDJ)*** نوشته شد. جیمز ای. هندریکس کامپایلر اصلی را بهبود بخشید و توسعه داد و ***کتاب راهنمای سی کوچک*** را نوشت. ران کین سی کوچک را در سیستم اس‌آرآی اینترنشنال PDP 11/45 یونیکس با شرحی که توسط جان باس برای توسعه Small C ارائه شده بود، بوت استرپ کرد. کد منبع ارائه شده با مجوز مدیریت در دامنه عمومی منتشر شد. اهمیت سی کوچک برای کامپیوترهای کوچک مشابه اهمیت جی‌سی‌سی برای کامپیوترهای بزرگتر بود. درست مانند همتایان یونیکس خود، کامپایلر کد اسمبلر را تولیدمی کند که باید توسط اسمبلر موجود به کد ماشین ترجمه شود.

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

زیر مجموعه زبان
---------------

"در ماه می سال ۱۹۸۰ مجله دکتر داب مقاله ای با عنوان «کامپایلر کوچک C برای دهه ۸۰۸۰» منتشر کرد که در آن ران کین یک کامپایلر کوچک به عنوان زیرمجموعه ای از زبان C ارائه کرد. جالب‌ترین ویژگی کامپایلر علاوه بر اندازه کوچکش، زبانی بود که به آن نوشته شده بود - زبانی که کامپایل می‌کرد. این یک خودْ کامپایلر بود! (اگرچه این کار امروزه رایج است، اما در آن زمان ایده نسبتاً جدیدی بود) با یک الگوریتم ساده و یک گذر، کامپایلر او زبان اسمبلی را برای پردازنده ۸۰۸۰ تولید کرد. به هر حال کوچک بودن، محدودیت‌هایی نیز داشت. این کامپایلر تنها کاراکترها، اعداد صحیح و آرایه‌های تک بعدی از هر نوع را تشخیص می‌داد. تنها وسیله کنترل حلقه دستور while بود. هیچ عملگر Boolean وجود نداشت، بنابراین عملگرهای منطقی بیتی & (AND) و | (OR) به جای آن استفاده شد. اما حتی با وجود این محدودیت‌ها، زبان بسیار توانا و استفاده از آن لذت بخش بود، به خصوص در مقایسه با زبان اسمبلی.

ران با درک نیاز به بهبود، من را تشویق کرد تا نسخه دوم را تولید کنم و در دسامبر ۱۹۸۲ آن نیز در مجله دکتر داب منتشر شد. به کامپایلر جدید سی کوچک ویژگی‌های (۱) بهینه‌سازی کد، (۲) مقداردهی اولیه داده‌ها، (۳) کامپایل شرطی، (۴) کلاس ذخیره‌سازی خارجی، (۵) دستورات switch و do/while و for و goto برای حلقه و شرط،(۶) عملگرهای تخصیص ترکیبی، (۷) عملگرهای بولی، (۸) عملگر مکمل یک متغیر، (۹) بلوک متغیرهای محلی، و (۱۰) ویژگی‌های مختلف دیگر افزوده شده‌است. سپس در سال ۱۹۸۴ ارنست پین و من یک کتابخانه زمان-اجرا سازگار با CP/M را برای کامپایلر توسعه و منتشر کردیم. این کتابخانه شامل بیش از ۸۰ تابع بود و بیشتر آنهایی را که در کتابخانه استاندارد ورودی/خروجی یونیکس C وجود داشت، شامل مواردی بود که به محیط CP/M مربوط می‌شدند. این کتابخانه، نسخه ۲٫۱ و موضوع کتاب راهنمای سی کوچک شد. "

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

* BDS C (1979) - کامپایلر C برای سیستم‌های Z80 و ۸۰۸۰
* MISOSYS C (1985) - کامپایلر C برای TRS-80 (Z80 CPU)
* Tiny C (2002) - کامپایلر C برای کامپیوترهای کند x86 و ARM با فضای دیسک کم

### انواع سی کوچک

* Z88DK – اجرای Cross سی کوچک برای میکروکامپیوترهای مبتنی بر Z80
* cc65 – اجرای Cross سی کوچک برای کامپیوتر ۶۵۰۲
* Deep Blue C – سی کوچک بومی برای خانواده ۸ بیتی آتاری
* AJTravis – سی کوچک بومی برای BBC Micro

یادداشت
-------

* Ron Cain, "A Small C Compiler for the 8080s", *Dr. Dobb's Journal*, April– May 1980, pp.
* جیمز ای. هندریکس، *کتاب راهنمای کوچک سی*، رستون ۱۹۸۴،شابک ‎۰-۸۳۵۹-۷۰۱۲-۴
* James E. Hendrix, *A Small C Compiler: Language, Usage, Theory, and Design*, M & T Books 1988,شابک ‎۰-۹۳۴۳۷۵-۸۸-۷
* James E. Hendrix, *Small C Compiler*, M & T Books 1990,شابک ‎۱-۵۵۸۵۱-۱۲۴-۵

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

* نظرات ران کین در مورد ایجاد سی کوچک
* چندین پیاده‌سازی سی کوچک
* کامپایلر بومی برای کامپیوتر بی‌بی‌سی
* دانلود iso-image CDROM منبع سی کوچک دکتر داب

منابع
-----

1. ↑  James E. Hendix. "Introduction". کوچک-compiler-book/184415519?queryText=%2522small%2Bc%2522 *A سی کوچک Compiler: Language, Usage, Theory, and Design*. M & T Books 1988 / Dr. Dobb's Journal Developer Network 2005. `{{cite book}}`: Check `|url=` value (help)
2. ↑  "C compilers for the BBC Computer". Mdfs.net.