کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

نحوه راه اندازی و نصب زبان Carbon

نحوه راه اندازی و نصب زبان Carbon

شروع کار با زبان کربن شامل نصب و راه اندازی است ابزارهایی است که در ادامه تبیین آنها خواهیم پرداخت.

  • • Homebrew: یک ابزار نصب بسته است که باید روی سیستم شما نصب شود.
  • • Bazel: Bazel یک ابزار ساخت و تست منبع باز است که می تواند چندین زبان و پلتفرم را پشتیبانی کند.
  • • LLVM: LLVM یک ماشین مجازی سطح پایین است که زبان کربن برای اجرا از آن استفاده می کند. ممکن است برای دنبال کردن این آموزش نیازی به دانش کامل LLVM نداشته باشید.
  • • Carbon Explorer: این مورد مانند ابزار پیاده سازی زبان کربن است. برای اجرای تمامی برنامه های Carbon lang از کربن اکسپلورر استفاده می کنیم.

مرحله 1: Bazel را نصب کنید.

برای نصب Bazel می توانید اجرا کد زیر را اجرا کنید.

$ brew install bazelisk

این کد باید به طور خودکار Bazel را که آماده استفاده است نصب و راه اندازی کند. در صورت داشتن هر گونه خطای مربوط به مجوزها، پیام خطای Bazel دارای دستور مفیدی برای اجرا خواهد بود. سعی کنید، دستور را با استفاده از sudo اجرا نمایید.

مرحله 2: LLVM را نصب نمایید.

LLVM ماشین مجازی هسته ای است که زبان کربن روی آن اجرا می شود.

$ brew install llvm
    $ export PATH="$(brew --prefix llvm)/bin:${PATH}"
    

نکته ای که باید به آن توجه کنید این است که MacOS دارای یک llvm پیش فرض است. بنابراین استفاده از brew install llvm ممکن است پیامی مانند llvm is keg-only را بدهد، به این معنی که symlink نشده است.

مرحله 3: کد زبان Carbon را تنظیم کنید.

این مرحله دانلود کد کربن زبان است.

$ git clone https://github.com/carbon-language/carbon-lang
        $ cd carbon-lang
        

مرحله 4: سلام جهان با زبان کربن

اکنون که زبان Carbon را راه‌اندازی کرده‌ایم، بیایید یک اجرای سریع برای Hello world انجام دهیم. برای این کار از کاوشگر کربن برای اجرا استفاده می کنیم. برای اجرای اولین کد خود در Carbon، مطمئن شوید که در پوشه carbon-lang که از git کلون کرده اید، هستید و سپس دستور زیر را اجرا کنید.

$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon

کاری که این خط انجام می دهد فراخوانی ابزار ساخت Bazel برای راه اندازی کد اکسپلورر است که به نوبه خود کد واقعی موجود در فایل ./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 برگردانده می شود.

مسیر فایل: ./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 است. بنابراین اگر فایل جدید زبان کربن را می نویسید، باید فایلی داشته باشید که با پسوند .carbon ختم می شود. مثال: demo.carbon.

Syntax اصلی زبان کربن همراه با مثال:

زبان کربن هنوز در مراحل آزمایشی است. در حالی که بسیاری از انتخاب های طراحی قبلا انجام شده اند، برخی از نحو و استفاده ممکن است با تکامل همه چیز تغییر کند. یک مورد عالی در مورد Carbon این است که نحو باید برای توسعه دهندگان /C++C به راحتی قابل درک است.

برای استفاده بهینه از این آموزش، در ادامه هر یک از این مثال‌ها، می‌توانید با استفاده از Carbon language explorer که در مرحله قبل نصب کرده‌اید، نمونه‌های زیر را اجرا کنید. اگر در دستگاه خود کار می‌کنید، می‌توانید هر بار که برنامه‌ای را اجرا می نمایید فایل‌های جدیدی ایجاد کرده یا فایل ./explorer/testdata/print/format_only.carbon را برای بررسی نمونه‌ها تغییر دهید.

    هر بار که کد را تغییر می دهید، bazel run //explorer -- ./explorer/testdata/print/format_only.carbon را اجرا نمایید تا خروجی را ببینید. همچنین می‌توانید از Carbon online explorer IDE برای اجرای نمونه‌های زیر استفاده کنید. پیوند explorer IDE کربن آنلاین در Carbon Godbolt یا Carbon online explorer است.

اعلان ها در زبان کربن:

  • • متدها/توابع با استفاده از کلمه کلیدی fn اعلان می شوند.
  • • متغیرها با استفاده از کلمه کلیدی var اعلان می شوند.
  • • نام متغیرها باید با : به دنبال فاصله به پایان برسد، به عنوان مثال: var x:
  • • ثابت ها را می توان با استفاده از کلمه کلیدی let اعلام کرد.
  • • بسته ها با استفاده از کلمه کلیدی بسته اعلام می شوند.
  • • نظرات به زبان Carbon را می توان با استفاده از دو اسلش اعلام کرد // .
  • • 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 
    }
    
    

