25.07.20223 min
Maciej Olanicki

Maciej OlanickiRedakcja Bulldogjob

Carbon – nowy język programowania Google zamiast Rusta

Rust jako następca C i C++ w niskopozimowym kodzie cieszy się dużym uznaniem i zainteresowaniem, a jednak Google pracuje nad czymś nowym. Dlaczego?

Carbon – nowy język programowania Google zamiast Rusta

Każdy już chyba widział ten komiks XKCD. Ten, w którym wola budowania czegoś nowego, zastąpienia obecnego standardu lepszym, zawsze skutkuje ustanowieniem nowego standardu, który zamiast zastąpić poprzedni, występuje obok. Dobrym, acz nie do końca odosobnionym przykładem mogą być javascriptowe frameworki, których liczba z roku na rok zdaje się rosnąć wykładniczo.

Rust zamiast C…

Radość tworzenia zdaje się jednak znacznie bardziej rozpowszechniona, o czym informują rzecznicy Google. W łonie korporacji powstał bowiem nowy język programowania. I zapewne nie zwróciłoby to uwagi wielu, gdyby nie fakt, że język ten ma spełniać takie same funkcje, jak inny, całkiem nowoczesny i znajdujący zastosowanie wszędzie tam, gdzie od lat funkcjonowały (a nierzadko zawodziły) inne języki, Rust. 

To może budzić zaskoczenie. Wszak cała branża wobec Rusta wysuwa duże oczekiwania, za moment (najpewniej w przyszły poniedziałek) pierwszy kawałek kodu napisany w Ruście trafi do jądra Linux. Ponadto specjaliści Microsoftu właśnie we wybranym języku programowania zdiagnozowali lwią część problemów bezpieczeństwa – stosowany od 40 lat duet C/C++ prowadzić ma do wycieków pamięci. Rust ma stanowić remedium. 

Rust, czyli nowoczesny, niskopoziomowy język programowania, który nie powiela wad swoich poprzedników. A jednak nie spełnia on części oczekiwań, o czym mogą świadczyć decyzje podjęte w Google. W Mountain View ogłoszono bowiem, że powstanie nowy niskopozimowy język programowania, Carbon. Przedsięwzięcie jest aktualnie w fazie eksperymentalnej, ale ma daleko sięgające ambicje. 

…Carbon zamiast Rusta?

Specyfikacja Carbona ma zostać opublikowana przed końcem roku. Pryncypium przy projektowaniu języka było bezpieczeństwo pamięci, z czego przecież słynie także Rust. To rodzi pytania – po co Google’owi Carbon? Otóż Carbon nie ma zastąpić Rusta jako następcy C/C++ w niskopoziomowym kodzie, lecz występować obok niego. A dokładnie wszędzie tam, gdzie występuje duża baza kodu w C/C++.

Przykładowy kod w C++:

#include <math.h>
#include <iostream>
#include <span>
#include <vector>

struct Circle {
  float r;
};

void PrintTotalArea(std::span<Circle> circles) {
  float area = 0;
  for (const Circle& c : circles) {
    area += M_PI * c.r * c.r;
  }
  std::cout << "Total area: " << area << "\n";
}

auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  PrintTotalArea(circles);
  return 0;
}


...oraz odpowiednik w Carbonie:

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 {
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  PrintTotalArea(circles);
  return 0;
}


Carbon to zatem język pośredni, pomyślany w taki sposób, aby zagwarantować możliwie jak największą interoperacyjność z C i C++, a jednocześnie bezpieczeństwo pamięci na podobieństwo Rusta. Przez samych pracowników Google jest to porównywane do decyzji podjętych przez Apple w sprawie Objective-C. Mowa więc o inicjatywie, która raczej stanowi swojego rodzaju mostek, niż stricte nowość. Więcej na ten temat w dokumentacji Carbon na GitHub.

<p>Loading...</p>