اگر با ساز و کار شرکت گوگل آشنا باشید، به خوبی از این نکته اطلاع دارید که این شرکت تا چه اندازه در زمینهی توسعه چارچوبها و زبانهای برنامهنویسی وسواس به خرج میدهد. دارت (Dart) یکی از زبانهای برنامهنویسی شیگرا و وبمحوری بود که گوگل توسعه داد.
با اینحال، توسعهدهندگان کمی از این زبان برنامهنویسی استقبال کردند و به همین دلیل هرگز جایگاه یک زبان برنامهنویسی اصلی و تراز اول را به دست نیاورد. بسیاری از برنامهنویسان ترجیح دادند به جای دارت از زبانهای برنامهنویسی قدرتمند دیگری مثل سیپلاسپلاس (++C) و جاوااسکریپت که پیشینه قوی دارند، استفاده کنند.
گو (GO) یکی دیگر از زبانهای برنامهنویسی توسعه یافته توسط گوگل بود که موفقیت چشمگیری به دست آورد. GO یا به عبارت دقیقتر گولنگ (GoLang) به دلیل statically typed و صریح بودن با استقبال گسترده برنامهنویسان روبرو شد. گو یک زبان برنامهنویسی همه منظوره است که شباهت زیادی به زبان برنامهنویسی سی (C) دارد.
اکنون گوگل آماده است تا زبان برنامهنویسی جدیدی که کربن (Carbon) نام دارد را در اختیار برنامهنویسان قرار دهد.
روند توسعه زبان برنامهنویسی کربن
در جریان برگزاری رویداد CPP North 2022که بسیاری از توسعهدهندگان گرد هم آمدند تا در مورد پیشرفتهای زبان برنامهنویسی سیپلاسپلاس صحبت کنند، گوگل آنها را غافلگیر کرد. چندلر کاروت (Chandler Carruth) مدیر فنی زبانهای برنامهنویسی گوگل، حضار را با رونمایی از نسخه آزمایشی، زبان برنامهنویسی جدیدی که کربن (Carbon) نام دارد، شگفتزده کرد.
در زمان نگارش این مقاله، گوگل به شکل رسمی از نسخه آزمایشی این زبان برنامهنویسی رونمایی کرده، اما به اعتقاد تیم توسعهدهندگان، این ظرفیت را دارد تا جایگزین زبان برنامهنویسی سیپلاسپلاس شود. چندلر کاروت در زمان رونمایی از زبان جدید، اعلام کرد که تیم توسعهدهندگان گوگل در تعامل با انجمن برنامهنویسان سیپلاسپلاس هستند تا زبان کربن به جایگزین شایستهای تبدیل شود.
زبان برنامهنویسی کربن چیست؟
کربن (Carbon) یک زبان متنباز تجربی (experimental) است که تیم برنامهنویسان گوگل آنرا توسعه دادهاند و بر این باور هستند که میتواند به عنوان جانشین زبان سیپلاسپلاس مورد استفاده قرار گیرد. زبانی که نحو سادهای برای یادگیری دارد و روی مفاهیمی مثل memory safety، generics و تست ساده نرمافزار، متمرکز است.
لازم به توضیح است که جنریک (generics) در برنامهنویسی عمومی سبکی از برنامهنویسی کامپیوتری است که اجازه میدهد نوع دادهای (عدد صحیح، رشته و غیره و نوعهای دادهای تعریف شده توسط کاربر) به عنوان پارامتری برای متدها، کلاسها و رابطها ارسال شود.
که در آن الگوریتمها بر حسب انواعی که باید بعداً مشخص شوند نوشته می شوند و سپس در صورت نیاز برای انواع خاصی که به عنوان پارامتر ارائه می شوند، نمونه سازی می شوند.
از منظر جایگزینی که کاروت به آن اشاره میکند، کربن را میتوان شبیه به تایپاسکریپت که بر مبنای جاوا اسکریپت توسعه پیدا کرد یا کاتلین که سعی کرد نقاط ضعف جاوا را برطرف کند، در نظر گرفت.
کاروت در جریان برگزاری رویداد فوق به این نکته اشاره داشت که سیپلاسپلاس، زبان برنامهنویسی غالب در توسعه نرمافزارهای کاربردی و مهم است. به بیان دقیقتر، شرکتهایی که به دنبال توسعهی نرمافزارهای سیستمی یا پیچیده هستند، سیپلاسپلاس را در اولویت قرار میدهند. کاروت در بخشی از صحبتهای خود گفت: «بهترین و کارآمدترین روشی که قادر هستید یک تجربه کدنویسی مدرن و هماهنگ با تغییرات روز را در اختیار برنامهنویسان آشنا به زبان سیپلاسپلاس قرار دهید این است که سعی کنید، زبان برنامهنویسی جدیدی را توسعه دهید که مشکلات این زبان را بهبود بخشد. واقعیت این است که بهبود عملکرد سیپلاسپلاس با هدف ارائهی تجربهای منحصر بهفرد به توسعهدهندگانی که از این زبان استفاده میکنند، کار سختی است».
فرآیند توسعه
روند توسعه زبان برنامهنویسی کربن در نوع خود جالب توجه است، اما نکته مهمتر مقایسه این زبان نوظهور با زبانهای برنامهنویسی قدرتمند دنیای فناوری و به ویژه زبان برنامهنویسی سیپلاسپلاس است.
همانگونه که همه میدانیم، زبان برنامهنویسی سیپلاسپلاس به عنوان جایگزین شایسته زبان برنامهنویسی سی (C) به دنیای فناوری اطلاعات معرفی شد، درست به همان صورتی که تایپاسکریپت (TypeScript) به عنوان جانشین جاوااسکریپت (JavaScript)، سوئیفت به عنوان جانشین آبجکتیو سی (Objective C) و کاتلین به عنوان جانشین جاوا معرفی شد. اما جانشین سیپلاسپلاس چه زبانی است؟
درست است که میتوانیم راست (Rust) را با کمی تخفیف جانشین سیپلاسپلاس معرفی کنیم، اما یادگیری آن برای کاربران سخت است و روند توسعه اولیهی پروژهها با این زبان مشکل است. از این رو، هنوز خیلی زود است که Rust به عنوان جانشین سیپلاسپلاس شناخته شود. همچنین، الگوی دستوری، یادگیری و کدنویسی در Rustسخت است و به اعتقاد برخی از برنامهنویسان نباید به عنوان جانشینی برای زبان برنامهنویسی سیپلاسپلاس در نظر گرفته شود. هنگامی که قرار است، یک زبان برنامهنویسی به عنوان جایگزینی برای زبان دیگر شناخته شود، باید فرآیند یادگیری سادهای داشته باشد و کدنویسی به آن ساده باشد.
با توجه به اینکه، طیف گستردهای از توسعهدهندگان در سراسر جهان از زبان سیپلاسپلاس برای انجام کارهای روزمره استفاده میکنند، به نظر میرسد، ما به جانشینی قدرتمند برای غلبه بر مشکلات این زبان در ارتباط با تحولات دنیای فناوری نیاز داریم. یک زبان برنامهنویسی مدرن که قدرت سیپلاسپلاس را همراه با سادگی داشته باشد. با توجه به اینکه، در مقطع فعلی جانشین مشخصی برای سیپلاسپلاس وجود ندارد، این احتمال وجود دارد که کربن بتواند جایگزین این زبان برنامهنویسی قدیمی شود.
زبان برنامهنویسی سیپلاسپلاس با چه تنگناهایی روبرو است؟
کاروت مشکلات و معایب زبان برنامهنویسی سیپلاسپلاس را از زوایای مختلفی بررسی کرده که در ادامه چند مورد مهم اشاره میکنیم.
یکی از مشکلات فعلی سیپلاسپلاس روزگاری یکی از مزایای شاخص آن به شمار میرفتند که امروزه بدهی فنی (Technical Debts) نام دارد و تبدیل به سرباره بزرگی شده است. بدیهای فنی به مجموعه کارهایی اشاره دارند که تیمهای توسعه برای تکمیل یک پروژه نرمافزاری انجام میدهند تا محصول در کوتاهترین زمان در دسترس مشتریان قرار گیرد. با اینحال، در بیشتر موارد مجموعه کارهای انجام شده توسط تیم توسعه در بلندمدت نیازمند اصلاح و بهروزرسانی هستند.
سیپلاسپلاس بر توسعه قابلیتهای کاربردی به همراه سازگاری تاکید خاصی دارد. همچنین، در گذر زمان، ویژگیها و قابلیتهای کاربردی مختلفی به این زبان افزوده شدهاند. با اینحال، بخشی از این ویژگیها باید جایگزین شوند تا این زبان بتواند هماهنگ با تحولات دنیای فناوری به سهولت قابل استفاده باشد. مشکلی که زبان سیپلاسپلاس دارد این است که ویژگیها و قابلیتهای قبلی که امروزه کاربرد چندانی ندارند از آن حذف نشدهاند و باعث شدهاند شاهد ویژگیهای ناقض و تکراری در این زمینه باشیم.
یک جانشین شایسته برای سیپلاسپلاس
تیم توسعهدهنده کربن، زمانی را صرف این مسئله کرد که یک زبان برنامهنویسی جدید بر مبنای چه تمهیداتی قادر است مشکلات رایج سیپلاسپلاس را برطرف کند.
Rust ممکن است یک مثال خوب در این زمینه باشد. Rust به دلیل قابلیتهای کاربردی مختلفی که ارائه میکند به اندازهای موفق ظاهر شده که اگر امکان استفاده از آن در ارتباط با توسعه پروژههای نرمافزاری وجود دارد، نباید در انتخاب این زبان تردید داشت. با اینحال، انتقال اکوسیستم ++C به Rust سخت است.
همانگونه که میدانیم سیپلاسپلاس با هدف برطرف کردن برخی از مشکلات رایج زبان سی توسعه پیدا کرد و توانست با ارائه قابلیتهای زیر زیر مشکلات زبان سی را برطرف کند:
- ایجاد تحولی بزرگ در ساختار زبانهای برنامهنویسی همسو با متدولوژیهای نرمافزار.
- کدنویسی ساده با قابلیت درک سادهتر، به طوری که خواندن و نوشتن کدها ساده باشد.
- تعریف مکانیسمهای قدرتمندی برای تست برنامهها و بهبود امنیت آنها.
- توسعه سریع و مقیاسپذیر برنامههای کاربردی.
- پشتیبانی از سیستم عاملهای مدرن، معماریها و محیطهای سختافزاری مختلف.
- دستیابی به سطح بهتری از قابلیت همکاری و انتقال کدهای سیپلاسپلاس.
با این وجود، همانگونه که اشاره کردیم، سیپلاسپلاس در گذر زمان با مشکلات مختلفی در زمینه قابلیت نگهداری از ویژگیهای قدیمی روبرو شد که بدهیهای فنی را پدید آورد. اکنون کربن، قصد دارد این مشکلات را برطرف کند.
زبان برنامهنویسی کربن به دنبال چیست؟
اینگونه به نظر میرسد که گوگل به دنبال اهداف مختلفی در زمینه توسعه زبان برنامهنویسی کربن است. از دلایل مهم در این زمینه به موارد زیر باید اشاره کرد:
- گوگل به دنبال آن است تا کربن را به اندازهای قدرتمند کند تا در آینده به عنوان یک زبان برنامهنویسی بزرگ در توسعه پروژههای نرمافزاری مختلف مورد استفاده قرار گیرد.
- کربن بر مبنای سهولت در نوشتن و خواندن کدها توسعه پیدا کرده است. نسخهای که روی گیتهاب منتشر شده و در دسترس همگان قرار دارد نشان میدهد، این زبان برنامهنویسی شبیه به پایتون امکان ساخت نمونههای اولیه در کوتاهترین زمان را فراهم میکند و پشتیبانی خوبی از مقیاسپذیری به عمل میآورد.
- کربن قرار است از تمام پلتفرمها و سیستم عاملهای مدرن پشتیبانی کند.
- مجهز به یک مکانیزم تست ایمن است و به برنامهنویسان اجازه میدهد تستهای نرمافزار را با هدف بهبود عملکرد کدها به بهترین شکل انجام دهند.
- گوگل بر این نکته تاکید دارد که کربن قرار است، بالاترین سطح از عملکرد را ارائه کند.
اگر برنامهنویسی هستید که سابقه کار چند ساله با زبان برنامهنویسی سیپلاسپلاس را دارد، به احتمال زیاد مشتاق هستید تا ببینید جانشین سیپلاسپلاس قرار است به چه صورتی معایب این زبان برنامهنویسی قدیمی را برطرف کند. گوگل در جریان برگزاری رویداد فوق به این نکته اشاره داشت که زیربنای این زبان مبتنی بر سیپلاسپلاس و گولنگ است.
در زمان نگارش این مقاله، کربن در مرحله آزمایشی قرار دارد و قرار است به زودی به مرحله بتا وارد شود. برای دریافت اطلاعات بیشتر در ارتباط با کربن و نحوه کار با آن به آدرس گیتهاب این زبان به نشانی official GitHub carbon مراجعه کنید.
کربن با چه وعدههایی به دنیای فناوری وارد شده است؟
کربن تاکید زیادی بر سهولت خواندن و نوشتن کدها دارد. به طوری که نحو سادهای در اختیار برنامهنویسان قرار دهد تا بتوانند زمان کمتری را صرف یادگیری یا تحلیل کدهایی کنند که برنامهنویسان دیگر نوشتهاند. به طور کلی، کربن به دنبال رسیدن به اهداف زیر است:
- سازماندهی ماژولار کدها.
- ارائه نحو سادهای در کدنویسی.
- کربن میخواهد یک زبان جانشین باشد، نه تلاشی برای تکامل تدریجی سیپلاسپلاس.
- فرآیند توسعهای با تاکید بر اصول، فرآیندها و ابزارهای منبع باز داشته باشد تا مشارکت در توسعه آن سادهتر و شفافتر باشد.
- داشتن یک ساختار حاکمیتی روشن که بتواند در صورت نیاز به سرعت تصمیمگیری کند.
- گسترش اکوسیستم با ابزارهایی که تجربه توسعه غنی (کامپایلر، کتابخانه استاندارد، ابزارهای IDE) و ارتقای مبتنی بر ابزار را فراهم میکنند.
- پر کردن شکاف اکوسیستم سیپلاسپلاس از طریق ارائه یک مدیر بسته داخلی.
کربن چه قابلیتهایی در اختیار توسعهدهندگان قرار میدهد؟
از مهمترین ویژگیهایی که این زبان ارائه میکند به موارد زیر باید اشاره کرد:
- این زبان کلمات کلیدی خاصی در زمینه معرفی مولفههای مختلف مثل var برای تعریف متغیرها و fn برای تعریف توابع ارائه میکند.
- پارامترهای ورودی توابع فقط خواندنی هستند و امکان تغییر آنها وجود ندارد.
- اشارهگرها دسترسی غیر مستقیم به متغیرها را ارائه میکنند. در این حالت، امنیت برنامهها به میزان قابل توجهی بهبود پیدا میکند.
- فضای نام (NameSapce) در زبان کربن به شکل محلی (local) مورد استفاده قرار میگیرند.
- اعضای عمومی وضعیت پیشفرض دارند. تیم توسعهدهنده میگوید: «با توجه به اینکه شما بیشتر توابع عمومی را در واسطهای برنامهنویسی کاربردی (API) میخوانید، طبیعی است که آنها باید بالاترین سطح از قابلیت دید را داشته باشند.
یک برنامه نوشته شده به زبان کربن، نحوی شبیه به کدهای زیر دارد:
// Carbon:package Geometry api; // local namespace
import Math; // library importclass Circle {
var r: f32;
}fn PrintTotalArea(circles: Slice(Circle)) {
var area: f32 = 0;
for (c: Circle in circles) {
area += Math.Pi * c.r * c.r;
}
Print("Total area: {0}", area);
}
Carbon Programming Language Explorer
Carbon Explorerیک نمونه آزمایشی از کامپایلری است که قادر به اجرای نمونه کدها است و توانایی تجزیه و تحلیل دقیق کدهای کربن را دارد. برای اطلاعات بیشتر در ارتباط با این مفسر به آدرس Carbon Explorer مراجعه کنید.
استراتژی گوگل در زمینه کربن چیست؟
درست است که گوگل از کربن حمایت مالی گستردهای به عمل آورده، اما در بلندمدت قصد دارد میزان مشارکت را به 50 درصد کاهش دهد و سعی خواهد کرد مالکیت پروژه را به یک بنیاد نرمافزاری غیرانتفاعی واگذار کند. سازمانی که برنامهنویسان به شکل داوطلبانه در روند توسعه آن مشارکت داشته باشند.
کلام آخر
هنوز برای قضاوت زود است و با توجه به اینکه هنوز نسخه رسمی این زبان منتشر نشده، به سختی میتوان در مورد آن اظهار نظر کرد. به نظر میرسد توسعهدهندگان نسبت به کربن خوشبین هستند. بررسیهای اولیه نشان میدهند که بیشتر توسعهدهندگان دوست دارند کربن و سیپلاس قابلیت همکاری بالایی داشته باشند. درست مشابه آن چیزی که در ارتباط با کاتلین و جاوا شاهد آن هستیم.
در مورد این مسئله که کربن در آینده جایگزین سیپلاسپلاس خواهد شد، تردیدهایی وجود دارد. برخی استدلال میکنند که کربن در جایگاه بالاتری قرار خواهد گرفت، اما به طور گسترده مورد استفاده قرار نمیگیرد. اعلانهای غیرقابل تغییر از طریق بهکارگیری let دستیافتنی هستند که ممکن است برای توسعهدهندگانی که از جاوا اسکریپت به این حوزه وارد میشوند، گیجکننده باشد. با این حال، توسعهدهندگان سویفت مشکلی در این زمینه نخواهند داشت.
در مجموع باید صبر کنیم تا ببنیم نسخه اصلی به چه صورتی در دسترس همگان قرار خواهد گرفت و چه محیطهای توسعهای از آن پشتیبانی خواهند کرد.