توابع و متدها در زبان برنامه نویسی کربن (Functions/Methods)

توابع را می توان با استفاده از کلمه کلیدی 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;
        }
        
        

متغیرهای عددی در زبان کربن (Numeric Variables)

  • • متغیرهای بولین برای مقدارهای false | true . (boolean)
  • • i8، i16، i32، i64، i128، i256 برای انواع عدد صحیح. (integer types)
  • • u8، u16، u32، u128، u256 برای انواع اعداد صحیح بدون علامت. (unsigned integer )
  • • f16، f32، f64 و f128 برای انواع متغیرشناور. (float types)

مثال:

package ExplorerTest api;

    fn Main() -> i32 {
      var a: i32 = 1;
      var b: i32 = 2;
      Print(a + b);
      return 0;
    }
    
    

رشته ها به زبان کربن (Strings )

  • • String برای دنباله بایت.
  • • StringView به عنوان مرجع فقط خواندنی برای دنباله بایت utf-8.

رشته ها را می توان به دو صورت اعلام کرد.

  • • Single Line: برای تک خط از علامت نقل قول دوتایی (") استفاده کنید.
  • • رشته چند خطی: برای اعلام رشته چند خطی از (""") استفاده نمایید.

مثال:

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;
    }
    

تاپل ها در زبان کربن (Tuples)

تاپل ها مقادیری را با مختصات متعدد نشان می دهند. آنها را می توان با استفاده از پرانتز ( ) اعلام کرد.

package ExplorerTest api;

        fn Main() -> i32 {
          var x: auto = (0, 1);
          Print("{0}", x[1]);
          return x[0];
        }
        
        

در اینجا (x,y,z) یک تاپل با چند مختصات است. با استفاده از ایندکس می توان به آنها دسترسی داشت.

اشاره گرها در زبان کربن (Pointers )

هیچ اشاره گر تهی در کربن وجود ندارد. برای نشان دادن اشاره‌گری که ممکن است به یک شی معتبر اشاره نکند، از نوع 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;
            }
            

آرایه ها در زبان کربن (Arrays)

آرایه ها با استفاده از نوع آرایه و اندازه اعلان می شوند. [type; size] به عنوان مثال:

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];
                }
                
                

جریان کنترل شرطی با زبان کربن (Conditional control flow)

ترکیب if، else را می توان برای کنترل جریان شرطی در کربن استفاده کرد.

if-else
if(condition) {
                    //doSomething
                   } else {
                    //doSomething
                   }
                   
if-else-if
1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                        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;
                        

حلقه ها درزبان کربن (Loops)

حلقه استاندارد در زبان کربن پشتیبانی می شوند.

While loop

حلقه while را می توان با استفاده از 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 Loop

حلقه 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 در زبان کربن

match(condition) {
                                case (condition) => {
                                  //doSomething;
                                }
                                default => {
                                  //doSomething;
                                }
                              }
                              

مثال

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;
                                }
                                

کلاس در زبان کربن (Classes )

کلاس در زبان کربن را می توان با استفاده از کلمه کلیدی class اعلام کرد. کلاس می تواند اعضا و متدهایی داشته باشد. در ادامه یک نمونه از پیاده سازی کلاس آورده شده است.

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;
                                    }
                                    

ساختمان داده در زبان کربن گوگل (Structs )

انواع ساختاری به شما کمک می کند تا اعضا را با استفاده از نام شناسایی نمایید و در داخل پرانتز اعلان می شوند :

var name: auto = {.name1 = value1, .name2 = value2, ...

مثال:

package ExplorerTest api;

                                            fn Main() -> i32 {
                                              var point: auto = {.x_axis = 0, .y_axis = 1};
                                              point = {.x_axis = 5, .y_axis = -5};
                                              var result: i32 = point.x_axis * point.x_axis + point.y_axis * point.y_axis;
                                              Print("Result : {0}", result);
                                              return 0;
                                            }
                                            
                                            

ژنریک در زبان برنامه نویسی کربن (Generics )

ژنریک ها را می توان در بسیاری از زبان های مدرن مشاهده کرد. آنها راهی را برای القای بررسی نوع زمان کامپایل تعریف و به تعریف متغیرهای نوع کمک می کنند. Generics را می توان با استفاده از انواع پارامترهای T اعلام کرد که در زیر نشان داده شده است.

مثال:

package ExplorerTest api;

                                                fn GenericExample[T:! Type](x: T) -> T {
                                                  return x;
                                                }
                                                
                                                fn Main() -> i32 {
                                                  Print("Integer generic type {0}", GenericExample(0));
                                                  Print(GenericExample("This is a string generic"));
                                                  return 0;
                                                }
                                                
                                                

عیب یابی خطاهای نصب زبان کربن

رفع خطای Carbon llvm-ar:

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)
                                                        

هنگامی که آن را ذخیره کردید، حتماً منبع ~/.bash_profile را اجرا کنید.

تاریخ انتشار زبان کربن

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

1401/12/04 1035
نظرات شما

نظرات خود را ثبت کنید...