وبلاگ

چرا برنامه نویسی به زبان c ؟

چرا برنامه نویسی به زبان c ؟

زبان برنامه نویسی C یکی از پر کاربردترین زبان های برنامه نویسی است. زبان C را مادر همه زبان ها می دانند زیرا ریشه و اساس زبان های زیادی است، زبان هایC++ ، Objective-C، C#، جاوا، جاوا اسکریپت، پرل، PHP، پایتون و ….

زبان C یک زبان برنامه نویسی سطح بالا، چندمنظوره، قابل حمل با کاربرد آسان است که با توجه به اینکه حدود ۵۰ سال پیش ساخته شده اما هنوز هم به شدت مورد استقبال قرار می گیرد و اغلب بین ۵ یا ۱۰ زبان محبوب و پرطرفدار جهان قرار دارد.

نقاط قوت

نقاط قوت این زبان نیز مانند جاوا شی‌گرا بوده و مستقل از پلتفرم می‌باشد. شما می‌توانید کدی در لینوکس نوشته و در ویندوز به راحتی و بدون خطا اجرا کنید. یکی از کمبود‌های C که در C++ جبران شد همین سطح انتزاع و قابلیت نگریستن به دیتا به‌عنوان شیء بود. C++ سبک برنامه‌نویسی در آن محدود به یک عدد نمی‌شود. عمومی، امری و شی‌گرا سه پارادایم موجود در این زبانند. مدیریت حافظه به دست کاربر دیگر ویژگی مثبت این زبان است. همچنین به علت قدیمی بودن و محبوبیت بالا، جامعه‌ی عظیمی از برنامه‌نویسان برای پاسخگویی به سوالات و مشکلات احتمالی شما در انجمن‌های مجازی وجود دارند. کد‌هایی که در C درست کار می‌کند، بدون خطا در C++ نیز اجرا خواهد شد. کد‌هایی که در این زبان می‌نویسید مقیاس پذیرند؛ پس برای اندازه‌های مختلف تیم‌ها و شرکت‌های در حال رشد نیز مناسب می‌باشد.

 نقاط ضعف

 C++ از نشانگر (pointer) استفاده می‌کند. این امر در زمانی که کنترل حافظه را به دست کاربر می‌دهد نقطه‌ی قوت به‌حساب می‌آید؛ اما همین نشانگر، مبحثی بسیار سخت برای یادگیری و در عین حال حیاتی برای اجرای برنامه‌هاست. استفاده‌ی اشتباه از نشانگر‌ها می‌تواند باعث به‌هم‌ریختن سیستم و خطاهای عجیب شود. همین نشانگر‌ها در کنار متغیر‌های گلوبال، باعث ضعف امنیتی C++ می‌شوند.



کاربردهای زبان  C

ساده است اما یکی از قدرتمندترین زبان هایی است که تاکنون ایجاد شده و با وجود اینکه به عنوان یک زبان سطح بالا در نظر گرفته می شود اما نسبت به سایر زبان ها به سخت افزار نیز نزدیک است. به همین دلیل بسیاری از زبان ها از C برای کامپایل استفاده می کنند (مثل پایتون).

اولین زبانی است که امکان نوشتن سیستم عامل با زبان “سطح بالا” و همچنین راه اندازی مجدد کامل سیستم عامل یونیکس را فراهم کرد و در توسعه برنامه نویسی شی گرا نیز نقش اساسی داشته است.

اما زبان C یک زبان همه کاره است و کاربردهای بسیار گسترده ای دارد. برخی از کاربردهای آن عبارتند از:.

·       طراحی و توسعه نرم افزارهای سیستم و برنامه های دسکتاپ

·       توسعه پایگاه داده های معروف مانند MySQL، PostgreSQL، SQLite به زبان C نوشته شده اند.

·       توسعه برنامه های مرتبط با گرافیک مانند بازی های رایانه ای و موبایلی( کتابخانه های گرافیکی مانند OpenGL برای ارائه تصاویر گرافیکی دو بعدی و سه بعدی نیز به زبان C نوشته شده اند.)

·       ارزیابی انواع معادلات ریاضی

·       طراحی کامپایلرها، سیستم عامل ها و مفسرها

·       توسعه کامل هسته یونیکس

·       طراحی دستگاه های شبکه

·       طراحی برنامه های GUI. Adobe Photoshop

·       ساخت سیستم کنترل نسخه بسیار محبوب Git

·       توسعه نرم افزارهای کاربردی مانند صفحات گسترده

·       طراحی ابزارهایی مانند GTK و wxWidgets و …

در زمینه های دیگر نیز کاربرد دارد:

·       اسمبلرها

·       دستگاه و درایورها

·       اینترنت اشیا

·       تلفن های هوشمند

·       سیستم های تعبیه شده (embedded systems)

چرا از زبان برنامه نویسی C استفاده می شود؟

