1 1 1 1'>کربن (Carbon Programming Language) یکی از جدیدترین زبانهایی به حساب میآید که اخیراً توسط شرکت 1 معرفی شده است. این شرکت بهصورت مداوم به ارائه پلتفرمها و زبانهای برنامه نویسی جدید با قابلیتها و ابزارهای نوین و کارامد میپردازد. زبان کربن گوگل، جایگزینی برای زبان برنامه نویسی C++ محسوب میشود. مقاله حاضر، با محوریت پاسخ به این پرسش که «زبان برنامه نویسی کربن چیست» و به منظور ارائه دلیل ظهور این زبان و شرح ویژگیهای آن نوشته شده است و دستورات مقدماتی این زبان برنامه نویسی به همراه مثال توضیح داده میشوند.
توسعه دهندگان گوگل، زبان برنامه نویسی آزمایشی جدیدی را با نام «کربن» (Carbon) ارائه کردهاند. این زبان میتواند به عنوان زبانی جایگزین برای زبان برنامه نویسی C++ محسوب شود که از امکانات جدیدی نظیر امنیت حافظه و «برنامه نویسی همگانی» (Generic) پشتیبانی میکند.

زبان کربن گوگل مانند زبانهای برنامه نویسی Typescript و Kotlin است که به منظور بهروزرسانی و افزایش قابلیتهای زبانهای جاوا اسکریپت و جاوا ارائه شدند. این زبان اخیراً (در سال 2022) برای نخستین بار در کنفرانس CCP North تورنتو توسط «چندلر کاروث» (Chandler Carruth) معرفی شد. در ادامه، به نقاط ضعف زبان برنامه نویسی C++ و اهداف زبان جایگزین آن، یعنی زبان کربن، پرداخته میشود.
زبان برنامه نویسی C++ در سال 1982 ساخته شد و در سال 1985 در دسترس عموم قرار گرفت. این زبان، به عنوان یکی از زبانهای 1منظوره تلقی میشود که دارای ویژگیهای مختلفی مانند حساس بودن به حروف بزرگ و کوچک و «اشارهگرها» (Pointers) است و از شیگرایی پشتیبانی میکند. همچنین، این زبان دارای انواع مختلفی از کتابخانهها است که با استفاده از آنها میتوان عملیات مختلفی را بر روی دادهها اعمال کرد.

زبان C++ به عنوان جایگزینی برای زبان برنامه نویسی C محسوب میشود. این زبان یکی از زبانهای پرکاربرد برای توسعه پروژههای نرمافزاری است و اهدافی به منظور بهبود این زبان در نظر گرفته شده است که عبارتاند از:
با این حال، در مسیر توسعه زبان C++، مشکلات جدی وجود دارد. یکی از مهمترین مسائل چالشبرانگیز این زبان، «بدهیهای فنی» (Technical Debts) است که در طی سالیان بسیار بر روی هم انباشه شدهاند. بدهیهای فنی شامل مجموعه اقداماتی هستند که تیم برنامه نویسی به منظور طراحی برنامه یا بخشی از پروژه انجام میدهند تا محصول هر چه سریعتر در اختیار کاربران و مشتریان قرار گیرد، اما اغلب باید این اقدامات در بازه زمانی دیگری اصلاح یا بهروزرسانی شوند.
همچنین، در طی دورانی که زبان C++ مورد استفاده عموم قرار گرفت، ویژگیها و قابلیتهای جدیدی به این زبان اضافه شد. بخشی از این ویژگیها باید جایگزین قابلیتهای قبلی این زبان میشد. با این حال، ویژگیها و قابلیتهای قبلی از این زبان حذف نشدهاند و در حال حاضر، ویژگیهای ناقص و تکراری در این زبان وجود دارند.
تیم برنامه نویسی زبان کربن زمان بسیاری را صرف طراحی این زبان کردهاند تا مشکلات موجود در زبان برنامه نویسی C++ را در این زبان حل کنند. به عبارتی، زبان برنامه نویسی کربن به منظور ایجاد تحول در قابلیتهای برنامه نویسی و توسعه نرمافزار به وجود آمد. هدف برنامه نویسان این زبان، ارائه زبانی با «نحو | سینتکس» (Syntax) ساده است، به گونهای که نوشتن و خواندن قطعه کدهای برنامه به شکل ساده انجام شود.

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

