Carbon (programming language)
| Carbon | |
|---|---|
| A dark-gray circle with a white sans-serif letter "C" in the middle 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, 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 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, whilst 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 top of the C++ ecosystem the way in an analogous role to TypeScript to JavaScript, or Kotlin to 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]
| Carbon | C++ |
|---|---|
packageGeometry; importMath; classCircle{ varr:f32; } fnPrintTotalArea(circles:Slice(Circle)){ vararea:f32=0; for(c:Circleincircles){ area+=Math.Pi*c.r*c.r; } Print("Total area: {0}",area); } fnMain()->i32{ // A dynamically sized array, like `std::vector`. varcircles:Array(Circle)=({.r=1.0},{.r=2.0}); // Implicitly converts `Array` to `Slice`. PrintTotalArea(circles); return0; } |
importstd; usingstd::span; usingstd::vector; structCircle{ floatr; }; voidPrintTotalArea(span<Circle>circles){ floatarea=0.0f; for(constCircle&c:circles){ area+=std::numbers::pi*c.r*c.r; } std::println("Total area: {}",area); } intmain(){ vector<Circle>circles{{.r=1.0f},{.r=2.0f}}; // Implicitly converts `vector` to `span`. PrintTotalArea(circles); return0; } |
See also
[edit ]References
[edit ]- ^ a b "Carbon Language: An experimental successor to C++ - Chandler Carruth - CppNorth 2022". CppNorth. 22 July 2022 – via YouTube.
- ^ a b "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.
- ^ Bradshaw, Kyle (19 July 2022). "Carbon, a new programming language from Google, aims to be C++ successor". 9to5Google.
- ^ Carbon Language: Roadmap, carbon-language, 11 January 2024, retrieved 18 January 2024
- ^ "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.