امروزه زبان های برنامه نویسی سطح بالاتر امکانات بسیاری برای توسعه دهندگان فراهم می کنند اما دلایل زیادی وجود دارد که باور کنید برنامه نویسی C هنوز هم زنده است و مدت طولانی فعال خواهد ماند. در اینجا برخی از ویژگی ها و دلایل شکست ناپذیری زبان C آورده شده است:

انعطاف پذیریزبان C ترکیبی از ویژگی های هر دو زبان سطح بالا و سطح پایین است. از یک طرف در برنامه نویسی سطح پایین مانند اسکریپت نویسی درایورها و هسته ها استفاده می شود و از طرف دیگر از عملکرد زبان های برنامه نویسی سطح بالا مانند اسکریپت نویسی برای برنامه های نرم افزاری و … پشتیبانی می کند.

ساختار گرامری ساده: C یک زبان ساده و آسان است و برای درک واضح و دقیق مفاهیم اساسی برنامه نویسی مانند انواع داده، عملگرها، دستورات کنترلی و بسیاری موارد دیگر بسیار مناسب است. ساختار تابعی، انواع داده ها و مجموعه ای غنی از توابع کتابخانه ای، آن را کارآمد و قدرتمند کرده است.

زبان رویه ای و ساخت یافته: برنامه نویسی C یک زبان رویه ای است که دستورات آن مرحله به مرحله اجرا می شود.یعنی می توان برنامه را با استفاده از توابع به قسمت ها و بلوک ها کوچکتر تقسیم کرد تا درک و خوانایی آن آسان تر شود.

سازگاری:ویژگی های مختلف C مانند: دسترسی مستقیم به APIهای سخت افزاری سطح ماشین، کامپایلرهای C، استفاده از منابع قطعی و تخصیص حافظه پویا باعث شده تا این زبان به یک گزینه ای ایده آل برای برنامه های اسکریپتی و درایورهای سیستم های نهفته یا تعبیه شده تبدیل شود.

قابلیت حمل: C یک زبان با قابلیت حمل بالا و مستقل از سخت افزار است. برنامه های C را می توان با کمی تغییر یا بدون تغییر در بسیاری از سیستم ها اجرا کرد.کامپایلرهای C برای همه سیستم عامل ها و سخت افزارها در دسترس است و به راحتی می توانید روی یک سیستم کد بنویسید و آن را به سیستم دیگری (با سیستم عامل یکسان) منتقل کنید.

زبان کامپایلری: C یک زبان کامپایلری است. کامپایلر برنامه ای است که زبان سطح بالا یا زبان سطح متوسط ​​را به زبان ماشین، قابل فهم برای کامپیوتر تبدیل می کند.

سریع و قوی: C یک زبان بسیار کارآمد است و کامپایل و اجرای برنامه های آن نسبت به بیشتر زبان های دیگر بسیار سریعتر است. به دلیل اینکه C برای برنامه نویسی سیستم عامل یونیکس طراحی شده است و بسیار مهم است که برنامه بتواند با حافظه محدود به سرعت اجرا شود.

ادغام با یونیکس: C با سیستم عامل یونیکس و لینوکس ارتباط نزدیکی دارد. سیستم UNIX و Linux با کامپایلر C به نام GCC همراه است.

بازگشت: در برنامه نویسی C، بازگشت یکی از پرکاربردترین تکنیک های رایج است که در آن یک تابع بارها و بارها می تواند خود را فرا خوانی کند.

کتابخانه غنی: C مجموعه ای غنی از توابع کتابخانه ای و توابع داخلی زیادی دارد و همچنین از برنامه نویسی گرافیکی نیز پشتیبانی می کند. به همین دلیل نوشتن و توسعه نرم فزار با زبان C بسیار سریع انجام می شود.

قابل توسعهزبان C قابل توسعه است زیرا می تواند به راحتی ویژگی های جدید را تطبیق دهد.

·       اغلب گوشی‌های هوشمند و تبلت‌ها سیستم عامل مبتنی بر زبان C دارند.

·       تقریباً همه میکروکنترلرها چه روی نمایشگر درب میکروویو باشند و چه در مسافت‌یاب داخلی خودرو به کار رفته باشند، به زبان C برنامه‌نویسی شده‌اند.

·       C++، Objective C و #C مستقیماً بر مبنای C ساخته شده‌اند و زبان برنامه‌نویسی «پایتون» (Python) نیز به وسیله آن نوشته شده است.

 

مدیریت حافظه

یکی از مهمترین کارکردهای یک زبان برنامه‌نویسی، فراهم آوردن امکاناتی برای مدیریت حافظه و مواردی است که در حافظه ذخیره می‌شوند. C سه روش مشخص برای اختصاص حافظه برای اشیاء ارائه می‌دهد:

·         تخصیص حافظه استاتیکفضایی برای جسم در زمان کامپایل در دودویی فراهم می‌شود. این اشیاء تا حدودی (یا طول عمر) دارند تا زمانی که باینری که شامل آنها است در حافظه بارگذاری شود.

·         تخصیص خودکار حافظهاشیاء موقتی را می‌توان در پشته ذخیره کرد و پس از خارج شدن از بلوکی که در آن اعلام شده‌است، این فضای به‌طور خودکار آزاد و قابل استفاده مجدد می‌شود.

