توسعهدهنده | گوگل |
---|---|
ظهوریافته در | ۱۹ ژوئیه ۲۰۲۲ |
انتشار آزمایشی | 0.1
/ ۱۹ ژوئیه ۲۰۲۲ |
ایستا، مبتنی بر نام، تشخیص نوع | |
زبان پیادهسازی | سیپلاسپلاس |
سیستمعامل | چندسکویی |
.carbon ، .co2 | |
وبگاه | [[۱]] |
متأثر از | |
سیپلاسپلاس، راست |
کربن (به انگلیسی: Carbon)، زبان برنامهنویسی آزمایشی همهمنظوره است که توسط گوگل ایجاد شده تا جانشین سیپلاسپلاس باشد. این زبان اولینبار توسط Chandler Carruth در کنفرانس CppNorth در ژوئیه ۲۰۲۲ به عموم ارائه شد.[۱][۲][۳] این زبان قصد دارد چندین کمبود اساسی از سیپلاسپلاس را برطرف کند،[۴] در غیر این صورت مجموعهای از ویژگیهای مشابه را ارائه میدهد. اهداف اصلی کربن خوانایی و «قابلیت توسعه دو جهته» است، یعنی فراخوانی همزمان در سیپلاسپلاس و بالعکس، بنابراین مشکلات زبانی مانند راست وجود نخواهد داشت. این زبان برخلاف فرایند ISO که سیپلاسپلاس استفاده میکند، در گیتهاب طراحی و توسعه مییابد.[۵][۶][۷]
کربن به عنوان یک پروژه رایگان و متنباز تحت مجوز آپاچی (نسخه ۲) توسعه یافتهاست.[۸]
زبان کربن در حال حاضر یک پروژه آزمایشی است. هیچ کامپایلر یا زنجیره ابزاری برای آن وجود ندارد؛ ولی میتوانید مفسر آزمایشی کربن را در کامپایلر اکسپلورر ببینید.
در حال حاضر توسعهدهندگان این زبان چندین جنبه اصلی زبان کربن را بیان کردهاند:
سلام دنیا!
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;
}