فروش ویژه سرور اختصاصی
ماکرونت : گوگل کربن جایگزین زبان سی پلاس پلاس
- مرداد 22, 1401
- 0
- ملیحه ایزی
در آخرین کنفرانس CppNorth در ماه جولای 2022، گوگل زبان برنامه نویسی کربن را به جای ++c خود منتشر کرد. کربن 1.0 تا حدود 2024-2025 در دسترس خواهد بود. گوگل در راه اندازی خود از کربن به عنوان یک جانشین طبیعی در الگوی تکامل زبان یاد کرد:
مایکروسافت جاوا اسکریپت را برای ایجاد TypeScript بهبود بخشید (اگرچه این موضوع اغلب در جامعه برنامه نویسی مورد بحث است)، گوگل برای ایجاد Kotlin جاوا را بهبود بخشید، اپل برای رسیدن به سوئیفت، Objective C را بهبود بخشید اگر مشاهده کنید در تمام موارد فوق، تلاشهایی در جهت بهبود بوده است هم طراحی تازهای دارند و هم سرعت کار توسعه دهندگان را بالا میبرند.
آیا Rust را میتوانیم جایگزین ++C بدانیم؟ چرا که نه! ما میتوانیم راست(Rust) را کاملا به عنوان جایگزین ++C بدانیم اما یادگیری آن برای کاربران بسیار دشوار است و این زبان در مراحل اولیه توسعه خود قرار دارد. بنابراین، خیلی زود است که Rust را جایگزین ++C بدانیم و بسیار سخت است که Rust جایگزین زبان قدرتمندی مثل ++C شود. گوگل قصد دارد این کار را برای ++C با کربن انجام دهد.
چرا Google Carbon ساخته شد؟
برخی ممکن است فکر کنند توسعه کربن که در فضای باز انجام می شود، به دلیل وابستگی بیش از حد به جامعه ای از افراد، مسیری مشابه دارت گوگل را دنبال می کند. با این حال، دلیلی برای بدبین بودن نسبت به کربن وجود ندارد. در اینجا، هدف گوگل ریشه در تکامل ++C دارد، وظیفه ای که به دلیل تکامل بسیار بوروکراتیک باستانی ترین زبان سطح برنامه در جهان به مسیری سخت تبدیل شد. برای دستیابی به این هدف، گوگل کربن را در مراحل اولیه توسعه باز کرده است (انتظار 1.0 در 2024-2025).
++C همچنان زبان برنامه نویسی غالب برای نرم افزارهای حیاتی عملکرد، با پایگاه های کد و سرمایه گذاری های عظیم و رو به رشد است. با این حال، همانطور که در بالا ذکر شد، به دلیل انباشته شدن چندین دهه بدهی فنی، در تلاش است تا نیازهای توسعه دهندگان را بهبود بخشد و برآورده کند. بهبود تدریجی ++C بسیار دشوار است، هم به دلیل خود بدهی فنی و هم به دلیل چالشهایی که در فرآیند تکامل آن وجود دارد. بهترین راه برای رسیدگی به این مشکلات این است که از به ارث بردن مستقیم میراث C یا++C خودداری شود و در عوض با پایههای زبانی مستحکم و جدید مانند سیستم ژنریک مدرن، سازماندهی کد مدولار، و نحو ساده و منسجم شروع کنید.
کربن اساساً یک رویکرد زبان جایگزین است و نه تلاشی برای تکامل تدریجی ++C.
سیر تکاملی ++c
زبان سی پلاس پلاس در سال ۱۹۸۳ پا به عرصه گذاشت. این نام منسوب به ریک ماسکیتی (اواسط ۱۹۸۳) است و برای اولین بار در دسامبر سال ۱۹۸۳ به کار برده شد. در طول مدت تحقیق این زبان بنام «C جدید» و بعدها «C با کلاس» خوانده شد. در علوم کامپیوتر هنوز هم C++ به عنوان ابرساختار C شناخته میشود. آخرین نام از عملگر ++ در زبان C (که برای افزایش مقدار متغیر به اندازهٔ یک واحد بکار میرود) و یک عرف معمول برای نشان دادن افزایش قابلیتها توسط + ناشی گشتهاست. با توجه به نقل قولی از استراستروپ: «این نام ویژگیها تکاملی زبان در C را نشان میدهد.»
به لحاظ تاریخی برنامه نویسان در انتظار تکامل و جایگزینی برای زبان برنامه نویسی ++c هستند.
در دهه 90، Sun Microsystems با جاوا آمد. نقطه فروش اصلی آن اجرای کراس پلتفرم در داخل یک ماشین مجازی برای هوشمندسازی میلیون ها دستگاه بود. با حفظ OOP مشابه C++ اما مدیریت بد اشاره گر در ++C را حذف کرد. همچنین جاوا از یک زمانبندی عالی برخوردار بود و به همین علت به زبان اصلی سرورها تبدیل شد.
در عرض یک دهه، جاوا اسکریپت برادر نحوی جاوا، وب را در اختیار گرفت. سفر جاوا اسکریپت حتی پس از همتای سمت سرور آن Node.js به اوج نرسید و هنوز در حال رشد است.
در تمام آن دوران پیدا کردن زبانی برای جایگزینی با ++C انتخاب اصلی بود. جاوا با داشتن زمان اجرای بهینه، garbage collector، برطرف کردن مشکل مدیریت حافظه گزینه خوبی بود اما به دلیل معماری نامناسب نتوانست به عملکرد اصلی ++c دست یابد. این زبان همچنان در هسته سیستم های تجاری و غیر تجاری که به طور موازی در حال توسعه بودند قرار داشت:
– گوگل، فیسبوک، آمازون، توییتر و بینگ – همه منطق برنامه اصلی خود را با استفاده از همین زبان نوشته اند.
– سیستم عامل اندروید بر روی هسته لینوکس اجرا می شود که به زبان C نوشته شده است.سیستم عامل مک و iOS از شاخه های یونیکس مبتنی بر BSD هستند که آن نیز به زبان C نوشته شده است.
– سیستم های کنترل نسخه Git و Subversion به زبان C نوشته شده اند.
– همه پایگاه های داده (Oracle، Postgres، MySQL، IBM Db2، SQL Serverو …) به زبان C/C++ نوشته شده اند.
بدلیل عملکرد بینظیر C/C++ است که همچنان رتبه دوم را در فهرست برگزیدهترین زبانهای برنامهنویسی کسب کرده است. (سال گذشته، شماره 1 بود، اما امسال با پایتون جایگزین شد.) با این حال، مشکلات C/C++ بوده که جامعه برنامه نویسی را به سمت تلاش برای جایگزینی آن با زبان برنامه نویسی بعدی همراهی می کند.
مشکلات و معایب زبان برنامه نویسی سی پلاس پلاس(++C)
1- پیچیدگی های مربوط به سینتکس و نحو : قوانین سختی که در استفاده از سینتکس دارد منحنی یادگیری این زبان را تند کرده است. حتی برنامه نویسان باتجربه از بازآفرینی چنین کدهایی در پایگاه های کد خود می ترسند.
وقتی پارس کردن یک زبان شهودی نیست، توسعه ابزارهایی که از آن پشتیبانی می کنند دشوار است. وجود IDEهای متنوع، سلاح اصلی برنامه نویسان مبتدی در برابر یک زبان برنامه نویسی بشمار میرود که برای زبان ++C به دلیل نحو آن حداقل است. ویژوال استودیو مایکروسافت برای مدت طولانی بر این فضا حکومت می کرد، اما اختصاصی بود و این اختصاصی بودن از نظر مقرون به صرفه بودن یا ویژگی ها نمی توانست چیزهای زیادی را ارائه دهد.
2- اشاره گرها: وقتی صحبت از اشاره گرها در ++C می شود، در مقایسه با موضوعات دیگر، تصور بسیار سختی است. اشاره گرهایی که در ابتدا مقدار دهی نشوند ممکن است منجر به خرابی سیستم شود. در صورت قرار دادن مقادیر اشتباه در حافظه، ممکن است تخریب حافظه نیز رخ دهد. به طور خلاصه، اشکال زدایی باگ های اشاره گر بسیار دشوار است و از این رو یکی از معایب اصلی C++ است.
کد بالا جهت نشان دادن حالت کلی است که به آن Dangling pointer می گویند، a یک پوینتر است که برایش یک قسمت از حافظه را گرفته ایم و به آن اختصاص داده ایم و در خط بعدش آدرس آن قسمت از حافظه را که در a قرار گرفته است را در اشاره گر b قرار می دهیم یعنی b هم به همان قسمت از حافظه اشاره می کند. در خط بعد حافظه ای را که به a داده ایم را آزاد می کنیم یعنی آن حافظه دیگر بخشی از برنامه ی ما نیست!
ولی اینجا مشکل Dangling pointer رخ می دهد ، b هم چنان دارد به آن قسمت از حافظه اشاره می کند در حالی که آن قسمت از حافظه دیگر بخشی از حافظه ای که برای برنامه گرفته شده است نیست و ما بعد از delete a نمی دانیم چه اتفاقی برای آن قسمت از حافظه افتاده است. که ممکن است موجب ارور و بسته شدن برنامه شود و یا اینکه موجب این شود که یک سری اطلاعات متفاوت از آن چیزی که ما مد نظرمان است مورد دسترسی قرار بگیرد.
یا این یک خط کد سی پلاس پلاس را ببینید:
این خط مربوط به یک برنامه است. این خط در یک تابع قرار دارد که بار ها و بارها فراخوانی می شود، ,ولی اگر یادتان برود تابع حافظه ای را که استفاده کردید بعد از تمام شدن کار آزاد کنید
باعث می شود که برنامه ای که باید ۵۰MB حافظه را اشغال کند ۷۰۰MB حافظه بگیرد! از این دست مشکلات در رابطه با مدیریت حافظه در سی پلاس پلاس زیاد است! ولی برای بعضی از آن ها درمان وجود دارد ! برای رفع بعضی از این مشکلات می توان از smart pointer ها (اشاره گر های هوشمند) استفاده کرد، که از ویژگی های جدید سی پلاس پلاس در استاندارد C++ 11 است
3- عدم وجود garbage collection: این زبان از garbage collection پشتیبانی نمیکند، به این معنی که تمام قدرت مدیریت حافظه داده در دست کاربر است. عدم وجود همین باعث می شود که داده های اضافی ذخیره شوند و فضای حافظه را اشغال کنند. شما باید خودتان حافظه را مدیریت کنید و اگر به حافظه پویا dynamic memory نیاز داشته باشید باید خودتان آن را از سیستم عامل بگیرید.
4- ناامن : به معنای واقعی این زبان امن نیست. وجود اشاره گرها، متغیرهای سراسری و … دلیل اصلی این مسائل امنیتی است. یعنی فقط با استفاده از بخشی از حافظه به عنوان نوع نادرست، می توان کل برنامه را خراب کرد.
5- عدم پشتیبانی ازthread: این یک مفهوم نسبتاً جدید در ++C است که در ابتدا وجود نداشت. اکنون این زبان قادر به پشتیبانی از توابع لامبدا است.
6- عدم تعریف عملگر سفارشی: در بسیاری از زبان های برنامه نویسی مانند جاوا، ما می توانیم عملگرهایی را برای عملیات خاص تعریف کنیم، اما در این زبان امکان پذیر نیست. ما فقط می توانیم اپراتورهای جدید را با استفاده از بازتعریف اپراتورهای قبلی تعریف کنیم.
به طور خلاصه:
با توجه به منحنی یادگیری تند آن، این زبان توسعه دهندگان کمتری دارد و حتی توسعه دهندگان کمتر به آن تسلط دارند. حفظ کدهای بزرگ، قدیمی و پیچیده بر دوش توسعه دهندگانی است که کمتر از حد متوسط هستند. کدهای پر از اشکال چالش منحنی یادگیری تندتری را برای نسل بعدی کدنویس ها ایجاد می کند و این چرخه معیوب ادامه دارد.
برنامه نویسان نمی خواهند خود را در موقعیتی قرار دهند که بین عملکرد خوب و سادگی سینتکس یکی را انتخاب کنند. چون هر دو مورد در برنامه نویسی اهمیت بسیار زیادی دارد. پس دو راه برای رسیدن به آن وجود دارد:
– از آنجایی که ++C عملکرد خوبی دارد ولی سینتکس خوب نیست پس باید آن را بهبود بخشید.
– یا اینکه کلا آن را با زبان جدیدی جایگزین کنیم که مشکلات مربوط به مدیریت حافظه را نداشته باشد، اما همچنان به اندازه C++/C کارایی داشته باشد.
این زبان با توجه به اینکه از سال 1983 آمده است با توجه به زبانهای دیگر نیز تکامل و جایگزینی آن امری اجتناب ناپذیر است. برنامه ها زمانی از بین میروند که برنامه نویسان با مدیریت بد حافظه روبرو می شوند. بر اساس محافظهکارانهترین تخمین مایکروسافت که در اوایل سال 2004 انجام شد، خطاهای مربوط به حافظه هر مورد حدود 250000 دلار هزینه در بر داشته است. در نتیجه این خسارت مالی بزرگ، مایکروسافت به سرعت شروع به انتقال کدهای مهم خود از C/C++ به Rust کرد. Rust که توسط موزیلا در سال 2010 شروع به کار کرد، بزرگترین حامیان خود را در تمام شرکتهای پیشرو فناوری دارد:
– مایکروسافت، آمازون، گوگل، فیسبوک و اپل.
-AWS همچنین کد استقرار تابع لامبدا را با استفاده از Rust اجرا می کند.
– فیس بوک نیز از Rust استفاده می کند.
– گوگل قصد داشت از Rust در کرنل لینوکس استفاده کند که اندروید را قدرتمند می کند.
کربن گوگل از نظر نحوی شباهت زیادی با Rust دارد. گوگل هنگام اعلام کربن، از Rust انتقادی نکرده است و حتی در کنفرانس CppNorth (توسعهدهنده اصلی کربن) به کسانی که از Rust استفاده میکنند توصیه کرده است استفاده از آن را ادامه دهند. در واقع Carbon برای آن دسته از توسعه دهندگانی است که قبلاً پایگاه های کد بزرگی در ++C داشته که تبدیل آنها به Rust امری دشوار است. از این نظر، میتوان انتظار داشت که کربن در سطح مشابهی با Rust قرار گیرد (سینتکس شباهتهای زیادی با Rust دارد).
بررسی توسعه زبانهای برنامه نویسی ارائه شده توسط گوگل
– Golang گوگل موفقیت آمیز بود. اغلب به عنوان سریعترین زبان توسعه نحو مطرح می شود و یکی از ساده ترین ها برای یادگیری است. از زمان آغاز به کار آن تا به الان، به طور مداوم در شاخص محبوبیت TOIBE افزایش قابل توجهی داشته است.
Flutter یک واسط کاربری کیت توسعه نرمافزار متنباز است که توسط گوگل طراحی و ساخته شدهاست. فلاتر برای توسعه برنامههای کاربردی برای سکوهای اندروید، آیاواس، مایکروسافت ویندوز، مکاواس، لینوکس، گوگل فیوشا و وب استفاده میشود. در iOS به خوبی اندروید نبود، بنابراین اغلب وجود چند پلتفرمی آن را باطل کرد. به عنوان بخشی از ابتکار عمل چند پلتفرمی خود، Flutter، گوگل دارت را ارائه کرد. با حمایت جامعه عظیم، پذیرش سریعتری داشت. با این حال، برخی از ادعاهای عملکرد فلاتر ثابت ماند. نسخه اولیه دارت فاقد ویژگی های اساسی مانند هش برای مدت طولانی بود.به دلیل مدیریت ضعیف جامعه آن همراه با وابستگی شدید، پیشنهادات iOS Dart در مقایسه با پلتفرم بومی فاقد ویژگیهای بسیاری بود، بنابراین دلیل وجود آن به عنوان یک چارچوب توسعه واقعاً چند پلتفرمی را از بین برد. علیرغم اینکه شرکت های بزرگ آن را پذیرفتند، Dart هرگز به مهره سنگین وزنی تبدیل نشد که گوگل آن را تبلیغ کند، و Flutter به عنوان یک تلاش اجتماعی در راستای React Native باقی ماند.
ویژگی های Google Carbon
کربن از موارد زیر پشتیبانی می کند:
ژنریک ها و قالب ها
تاپل ها
قابلیت همکاری و انتقال کد از ++C
هدف کربن این نیست:
سازگار با عقب باشد
زبانی با ABI پایدار باشید
از پلتفرم هایی پشتیبانی کند که نمی توانند کامپایلر و پیوند دهنده خود را در کنار زبان به روز کنند.
مثال معروف سلام دنیا! در زبان کربن
کدها در کربن در مقایسه با ++C
شروع کار با Google Carbon
چگونه بدون نصب گوگل کربن با آن کار کنیم؟
Compiler-Explorer یک IDE آنلاین است که در میان بسیاری از زبان های دیگر، Google Carbon را پشتیبانی می کند. میتوانید برنامههای کوچکی را کامپایل، بسازید و اجرا کنید، و زمانهای اجرای زبانهای مختلف را با Google Carbon مقایسه کنید.
نتیجه
توسعه دهندگان گوگل در حین نامگذاری جدیدترین زبان خود، ممکن است فکر کرده باشند: کربن به سیاره نیرو می دهد و با همین معنی خواسته اند با استفاده از کر بن به زبان ++C نیرو ببخشند. با پیروی از این خط فکری، Google Carbon نه تنها قصد دارد یک جایگزین ایمن باقی بماند، بلکه یک جایگزین بسیار کارآمد است.
«ملیحه ایزی»، فارغالتحصیل مقطع کارشناسی ارشد مهندسی کامپیوتر، گرایش نرم افزار است.
تمامی حقوق برای ماکرونت محفوظ است.