·         تخصیص حافظه پویابلوک‌های حافظه با اندازه دلخواه را می‌توان در زمان اجرا با استفاده از توابع کتابخانه مانند malloc از منطقه ای از حافظه به نام پشته درخواست کرد. این بلوک‌ها تا زمانی که با استفاده مجدد از عملکرد مجدد کتابخانه یا مجدداً آزاد شوند، برای استفاده مجدد آزاد می‌شوند

·         تخصیص حافظه خودکاراشیا موقتی می‌توانند بر روی پشته ذخیره شوند، این فضای اختصاص داده شده به اشیا به صورت اتوماتیک پس از خارج شدن از بلاکی که اشیا در آنها تعریف شده‌اند، آزاد و دوباره قابل استفاده خواهد بود.

·         تخصیص حافظه پویااندازه‌های اختیاری از بلاک‌های حافظه می‌توانند توسط توابع کتابخانه‌ای همانند تابع (malloc)از ناحیه‌ای از رم موسوم به هیپ در هنگام اجرای برنامه درخواست بشود. این بلاک‌های حافظه تا زمانی‌که توسط تابع (free)به سیستم بازگردانده نشوند در حافظه باقی می‌مانند. برای تخصیص حافظه به صورت پویا (دینامیک) باید آدرس بلوک حافظه‌ای که توسط تابع (malloc)گرفته می‌شود را در یک اشاره گر ذخیره کنیم.

 

تقریبا تمام  زبان های برنامه نویسی مدرن و کتابخانه های محبوب توسط  c/c++ نوشته شده اند و در بسیاری از زبان های فعلی تاثیر گذار هستند، به عنوان مثال:

·         جاوا: هسته کانونی ماشین مجازی جاوا توسط c++ نوشته شده است.

·         پایتون: مترجم پایتون توسط c اجرا می شود.

·         جاوا اسکریپت: موتور جاوا اسکریپت v8 ،این موتور با زبان c++ نوشته شده است.

·         Numby: یکی از محبوب ترین کتابخانه های علمی در پایتون که به طور گسترده ای در AI و ML استفاده می شود، اما ماژول هسته آن توسط C اجرا می شود..

 

پست‌های شغلی در سایت ایندید در سال ۲۰۱۹ (پرتقاضاترین زبان‌های برنامه‌نویسی در بازار کار)، به شرح زیر است:

 ۱. جاوا – ۶۵۹۸۶ شغل

 ۲. پایتون – ۶۱۸۱۸ شغل

 ۳. جاوا اسکریپت – ۳۸۰۱۸ شغل

 ۴. سی پلاس پلاس – ۳۶۷۹۸ شغل

 ۵. سی شارپ – ۲۷۵۲۱ شغل

 ۶. پی‌اچ‌پی – ۱۶۸۹۰ شغل

 ۷. پرل – ۱۳۷۲۷ شغل

تفاوت زبان برنامه نویسی C و ++C در چیست ؟

·         ++C توسعه یافته و در واقع نسخه جدید برنامه نویسی C به حساب می آید

·         در ++C شما قابلیت استفاده مجدد از کد یا Reusable Code را دارید که در C این امکان نیست.

·         زبان C یک زبان Procedural است و ++C یک زبان Object Oriented است

·         زبان C چیزی به نام Virtual Function نداشت اما در ++C توابع مجازی یا Virtual Function ها معرفی شدند

·         در زبان C قابلیت چندوجهی یا Polymorphism وجود نداشت اما در ++C قابلیت Polymorphism اضافه شده است ، Polymorphism مهمترین قسمت از برنامه نویسی OOPS است.

·         در C امکان Operator Overloading وجود نداشت اما در ++C این قابلیت یکی از بهترین امکانات به حساب می آید

·         مبانی برنامه نویسی در C بصورت بالا به پایین است در حالیکه در ++C طراحی برنامه بصورت پایین به بالا انجام می شود

·         متصل کردن داده ها و توابع در C بسیار سخت بود اما در ++C این فرآیند با استفاده از Object ها به راحتی انجام می شود

·         در C شما در هر تابعی می توانستید تابع main را فراخوانی کنید اما در ++C شما نمی توانید اینکار را بکنید.

·         ارث بری در C بی معنی بود اما در ++C فرآیند ارث بری یا Inheritance قابل پیاده سازی است

·         مدیریت خطاها در C بسیار سخت تر از ++C است ، با توجه به اینکه از Class در ++C استفاده می شود

 

کلام آخر:

فناوری های قدرتمند مانند اینترنت اشیا، هوش مصنوعی و اتوماسیون نیز نتوانستند C را از جایگاه برجسته خود خارج کنند. بنابراین به نظر می رسد که این زبان در آینده نیز با ما خواهد بود. در نتیجه یادگیری C به عنوان زبان اصلی هنگام مطالعه سایر زبان های برنامه نویسی اهمیت زیادی دارد.