کربن (زبان برنامه‌نویسی)

کربن ، زبان برنامه‌نویسی آزمایشی همه‌منظوره است که توسط گوگل ایجاد شده تا جانشین سی‌پلاس‌پلاس باشد. این زبان اولین‌بار توسط Chandler Carruth در کنفرانس CppNorth در ژوئیه ۲۰۲۲ به عموم ارائه شد. این زبان قصد دارد چندین کمبود اساسی از سی‌پلاس‌پلاس را برطرف کند، در غیر این صورت مجموعه‌ای از ویژگی‌های مشابه را ارائه می‌دهد. اهداف اصلی کربن خوانایی و «قابلیت توسعه دو جهته» است، یعنی فراخوانی همزمان در سی‌پلاس‌پلاس و بالعکس، بنابراین مشکلات زبانی مانند راست وجود نخواهد داشت. این زبان برخلاف فرایند ISO که سی‌پلاس‌پلاس استفاده می‌کند، در گیت‌هاب طراحی و توسعه می‌یابد.

کربن به عنوان یک پروژه رایگان و متن‌باز تحت مجوز آپاچی (نسخه ۲) توسعه یافته‌است.

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

در حال حاضر توسعه‌دهندگان این زبان چندین جنبه اصلی زبان کربن را بیان کرده‌اند:
 استراتژی زبان کربن و پروژه.
 ساختار پروژه متن‌باز، مدل حاکمیت و فرایند تکامل.
 جنبه‌های مهم و اساسی طراحی زبان که از تجربه توسعه‌دهندگان با ++C و سخت‌ترین چالش‌هایی که پیش‌بینی می‌کردند، به‌دست می‌آید و شامل طرح‌هایی برای این موارد می‌باشد:
 جنریک‌ها
 انواع کلاس
 وراثت
 سربارگذاری عملگرها
 ساختار لغوی و نحوی
 سازماندهی کد و ساختار ماژولار

مثال‌ها 
سلام دنیا!package sample api;
fn Main() -> i32 {
    Print("Hello, world!");
    return 0;
}اگر قبلاً یک توسعه دهنده ++C باشید، کربن باید منحنی یادگیری ملایمی داشته باشد. این زبان از مجموعه‌ای از ساختارهای زبانی ساخته شده‌است که باید احساس آشنایی داشته باشند و خواندن و درک آن آسان باشد.package Geometry api;
import Math;

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

fn Main() -> i32 {
  // A dynamically sized array, like `std::vector`.
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  // Implicitly constructs `Slice` from `Array`.
  PrintTotalArea(circles);
  return 0;
}می‌توانید کربن را از ++C بدون سربار فراخوانی کنید و برعکس. این بدان معناست که شما یک کتابخانه ++C را به کربن در یک برنامه منتقل می‌کنید یا کد کربن جدید را در بالای کد موجود در ++C خود می‌نویسید. مثلا:// C++ code used in both Carbon and C++:
struct Circle {
  float r;
};

// Carbon exposing a function for C++:
package Geometry api;
import Cpp library "circle.h";
import Math;

fn PrintTotalArea(circles: Slice(Cpp.Circle)) {
  var area: f32 = 0;
  for (c: Cpp.Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}

// C++ calling Carbon:
#include <vector>
#include "circle.h"
#include "geometry.carbon.h"

auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Carbon's `Slice` supports implicit construction from `std::vector`,
  // similar to `std::span`.
  Geometry::PrintTotalArea(circles);
  return 0;
}

جستارهای وابسته 

 مقایسه زبان‌های برنامه‌نویسی

 سی‌پلاس‌پلاس

 دی

 راست

منابع 
زبان‌های برنامه‌نویسی ایستا
زبان‌های برنامه‌نویسی شیءگرا
زبان‌های برنامه‌نویسی
گوگل
نرم‌افزارهای چندسکویی