Jump to content

Carbon (programming language)

From Wikipedia, the free encyclopedia

Carbon
A dark-gray circle with a white sans-serif letter "C" in the middle
Logo on Carbon's GitHub organization
FamilyC
Designed byGoogle
Typing disciplineStatic, nominative, partly inferred
Implementation languageC++
LicenseApache with LLVM exception
Filename extensions.carbon
Websitegithub.com/carbon-language
Influenced by
C++, Rust, Zig, Haskell, Kotlin, Swift[1]

Carbon is an experimental programming language designed for interoperability with C++.[2] The project is open-source and was started at Google. Google's 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.[3][1][4] The language is expected to have an experimental minimum viable product (MVP) version 0.1 in late 2026 at the earliest and a production-ready version 1.0 after 2028.[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] It aims to build on the C++ ecosystem the way in an analogous role to TypeScript on JavaScript, or Kotlin on Java.[2]

Carbon's documents, design, implementation, and related tools are hosted on GitHub under the Apache 2.0 license with LLVM Exceptions.[11]

Example

[edit]

The following shows how a program might be written in Carbon and C++:[12]

CarbonC++
package Geometry;

import Math;

class Circle {
    var radius: f32;
}

fn PrintTotalArea(circles: [Circle]) {
    var area: f32 = 0;
    for (circ: Circle in circles) {
        area += Math.Pi * circ.radius * circ.radius;
    }
    Print("Total area: {0}", area);
}

fn Run() -> i32 {
    // A dynamically sized array, like `std::vector`.
    var circles: array [Circle] = ({.radius = 1.0}, {.radius = 2.0});
    // Implicitly constructs a slice from the array.
    PrintTotalArea(circles);
    return 0;
}
import std;

using std::span;
using std::vector;

struct Circle {
    float radius;
};

void printTotalArea(span<Circle> circles) {
    float area = 0.0f;
    for (const Circle& circ : circles) {
        area += std::numbers::pi * circ.radius * circ.radius;
    }
    std::println("Total area: {}", area);
}

int main(int argc, char* argv[]) {
    vector<Circle> circles{{.radius = 1.0f}, {.radius = 2.0f}};
    // Implicitly converts `vector` to `span`.

    printTotalArea(circles);
    return 0;
}

See also

[edit]

References

[edit]
  1. 1 2 "Carbon Language: An experimental successor to C++ - Chandler Carruth - CppNorth 2022". CppNorth. 22 July 2022 via YouTube.
  2. 1 2 "Readme". GitHub. 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.
  3. "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.
  4. Bradshaw, Kyle (19 July 2022). "Carbon, a new programming language from Google, aims to be C++ successor". 9to5Google.
  5. Carbon Language: Roadmap, carbon-language, 11 January 2024, retrieved 18 January 2024
  6. "Difficulties improving C++". carbon-language/carbon-lang repo. Google. 21 July 2022 via GitHub.
  7. Carruth, Chandler; Ross-Perkins, Jon; Riley, Matthew; Hummert, Sidney (23 July 2022). "Evolution and governance". carbon-language/carbon-lang repo. Google via GitHub.
  8. Illidge, Myles (21 July 2022). "Google's Carbon programming language aims to replace C++". MyBroadband.
  9. Jackson, Joab (20 July 2022). "Google Launches Carbon, an Experimental Replacement for C++". The New Stack.
  10. Mustafa, Onsa (20 July 2022). "Carbon, A New Programming Language from Google As A C++ Successor". PhoneWorld.
  11. "carbon-lang/LICENSE". GitHub. 16 June 2020. Retrieved 24 July 2022.
  12. "carbon-lang/docs/images/snippets.md at trunk · carbon-language/carbon-lang". GitHub. Retrieved 16 December 2023.
[edit]