دورههای آموزش آنلاین یکی از بهترین روشهای یادگیری مهارتهای مختلف برای تمامی علاقهمندان محسوب میشوند. افراد میتوانند در هر مکان و در هر ساعت از شبانه روز به یادگیری مطالب جدید بپردازند و فیلمهای آموزشی را چندین بار مشاهده کنند تا به درک جامعی از مفاهیم دست پیدا کنند. در وب سایت فرادرس، کاربردیترین و جامعترین مجموعههای آموزش در حوزه برنامه نویسی فراهم و گردآوری شده است تا افراد مشتاق به این حوزه بتوانند از آموزشهای کامل و تخصصی این حیطه بهرهمند شوند.
محتوای این فیلمهای آموزشی به نحوی فراهم شده است که مباحث تئوری و عملی را از ابتداییترین موضوعات تا مفاهیم پیچیده حوزه برنامه نویسی را شامل میشوند. بدینترتیب، افراد با سطح دانش و مهارت متفاوت در زمینه برنامه نویسی میتوانند از این آموزشها با توجه به نیاز خود بهرهمند شوند. در تصویر فوق تنها تعداد کمی از دورههای موجود در این مجموعه آموزشی به عنوان نمونه نشان داده شدهاند.
زبان برنامه نویسی کربن سازوکار امنی را برای انجام تست برنامههای نرمافزاری فراهم کرده که همین امر ساختار برنامه نویسی را بهبود بخشیده است. افزونبراین، میتوان قطعهکدهای زبان C++ را در این زبان اجرا کرد. همچنین زبان برنامه نویسی کربن از ابزارها، پردازشها و اصول برنامه نویسی بهصورت «دسترسی باز» (Open Source) پشتیبانی میکند و دارای «ساختار حاکمیت» (Governance Structure) شفافی برای توسعه زبان برنامه نویسی است.
بهعلاوه، این زبان همانند سایر زبانهای برنامه نویسی دارای ابزارهایی مانند «محیط توسعه یکپارچه» (Integrated Development Environment | IDE)، کتابخانههای استاندارد و کامپایلر است. نحو زبان کربن گوگل ویژگیهای مختلفی دارد که در ادامه به برخی از مهمترین آنها اشاره شده است:
به منظور آشنایی مقدماتی با زبان برنامه نویسی کربن گوگل میتوان به برخی از ابزارها و قابلیتهای این زبان بهطور کلی اشاره کرد. این زبان دارای ابزارهای مختلفی است که قابلیتهای مختلفی را در اختیار برنامه نویسان میگذارند. برخی از این ابزارها در ادامه فهرست شدهاند:
export PATH="$(brew --prefix llvm)/bin:${PATH}"
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon
در نهایت خروجی قطعه کد به صورت زیر مشاهده میشود:

در حال حاضر، نسخه آزمایشی زبان برنامه نویسی کربن را میتوان استفاده کرد و نسخه رسمی و اولیه آن در دسترس قرار نگرفته است. با این حال، میتوان به توضیح قطعه کدهای سادهای از این زبان پرداخت و دستورات ساده آن را بررسی کرد. فایلی که در مثال قبل با نام format_only.carbon به منظور چاپ عبارت Hello World! مورد استفاده قرار گرفت، حاوی قطعه کد زیر است:
package ExplorerTest api;
fn Main() -> i32 {
var s: auto = "Hello world!";
Print(s);
return 0;
}
دستورات شرطی زبان برنامه نویسی کربن مشابه با دستورات شرطی در سایر زبانهای برنامه نویسی به خصوص زبان C++ هستند. در این زبان، قطعه کدهای بدنه دستورات شرطی در بین دو علامت {} u200aقرار میگیرند. در ادامه، نمونهای از دستورات شرطی در زبان برنامه نویسی کربن گوگل ملاحظه میشود.
fn AgeLogger(var age: i32) {
if(age == 0){
Print("Carbon is {0} years old", age);
} else {
Print("Carbon is not {0} years old", age);
}
}
کاربرد حلقه While در زبان کربن نیز مانند کاربرد این حلقه در سایر زبانهای برنامه نویسی است. تا زمانی که مقدار عبارت مقابل این دستور برابر با True باشد، دستورات داخل حلقه اجرا خواهند شد. در ادامه، مثالی از این حلقه در زبان کربن ملاحظه میشود.
var x: i32 = 0;
while (not (x == 3)) {
Print("I am number {0}", x);
x = x + 1;
}
Print("Done!");
خروجی قطعه کد فوق به شکل زیر است:

