|  Logo on Carbon's GitHub organization | |
| Family | C | 
|---|---|
| Designed by | |
| Typing discipline | Static, nominative, partly inferred | 
| Implementation language | C++ | 
| License | Apache-2.0-with-LLVM-Exception | 
| Filename extensions | .carbon | 
| Website | github | 
| Influenced by | |
| C++, Rust, Swift | |
Carbon is an experimental programming language designed for interoperability with C++.[1] The project is open-source and was started at Google. Google engineer Chandler Carruth first introduced Carbon at the CppNorth conference in Toronto in July 2022. He stated that Carbon was created to be a C++ successor.[2][3][4] The language is expected to have a 1.0 release in 2024 or 2025.[5]
The language intends to fix several perceived shortcomings of C++[6] but otherwise provides a similar feature set. The main goals of the language are readability and "bi-directional interoperability" (which allows the user to include C++ code in the Carbon file), as opposed to using a new language like Rust, that, while being influenced by C++, is not two-way compatible with C++ programs. Changes to the language will be decided by the Carbon leads.[7][8][9][10]
Carbon's documents, design, implementation, and related tools are hosted on GitHub under the Apache-2.0 license with LLVM Exceptions.[11]
Example
The following shows how a program might be written in Carbon and C++:[12]
| Carbon | 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 converts `Array` to `Slice`.
  PrintTotalArea(circles);
  return 0;
}
 | #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}};
  // Implicitly converts `vector` to `span`.
  PrintTotalArea(circles);
  return 0;
}
 | 
See also
References
- ↑  "README". Retrieved 6 September 2023. It is designed around interoperability with C++ as well as large-scale adoption and migration for existing C++ codebases and developers. 
- ↑ "Scheduled events for Tuesday, July 19, 09:00 - 10:30". CppNorth, The Canadian C++ Conference, July 17–20, 2022. CppNorth. Retrieved 21 July 2022 – via Sched.com.
- ↑ "Carbon Language: An experimental successor to C++ - Chandler Carruth - CppNorth 2022". CppNorth. 22 July 2022 – via YouTube.
- ↑ Bradshaw, Kyle (19 July 2022). "Carbon, a new programming language from Google, aims to be C++ successor". 9to5Google.
- ↑ Carbon Language: An experimental successor to C++, carbon-language, 12 October 2022, retrieved 12 October 2022
- ↑ "Difficulties improving C++". carbon-language/carbon-lang repo. Google. 21 July 2022 – via GitHub.
- ↑ Carruth, Chandler; Ross-Perkins, Jon; Riley, Matthew; Hummert, Sidney (23 July 2022). "Evolution and governance". carbon-language/carbon-lang repo. Google – via GitHub.
- ↑ Illidge, Myles (21 July 2022). "Google's Carbon programming language aims to replace C++". MyBroadband.
- ↑ Jackson, Joab (20 July 2022). "Google Launches Carbon, an Experimental Replacement for C++". The New Stack.
- ↑ Mustafa, Onsa (20 July 2022). "Carbon, A New Programming Language from Google As A C++ Successor". PhoneWorld.
- ↑ "carbon-lang/LICENSE". GitHub. 16 June 2020. Retrieved 24 July 2022.
- ↑ "carbon-lang/docs/images/snippets.md at trunk · carbon-language/carbon-lang". GitHub. Retrieved 16 December 2023.
External links



