====== کد منبع (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|پروژه گنو: تعریف نرم‌افزار آزاد]]