در زبان برنامه نویسی کربن، از حلقه For نیز همانند سایر زبانهای برنامه نویسی به منظور تکرار یک سری از دستورات به تعداد دفعات معین استفاده میشود. در مثال زیر، نحوه استفاده از این حلقه در زبان کربن گوگل ملاحظه میشود.
var names: [String;3] = ("str1", "str2", "str3");
for (var name: String in names) {
Print(name);
}
لازم به ذکر است که درون حلقهها میتوان از دو دستور continue u200aو break u200aاستفاده کرد. دستور continue باعث میشود گام بعدی حلقه اجرا شود و اجرای حلقه یک واحد پیش برود. از دستور break نیز به منظور متوقف کردن اجرای حلقه استفاده میشود.
دستور Match به منظور بررسی چندین حالت یک عبارت استفاده میشود. در ادامه، نحوه کاربرد این دستور در قالب مثال ارائه شده است.
fn TheMatcher() -> String {
Print("I am here");
var x: i32 = 2;
match (x) {
case (0) => {
return "Matching zero";
}
case (1) => {
return "Matching one";
}
case (2) => {
return "Matching two";
}
default => {
return "Matching none";
}
}
}
در مثال بالا مقدار متغیر x u200aتوسط هر یک از دستورات مقابل هاcase u200a-ها مورد بررسی قرار میگیرد و چنانچه مقدار این متغیر برابر با مقدار مقابل دستور case u200aباشد، قطعه کد مربوط به بدنه آن case u200aاجرا میشود. بخش default u200aنیز زمانی اجرا میشود که مقدار متغیر x برابر با هیچ یک از عبارات مقابل دستورات case نباشد.
زبان کربن گوگل مانند سایر زبانهای برنامه نویسی از انواع ساختار داده به منظور ذخیرهسازی دادهها استفاده میکند. در زیر، فهرستی از ساختارهای داده این زبان ملاحظه میشود:

