زبان برنامه نویسی کربن ( carbon ) + آموزش نصب و استفاده
زبان برنامه نویسی کربن ( carbon ) یک زبان برنامه نویسی متن باز است که جایگزینی زبان سی پلاس پلاس ( c++ ) است.گوگل زبان Carbon را به عنوان زبان برنامه نویسی نسل جدید با هدف جایگزینی با C++ به عنوان جانشین آن معرفی کرده است. زبان کربن یک زبان متن باز است که هنوز در حال آزمایش میباشد.
زبان کربن که توسط Chandler Carruth که در کنفرانس cppnorth معرفی گردید جایگزینی عالی برای زبان برنامه نویسی سی پلاس پلاس به نظر میرسد.
تاریخ انتشار دقیق زبان کربن 19 July 2022 یعنی برابر با ۲۸ تیر ۱۴۰۱ میباشد.
در این مقاله ی آموزشی قرار هست که به جنبه های مختلف زبان کربن بپردازیم ، با مثال های مختلف سینتکس آنرا بررسی کنیم تا شما بعد از خواندن این مقاله بتوانید به راحتی زبان کربن را خودتان تست کنید. بریم که شروع کنیم.
علاوه بر مقاله ی آموزشی که در زیر قرار دارد شما میتوانید از ویدیو زیر نیز جهت آموزش کربن ، نحوه ی نصب کردن و کدنویسی اولیه با زبان کربن استفاده کنید :
زبان کربن ( carbon ) چیست و چرا بوجود آمد ؟
زبان برنامه نویسی کربن با تکامل میتواند به راحتی جایگزین زبان سی پلاس پلاس شود. سی پلاس پلاس یکی از بهترین زبان های برنامه نویسی بوده است که پرفرمنس بالایی را ارائه میدهد و در بسیاری از سیستم ها کاربردی است. یکی از ویژگی های این زبان قابلیت استفاده روی پلتفرم های مختلف ، سخت افزارها و سیستم عامل های مختلف است . اما با وجود همه ی این مزیت ها زبان سی پلاس پلاس مشکلاتی نیز دارد :
- مشکل بدهی فنی ( برای مثال : موقع بزرگ کردن مقدار integer ) در عملکردهای مختلف. سازگاری قبلی با زبان C حتی کار را سخت تر کرده و تغییرات در کد را سخت تر کرده است.
- فرآیند تکامل برای افزودن قابلیتهای جدید به C++ بسیار دشوار است چون که همانطور باید به سربار پردازش ISO پایبند باشد. باعث جلوگیری از آزمایش و غیره میشود.
بنابراین زبان c++ از برخی اهداف خود کمی عقب مانده است مانند ارائه ی پرفرمنس بالا برای نرم افزارهای حیاتی، تکامل نرم افزار و زبان ، کدی که به راحتی قابل خواندن و نوشتن باشد ، توسعه ی سریعتر و منعطف تر و ...
از آنجایی که حل کردن این مشکلات زبان c++ واقعا سخت است ، پس یک تحقیقات و ارزیابی های عمیق چندین زبان برنامه نویسی توسط مهندسین شرکت گوگل ، برای حل این مشکلات زبان کربن (carbon) معرفی شد. بنابراین میشود گفت کربن جایگزینی برای سی پلاس پلاس است همانطور که در لیست زیر جایگزین زبان های دیگر را میبینید :
- C -> C++
- JavaScript -> TypeScript
- Objective-C -> Swift
- Java -> Kotlin
- C++ -> Carbon Language
در لیست بالا شما دو زبان میبینید که با فلش از هم جدا شده اند زبانی که پشت علامت فلش هست زبان اصلی و آن زبانی که جلوی علامت فلش هست زبان جایگزین آن میباشد.
برخی از ویژگی های زبان های جایگزین شامل ، ساخته شده روی اکوسیستم موجود ، همکاری دو جهته ، بهینه سازی منحنی یادگیری ، اضافه شدن سیستم ها و ابزارهای مدرن مثل package manager و ...
زبان کربن از سی یا سی پلاس پلاس قدیمی ارث بری نکرده است ، زبان کربن از صفر ساخته شده و شامل مبانی زبان های برنامه نویسی مدرن همانند Generic ها ، کد ماژولار ، ثبات و ساده بودن سینتکس میباشد.
ویژگی های کلیدی زبان کربن ( carbon )
از آنجایی که زبان کربن کاملا از صفر طراحی شده و سعی شده که مشکلات سی پلاس پلاس رخ ندهد و همچنین ویژگی های یک زبان مدرن درآن باشد این زبان ویژگی های کلیدی زیر را دارد :
- پرفرمنس سریع تر نسبت به زبان سی پلاس پلاس با استفاده از LLVM ( low level virtual machine ) که دسترسی سطح پایین به بیت ها و آدرس ها دارد.
- زبان کربن نیز مثل خیلی از زبان های جایگزین با زبان قدیمی که با آن جایگزین شده رابطه ی دو طرفه را حفظ کرده است که می توانید کد زبان C++ را از زبان Carbon و کد زبان Carbon را از C++ فراخوانی کنید.
- مهاجرت از زبان C++ را پشتیبانی میکند که برای انتقال کد از سی پلاس پلاس به کربن عالی است.
- ویژگی های مدرن و تکامل یافته مانند ساختار سریع و منعطف که با ساختار قبلی C++ هماهنگ هست و برای یادگیری آسان هست.
- زبان کربن یک زبان متن باز ( Open Source ) است با اهداف و اولیت های مشخص ، که دارای رویکردهای مشخص همانند کامپایلر ، کتابخانه ها ، مستندات ، پکیج منیجر و ... است.
خب حالا تقریبا میدانیم زبان کربن چیست و به چه علتی خلق شده و بهتر است بریم سراغ نصب/راه اندازی و نوشتن کد با زبان کربن.
نحوه ی نصب و راه اندازی زبان برنامه نویسی کربن
برای شروع کار کردن با زبان برنامه نویسی کربن باید ابتدا روی سیستم عامل خود چیزهایی را نصب کنید از جمله :
- Homebrew : یک ابزار برای نصب پکیج های مختلف است . اگر homebrew را روی سیستم خود نصب نکرده اید میتوانید از دستورالعمل های آن برای نصب استفاده کنید.
- Bazel : یک ابزار متن باز build و test برای زبان های برنامه نویسی مختلف هست.
- LLVM : این ماشین مجازی است که زبان برنامه نویسی کربن برای اجرا شدن از ان استفاده میکند. برای این مقاله نیاز نیست بصورت عمیق LLVM را مسلط باشید.
- Carbon Explorer : کربن اکسپلورر مانند یک ابزار پیاده سازی برای زبان برنامه نویسی کربن است . برای اجرا کردن تمام پروژه های نوشته شده به زبان کربن از کربن اکسپلورر استفاده میکنیم.
برای این مقاله ی آموزشی از سیستم عامل مک برای نصب و راه اندازی زبان برنامه نویسی کربن استفاده شده است هرچند که مراحل نصب برای ویندوز و لینوکس هم مشابه مک است ومیتوانید از آموزش زیر استفاده کنید.
قدم ۱ - نصب Bazel
برای نصب کردن Bazel میتوانید دستور زیر را اجرا کنید :
$ brew install bazelisk
این دستور بصورت خودکار Bazel را برای شما نصب خواهد کرد و هیچ کار خاص دیگری نیاز نیست اما اگر حین نصب کردن خطای مجوز نداشتن صادر شد بهتر است ابتدای دستور بالا sudo بزنید.
قدم ۲ - نصب LLVM
همانطور که قبلتر گفتیم LLVM ماشین مجازی اصلی هست که زبان برنامه نویسی کربن روی آن اجرا میشود برای نصب کردن آن دستورات زیر کافیست :
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"
البته یک نسخه ی llvm از قبل روی مک نصب شده که به همین علت ممکن است با خطای
llvm is keg-only, which means it was not symlinked ....
مواجه شوید که در پایان این مقاله راه حل آن نیز گفته شده است.
قدم ۳ - نصب کردن خود زبان برنامه نویسی کربن
در این مرحله قصد داریم خود زبان برنامه نویسی کربن را دانلود کنیم که به همراه خود مثال هایی هم دارد از دستورات زیر استفاده کنید :
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
قدم ۴ - پروژه ی Hello World با زبان برنامه نویسی کربن
حالا که زبان برنامه نویسی کربن را نصب کردیم بهتر است اولین پروژه ی Hello world را انجام بدهیم. برای این کار از carbon explorer کمک خواهیم گرفت. برای اجرای اولین کد کربن خود مطمئن شوید که داخل دایرکتوری carbon-lang هستید که آنرا در مرحله ی بالا از گیت هاب دانلود کردیم. خب حالا از دستورات زیر استفاده کنید :
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon
کاری که این خط کد انجام میدهد فراخوانی ابزار بیلد Bazel هست تا با استفاده از code explorer فایل کربن که در مسیر تعریف شده هست را اجرا کند. مسیر فایل ما اینجا ./explorer/testdata/print/format_only.carbon هست.
زمانی که شما دستور بالا را اجرا میکنید باید در خروجی hello world و کدهای زیر را ببینید :
tipseason$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon
INFO: Invocation ID: aa36a266-cb55-4433-9bed-907e393c0605
WARNING: .....
.
.
INFO: Build completed successfully, 390 total actions
.
.
Hello world!
result: 0
در قسمت بالا خروجی Hello world! را میبینید و مقدار باز گشتی تابع main را نیز میبینید که یک int32 هست و مقدار آنرا ۰ برگرداندیم.
شاید الان سوال کنید که کدهای پشت صحنه که با زبان برنامه نویسی کربن نوشته شده اند چطور هستند ؟ این کدها به شکل زیر است.
مسیر فایل ./explorer/testdata/print/format_only.carbon
محتویات :
package ExplorerTest api;
fn Main() -> i32 {
var s: auto = "Hello world!";
Print(s);
return 0;
}
برای سیستم عامل ویندوز زبان برنامه نویسی کربن هنوز بصورت رسمی منتشر نشده است ولی شما میتوانید از wsl که شبیه ساز لینوکس در ویندوز هست استفاده کنید. کافیست دستور wsl --install را بزنید و سپس طبق قدم های بالا پیش بروید.
فرمت یا اکستنشن فایل های زبان برنامه نویسی کربن به شکل .carbon است و حتما وقتی فایل جدیدی درست میکنید و قصد دارید کدهای کربن را داخل آن بنویسید از فرمت .carbon برای اخر نام استفاده کنید برای مثال demo.carbon .
حالا که زبان برنامه نویسی کربن را نصب و اجرا کردیم بهتر است کمی به سینتکس و قواعد نوشتاری این زبان برنامه نویسی جدید بپردازیم.
سینتکس ( Syntax ) زبان برنامه نویسی کربن با مثال
زبان برنامه نویسی کربن هنوز در حالت آزمایشی هست ولی نقشه ی کلی طراحی این زبان آماده است ممکن است درآینده کمی در سینتکس یا کاربردهای کوچکی از این زبان تغییر پیدا کند ، پس این مورد درباره ی زبان برنامه نویسی کربن را موقع یادگیری و کار کردن در نظر داشته باشید. یک چیز خوب درباره ی زبان کربن این است که سینتکس این زبان باید برای توسعه دهندگان c و c++ کاملا آشنا باشد و به راحتی درک شود.
برای یادگیری بهتر خوب است که مثال های زیر را خودتان نیز توسط carbon explorer که در قدم های بالا نصب کردیم بنویسید و اجرا کنید.
شما میتوانید فایل های جدید carbon طبق آموزش بالا ایجاد کنید و یا از فایل های کربن موجود برای تست مثال های زیر استفاده کنید.
همچنین شما میتوانید از ادیتورهای آنلاین بدون نیاز به نصب هیچ چیز استفاده کنید. برای کدنویسی آنلاین کربن از این سایت یا این سایت میتوانید استفاده کنید.
تعاریف در زبان برنامه نویسی کربن
- تمامی توابع و متودها با استفاده از کلمه ی کلیدی fn تعریف میشوند.
- متغیرها در زبان کربن با var تعریف میشوند.
- نام متغیرها باید با : تمام شود مثلا var x:
- ثابت ها با استفاده از کلمه ی کلیدی let تعریف میشوند.
- پکیج ها با استفاده از کلمه ی package تعریف میشوند.
- کامنت گذاری در زبان کربن با استفاده از // میباشد.
- کلمه ی auto برای تشخیص خودکار متغیر به کار میرود. این کلمه برای let و var و همچنین خروجی توابع کاربرد دارد.
یک تکه کد مثال برای زبان کربن :
package ExplorerTest api;
//fn is function declaration
//return type is i32 i.e. int.
fn Main() -> i32 {
//I am a comment.
var s: auto = "Hello world!"; // Auto Variable
let x: i32 = 20; // Constant
var y: i32 = 3; // Integer variable
Print(s); // Print
return 0; //Return value
}
توابع یا متودها در زبان برنامه نویسی کربن ( carbon )
توابع یا متود ها در زبان برنامه نویسی کربن با کلمه ی fn تعریف میشوند و سینتکس کلی آنها به شکل زیر است :
fn MethodName(var param: type ... ) -> return type
که البته برای توابعی که بدون مقدار بازگشتی هستند قسمت بعد از علامت فلش به سمت راست را نادیده بگیرید.
نمونه ای از توابع در زبان کربن :
package ExplorerTest api;
//Integer return type
fn Sum(var a: i32, var b: i32) -> i32 {
return a + b;
}
//Empty or void return type.
fn PrintCount(var count: i32) {
Print("The count is {0}", count);
}
fn Main() -> i32 {
Print("Sum is {0}", Sum(4, 6));
PrintCount(10);
return 0;
}
متغیرهای عددی در زبان برنامه نویسی کربن ( carbon )
متغیرهای عددی در زبان برنامه نویسی کربن به شکل زیر تعریف میشوند :
- کلمه ی bool برای مقادیر بولین که دو مقدار true و false قبول میکند.
- کلمات i8, i16, i32, i64, i128, i256 برای تعریف مقادیر اینتیجر ( عدد صحیح )
- کلمات u8, u16, u32, u128, u256 برای تعریف متغیرهای unsigned integer
- کلمات f16, f32, f64, f128 برای تعریف مقادیر اعشاری
- کاراکتر ـ برای جداسازی ارقام هست مثلا 1_000_000 هنوز بعنوان یک عدد صحیح است.
مثال :
package ExplorerTest api;
fn Main() -> i32 {
var a: i32 = 1;
var b: i32 = 2;
Print(a + b);
return 0;
}
متغیرهای رشته ای در زبان برنامه نویسی کربن ( carbon )
در زبان برنامه نویسی کربن متغیرهای نوع رشته به شکل زیر تعریف میشوند.
- کلمه ی String برای تعریف متغیر نوع رشته ای
- کلمه ی StringView برای متغیرهای رشته ای فقط خواندنی utf-8 استفاده میشود.
رشته ها به دو صورت مقدار دهی میشوند
- تک خطی : با استفاده از دابل کوت " در یک خط تعریف میشوند.
- چند خطی : برای تغریف رشته های چند خطی در زبان کربن از """ استفاده میشود.
مثال :
package ExplorerTest api;
fn Main() -> i32 {
var singleLine: String = "Hello world!";
var multiLine: String = """hello line 1
TipSeason demo line 2
TipSeason demo line 3
"""; //End of multi block
return 0;
}
توپل یا Tuple ها در زبان کربن
همانطور که در زبان های دیگر توپل وجود دارد مثل پایتون و ... در زبان کربن نیز میتوانید از توپل ها استفاده کنید و توپل ها به سادگی درون پرانتز باز و بسته تعریف میشوند . مثال زیر را ببینید :
package ExplorerTest api;
fn Main() -> i32 {
var x: auto = (0, 1);
Print("{0}", x[1]);
return x[0];
}
در اینجا (x,y,z) یک توپل هست که به اعضای آن میتوان با استفاده از شماره ی ایندکس آن دسترسی داشت.
null pointer در زبان کربن
در زبان کربن هیچ null pointer ای وجود ندارد . برای نمایش یک اشاره گر که ممکن است به یک شی معتبر اشاره نداشته باشد از نوع Optional(T*) استفاده کنید که در آن T نوع آن است.
* نشان دهنده مقدار است. & نشان دهنده آدرس است.
مثال :
package ExplorerTest api;
fn Main() -> i32 {
var x: i32 = 5;
// changes x to 10
x = 10;
Print("---");
Print("x = {0}", x);
var y: i32* = &x;
// changes x to 7
*y = 7;
Print("---");
Print("x = {0}", x);
Print("y = {0}", *y);
var z: i32* = &*y;
// changes x to 0
*z = 0;
Print("---");
Print("x = {0}", x);
Print("y = {0}", *y);
Print("z = {0}", *z);
var w: i32 = *y;
return w;
}
آرایه ها در زبان کربن ( carbon )
آرایه ها در زبان برنامه نویسی کربن به صورت [type; size] تعریف میشوند یعنی هم باید نوع تعریف شود و هم سایز . برای مثال
var xarray: [i32; 4] = (1,2,3,4);
نمونه کد استفاده از آرایه ها در زبان کربن :
package ExplorerTest api;
fn Main() -> i32 {
var xarray: [i32; 4] = (0, 1, 5, 6); // Integer array
var index: i32 = 1;
xarray[index] = 0;
Print("{0}", xarray[0]);
Print("{1}", xarray[0]);
return xarray[0] + xarray[1];
}
شرط ها در زبان برنامه نویسی کربن
در زبان برنامه نویسی کربن برای شرط گذاری از if و else و ترکیب اینها استفاده میشود.
مثال استفاده از if-else :
if(condition) {
//doSomething
} else {
//doSomething
}
مثال استفاده از if-else-if :
if(condition) {
//doSomething
} else if (condition) {
//doSomething
} else {
//doSomething
}
مثال کلی :
package ExplorerTest api;
fn Main() -> i32 {
var x: i32 = 5;
if(x == 5) {
Print("{0} to word is FIVE", x);
} else {
Print("{0} is not known ", x);
}
return 0;
}
حلقه ها در زبان برنامه نویسی کربن
حلقه های استاندارد برنامه نویسی که در دیگر زبان های برنامه نویسی وجود دارد بصورت کامل در زبان کربن پشتیبانی میشود.
حلقه ی While loop در زبان برنامه نویسی کربن :
سینتکس استفاده از حلقه ی whilte در کربن while(condition){ } هست. به مثال زیر دقتت کنید :
package ExplorerTest api;
fn Main() -> i32 {
var x: auto = 5;
while (not (x == 0)) {
x = x - 1;
Print("{0} ", x);
}
return x;
}
حلقه ی for در کربن :
حلقه ی for در زبان کربن به شکل for (loop conditions) { } تعریف میشود . به مثال زیر دقت کنید :
package ExplorerTest api;
fn Main() -> i32 {
var names: [String; 4] = ("a", "b");
for (var name: String in names) {
Console.Print(name);
}
return x;
}
مشابه switch case در زبان کربن
حلقه ی match که شبیه switch هست. سینتکس استفاده از match به شکل زیر است که همه چیز کاملا شفاف و گویاست :
match(condition) {
case (condition) => {
//doSomething;
}
default => {
//doSomething;
}
}
مثال برای match در زبان کربن :
package ExplorerTest api;
fn Matcher(var num: i32) -> i32 {
var number: auto = 10;
match (number) {
case 5 => {
Print("Got 5");
return number;
}
case 10 => {
Print("Got 10");
return number;
}
default => {
Print("Default");
return number;
}
}
}
fn Main() -> i32 {
Matcher(5);
Matcher(10);
Matcher(2);
return 0;
}
کلاس ها در زبان برنامه نویسی کربن
کلاس ها در زبان برنامه نویسی کربن با استفاده از کلمه ی کلیدی class تعریف میشوند کلاس ها میتوانند member و متود های لازم را داشته باشد. در زیر مثالی از استفاده ی کلاس ها آمده است :
package ExplorerTest api;
class Sum {
var a: i32;
fn Add[me: Self](var num: i32) -> i32 {
var total: i32 = me.a + num;
return total;
}
}
fn Main() -> i32 {
var p1: Sum = {.a = 5};
var total: i32 = p1.Add(5);
Print("Total sum {0}" , total);
return 0;
}
حل مشکلات و خطاهای نصب و راه اندازی زبان برنامه نویسی کربن
حل مشکل Carbon llvm-ar error :
llvm is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have llvm first in your PATH, run:
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> /Users/pramodnanduri/.bash_profile
For compilers to find llvm you may need to set:
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"
برای حل این مشکل فایل ~/.bash_profile را تنظیم کنیدو مطمعن شوید که این فایل محتویات زیر را درون خودش دارد :
export PATH="/usr/local/opt/llvm/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"
export CC=$(which clang)
زمانی که محتویات بالا را اضافه کردید و فایل را ذخیره کردید دستور source ~/.bash_profile را در ترمینال بزنید.
سخن پایانی :
امیدوارم که این آموزش دید کلی نسبت به زبان جدید کربن را به شما داده باشد. در این آموزش سعی کردیم برخی از سینتکس های پایه ای زبان کربن را به شما آموزش بدهیم و برای آنها مثال بیاوریم هرچند این ها فقط جهت آشنایی هستند و اگر به دنبال یادگیری کربن باشید باید دوره های آموزشی کاملی پیدا کنید که فعلا بعید است چنین دوره هایی باشد چون این زبان واقعا تازه هست و هنوز جای خود را در بین توسعه دهندگان باز نکرده است.
زبان کربن در حالت آزمایشی هست و هیچ تاریخی هم برای انتشار عمومی آن گفته نشده است ولی با این وجود میتوانید این زبان را تست کنید و از آن لذت ببرید و آماده ی انتشار عمومی آن باشید تا موقع انتشار با یک ذهن آماده به سمت این زبان بروید.
یعنی به جرات میتونم بگم فوق العاده بود خیلی جامع و کامل بود و همچنین بخش نصب و راه اندازی و کدهای مثال که آوردید کاملا متوجه میشه آدم که زبان برنامه نویسی کربن در کل چطوریه خیلی ممنون