خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

معرفی Carbon، جانشین تجربی Google برای C++

یک زبان جدید دیگر در بلوک وجود دارد: کربن. دریابید که آیا این یکی ارزش یادگیری دارد یا خیر.

C++ از زمان آغاز به کار خود، انتخاب اصلی برای ساخت برنامه های کاربردی با عملکرد فشرده بوده است. اما این زبان هنوز دارای برخی از شیوه های منسوخ شده ناشی از “طراحی توسط کمیته” است.

در 19 جولای 2022، در خلال کنفرانس CPP North C++ در تورنتو، مهندس گوگل، چندلر کاروت، کربن را معرفی کرد.

کربن چیست و چگونه قصد دارد C++ را به موفقیت برساند.

کربن چیست؟

مهندسان گوگل زبان برنامه نویسی Carbon را برای رفع کاستی های C++ توسعه دادند.

بسیاری از زبان‌های موجود مانند Golang و Rust در حال حاضر وجود دارند که عملکرد C++ را بدون نقص آن منعکس می‌کنند. متأسفانه، این زبان ها موانع قابل توجهی را برای مهاجرت پایگاه های کد C++ موجود ایجاد می کنند.

هدف کربن این است که TypeScript برای جاوا اسکریپت است و Kotlin برای جاوا. این یک جایگزین نیست، بلکه یک زبان جانشین است که بر اساس قابلیت همکاری با C++ طراحی شده است. هدف آن پذیرش و مهاجرت در مقیاس بزرگ برای پایگاه های کد و توسعه دهندگان موجود است.

ویژگی های کلیدی کربن

برخی از ویژگی های کلیدی کربن شامل قابلیت همکاری ++C، ژنریک مدرن و ایمنی حافظه است.

قابلیت همکاری با C++

هدف کربن ارائه یک منحنی یادگیری ملایم برای توسعه دهندگان ++C با مجموعه ای استاندارد و سازگار از ساختارهای زبانی است.

برای مثال، این کد C++ را بگیرید:

// C++:
#include<math.h>
#include<iostream>
#include<span>
#include<vector>
 
structCircle {
  float r;
};
 
voidPrintTotalArea(std::span<Circle> circles) {
  float area = 0;
 
  for (const Circle& c : circles) {
    area += M_PI * c.r * c.r;
  }
 
  std::cout << "Total area: " << area << endl;
}
 
automain(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
 
  // Implicitly constructs `span` from `vector`.
  PrintTotalArea(circles);
  return0;
}

ترجمه شده به کربن، به این صورت می شود:

// Carbon:
package Geometry api;
importMath;
 
classCircle {
  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);
  return0;
}

همچنین می‌توانید یک کتابخانه C++ را به Carbon در یک برنامه انتقال دهید یا کد کربن جدید را در بالای کدهای C++ موجود اضافه کنید. مثلا:

// C++ code used in both Carbon and C++:
structCircle {
  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"
 
automain(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);
  return0;
}

یک سیستم ژنریک مدرن

کربن یک سیستم ژنریک مدرن با تعاریف بررسی شده ارائه می دهد. اما همچنان از الگوهای انتخابی برای قابلیت همکاری یکپارچه C++ پشتیبانی می کند.

مطلب مرتبط:   مکانیسم های تایمر با سی و لینوکس

این سیستم ژنریک مزایای زیادی را برای قالب های ++C ارائه می دهد:

  • بررسی نوع برای تعاریف عمومی. این از هزینه زمان کامپایل بررسی مجدد تعاریف برای هر نمونه جلوگیری می کند.
  • رابط های قوی و بررسی شده اینها وابستگی تصادفی به جزئیات پیاده سازی را کاهش می دهند و یک قرارداد واضح تر ایجاد می کنند.

ایمنی حافظه

کربن به دنبال پاسخگویی به ایمنی حافظه، یک مسئله کلیدی که C++ را آزار می دهد، به وسیله:

  • ردیابی بهتر حالت‌های اولیه، افزایش اجرای مقداردهی اولیه، و سخت شدن در برابر اشکالات اولیه.
  • طراحی APIها و اصطلاحات اساسی برای پشتیبانی از بررسی مرزهای پویا در اشکال زدایی و ساخت های سخت شده.
  • داشتن یک حالت ساخت دیباگ پیش‌فرض که جامع‌تر از حالت‌های ساخت موجود C++ است.

شروع کار با کربن

می‌توانید همین حالا با بررسی پایگاه کد و استفاده از کاوشگر کربن، کربن را کشف کنید:

# Install bazelisk using Homebrew.
$ brew install bazelisk
 
# Install Clang/LLVM using Homebrew.
# Many Clang/LLVM releases aren't built with options we rely on.
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"
 
# Download Carbon's code.
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
 
# Build and run the explorer.
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon

نقشه راه کربن تفکر بلند مدت را نشان می دهد

طبق نقشه راه کربن، گوگل این آزمایش را با انتشار یک نسخه اصلی (0.1) تا پایان سال 2022 عمومی خواهد کرد. آنها قصد دارند این آزمایش را با نسخه 0.2 در سال 2023 و نسخه کامل 1.0 در سال های 2024-2025 دنبال کنند.

مطلب مرتبط:   چگونه یک برنامه نتلیفای را حذف کنیم

اینکه آیا کربن قادر به بازتولید موفقیت زبان های دیگر مانند Golang و Kotlin خواهد بود یا خیر، باید دید.