همچنین، این زبان از شیگرایی نیز پشتیبانی میکند. از آنجا که به منظور پیادهسازی اصول شیگرایی نیاز به تعریف کلاس است، بدینترتیب، با استفاده از این زبان میتوان کلاس و توابع مختلف تعریف کرد. در ادامه، به توضیح هر یک از ساختارهای ذکر شده در زبان کربن گوگل به همراه مثال پرداخته میشود.
ساختار داده تاپل در زبان کربن به منظور ذخیرهسازی مقادیر با نوع داده مختلف استفاده میشود. طول این نوع ساختار داده ثابت است و نمیتوان پس از تعریف و مقداردهی اولیه تاپل، اندازه آن را در ادامه برنامه تغییر داد. به منظور دسترسی به مقادیر تاپل، میتوان از اندیس استفاده کرد.
در قطعه کد زیر، مثالی از تاپل در زبان کربن گوگل ملاحظه میشود. در این مثال، به متغیری با نام x u200aساختار داده تاپل با مقادیر (0, 1, 2, "omega") u200aتخصیص داده شده است.
fn UseStruct() {
var data: auto = {.x_var = 3, .b_var = 2, .m_slope = 7};
var y: i32 = data.m_slope * data.x_var + data.b_var;
Print("y: {0}", y);
}
// output:
y: 23
در زبان کربن از ساختار داده آرایه نیز به منظور ذخیره مقادیر با نوع یکسان استفاده میشود. به منظور تعریف آرایه از ساختار [type, number of values] u200aاستفاده میشود. type u200aنوع آرایه و number of values u200aتعداد آیتمهای درون آرایه را مشخص میکنند. با استفاده از اندیس نیز میتوان به مقادیر درون آرایه دسترسی داشت. در ادامه، مثالی از تعریف آرایه در زبان برنامه نویسی کربن ملاحظه میشود.
var array: [i32; 4] = (0, 1, 2, 3);
// It is possible to omit the number of values
// when the size of the array can be inferred
var array: [i32;] = (0, 1, 2, 3);
// access elements using square brakets
Print(array[0]);
این نوع ساختار امکان ذخیرهسازی مقادیر را به نحوی فراهم میکند که بتوان به جای اندیس، با استفاده از نام به مقادیر دسترسی داشت. دو نوع ساختمان در زبان برنامه نویسی کربن وجود دارند:
fn UseStruct() {
var data: auto = {.x_var = 3, .b_var = 2, .m_slope = 7};
var y: i32 = data.m_slope * data.x_var + data.b_var;
Print("y: {0}", y);
}
// output:
y: 23
در زبان کربن میتوان با استفاده از کلمه کلیدی class u200a، کلاس جدیدی را ایجاد کرد. متغیرها و توابع جدیدی میتوانند درون کلاس تعریف شوند. در ادامه، مثالی از کلاس در زبان برنامه نویسی کربن ملاحظه میشود.
class Widget {
var x: i32;
var y: i32;
var payload: String;
fn Sum[me: Self]() -> i32 {
var total: i32 = me.x + me.y;
return total;
}
}
در قطعه کد زیر نیز مثالی از نحوه تعریف شی جدید با نام coolWidget u200aاز کلاس Widget u200aدر زبان کربن گوگل ملاحظه میشود.
fn Main() -> i32 {
var coolWidget: Widget = {.x = 6, .y = 7, .payload = "load"};
var total: i32 = coolWidget.Sum();
Print("Total sum {0}" , total);
return 0;
}
// output:
Total sum 13
زبان برنامه نویسی کربن مانند سایر زبانهای برنامه نویسی از توابع و کلاسهای همگانی یا ژنریک پشتیبانی میکنند. نوع پارامترهای این توابع و کلاسها در زمان اجرای برنامه مشخص میشوند.
در زبان کربن گوگل به منظور تعریف پارامتری از نوع همگانی یا ژنریک، از عبارت کلیدی T u200aاستفاده میشود. در مثال زیر نمونهای از یک تابع با پارامتر همگانی x u200aو y u200aملاحظه میشود که کوچکترین مقدار را برمیگرداند. میتوان به این پارامترها، مقادیری با نوع داده متفاوت تخصیص داد.
fn Min[T:! Ordered](x: T, y: T) -> T {
return if x <= y then x else y;
}
به عنوان مثال، میتوان به پارامترهای تابع Min u200aمقادیر عددی به شکل زیر تخصیص داد:
var a: i32 = 1;
var b: i32 = 2;
Assert(Min(a, b) == 1);
همچنین، میتوان به تابع Min u200aمقادیری از نوع رشته ارسال کرد که در نهایت کوچکترین رشته را در خروجی بازگرداند:
var a: String = "abc";
var b: String = "xyz";
Assert(Min(a , b) == "abc");
زبان برنامه نویسی کربن، جدیدترین زبان ارائه شده توسط گوگل است که به عنوان جایگزینی برای زبان برنامه نویسی C++ محسوب میشود. این زبان با هدف رفع چالشها و مشکلات زبان C++ تولید شده است. در مطلب حاضر، به معرفی اجمالی این زبان برنامه نویسی پرداخته شد و نقاط ضعف زبان C++ و دلایل تولید زبان کربن مورد بررسی قرار گرفتند. همچنین، در انتهای مطلب حاضر به دستورات ساده این زبان به همراه مثال پرداخته شد.
اگر این مطلب برای شما مفید بوده است، آموزشها و مطالب زیر نیز به شما پیشنهاد میشوند:
برچسب:
نویسنده: خنجی