====== کد منبع (Source Code) ======
===== تعریف =====
**کد منبع (Source Code)** مجموعهای از دستورها، تعریفها و عبارتهایی است که برنامهنویس برای توصیف رفتار یک نرمافزار با استفاده از یک زبان برنامهنویسی مینویسد.
کد منبع میتواند به شکل متن ساده نوشته شود یا شامل ساختارها و فایلهای مختلفی باشد که در کنار یکدیگر یک نرمافزار را تشکیل میدهند. این کد معمولاً توسط ابزارهایی مانند [[glossary:programming:compiler|کامپایلر]]، [[glossary:programming:interpreter|مفسر]] یا ابزارهای ساخت پردازش میشود.
===== نحوه کار =====
کد منبع معمولاً نخستین شکل قابلخواندن و قابلویرایش یک برنامه است. برای تبدیل آن به نرمافزاری قابل اجرا، بسته به زبان برنامهنویسی و محیط اجرا، ممکن است چند مرحله انجام شود:
* **تحلیل نحوی (Parsing):** بررسی ساختار کد بر اساس قواعد زبان.
* **تحلیل معنایی (Semantic Analysis):** بررسی معنی ساختارها و سازگاری آنها با قواعد زبان.
* **ترجمه (Translation):** تبدیل کد به شکل دیگری مانند کد ماشین یا بایتکد.
* **اجرا (Execution):** اجرای برنامه توسط پردازنده یا یک محیط اجرا.
این مراحل در همه زبانها و پیادهسازیها یکسان نیستند. برای مثال، بعضی زبانها به کد ماشین کامپایل میشوند، درحالیکه برخی پیادهسازیها کد را به بایتکد تبدیل کرده و سپس آن را در یک ماشین مجازی اجرا میکنند.
===== مثال =====
کد زیر یک برنامه ساده به زبان C است:
#include
int main(void) {
printf("Hello, world!\n");
return 0;
}
این متن کد منبع برنامه است. برای ساخت یک فایل اجرایی در محیطی که GCC نصب شده، میتوان از دستور زیر استفاده کرد:
gcc hello.c -o hello
در این مثال، `hello.c` فایل کد منبع و `hello` نام فایل اجرایی خروجی است. دستور ساخت ممکن است با توجه به سیستمعامل و ابزارهای مورد استفاده متفاوت باشد.
===== کد منبع و کد ماشین =====
کد منبع و کد ماشین دو مفهوم متفاوتاند:
* **کد منبع (Source Code):** معمولاً برای انسان قابلخواندن و ویرایش است و از قواعد یک زبان برنامهنویسی پیروی میکند.
* **کد ماشین (Machine Code):** شامل دستورهایی است که پردازنده مشخصی میتواند مستقیماً اجرا کند.
بین این دو ممکن است مراحل دیگری مانند تولید فایل شیء، پیونددهی و بهینهسازی وجود داشته باشد. همچنین همه زبانها الزاماً مستقیماً از کد منبع به کد ماشین تبدیل نمیشوند.
===== کد منبع و کد بایت =====
**بایتکد (Bytecode)** نمایش میانی کد است که معمولاً برای اجرا توسط یک ماشین مجازی یا محیط اجرای مشخص طراحی میشود.
برای نمونه، پیادهسازی استاندارد CPython کد پایتون را به بایتکد تبدیل میکند و سپس آن را در ماشین مجازی خود اجرا میکند. بنابراین، در این پیادهسازی، اجرای برنامه صرفاً به معنی اجرای مستقیم متن کد منبع توسط پردازنده نیست.
اطلاعات بیشتر: [[glossary:programming:bytecode|بایتکد]]
===== کد منبع در نرمافزار آزاد =====
در نرمافزار آزاد، دسترسی به کد منبع اهمیت اساسی دارد؛ زیرا امکان مطالعه، بررسی، تغییر و توزیع مجدد نرمافزار را مطابق مجوز آن فراهم میکند.
با این حال، **در دسترس بودن کد منبع بهتنهایی برای آزاد بودن نرمافزار کافی نیست**. مجوز نرمافزار نیز باید آزادیهای لازم را به کاربران بدهد. همچنین انتشار کد منبع لزوماً به این معنی نیست که نرمافزار از نظر امنیتی بررسی شده یا بدون آسیبپذیری است.
===== اصطلاحات مرتبط =====
* [[glossary:programming:compiler|کامپایلر (Compiler)]]
* [[glossary:programming:interpreter|مفسر (Interpreter)]]
* [[glossary:programming:machine_code|کد ماشین (Machine Code)]]
* [[glossary:programming:bytecode|بایتکد (Bytecode)]]
* [[glossary:programming:runtime|محیط اجرا (Runtime)]]
* [[glossary:programming:open_source|متنباز (Open Source)]]
===== منابع =====
* [[https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html|مستندات GCC: گزینههای کلی کامپایل]]
* [[https://docs.python.org/3/reference/executionmodel.html|مستندات رسمی پایتون: مدل اجرا]]
* [[https://www.gnu.org/philosophy/free-sw.html|پروژه گنو: تعریف نرمافزار آزاد]]