Content deleted Content added
No edit summary |
m rv IP 1 April 2024 |
||
(168 intermediate revisions by 85 users not shown) | |||
Line 1:
{{Short description|
{{Use dmy dates|date=
{{Infobox programming language
| name = Carbon
| logo = Carbon logo.png
| designer = [[Google]]
| typing = [[Static type|Static]], [[Nominal type system|nominative]], [[Type inference|partly inferred]]
| influenced by = [[C++]], [[Rust (programming language)|Rust]], [[Zig (programming language)|Zig]], [[Haskell (programming language)|Haskell]], [[Kotlin (programming language)|Kotlin]], [[Swift (programming language)|Swift]]<ref name="cppnorthkeynote-video" />
| programming language = [[C++]]
| license = [[Apache-2.0-with-LLVM-Exception]]
| file ext = <code>.carbon</code>
| website =
}}
'''Carbon''' is an experimental [[programming language]] designed for interoperability with [[C++]].<ref name="readme">{{cite web|title=README|url=https://github.com/carbon-language/carbon-lang/blob/trunk/README.md|quote="It is designed around interoperability with C++ as well as large-scale adoption and migration for existing C++ codebases and developers."|accessdate=2023-09-06}}</ref> The project is [[Open-source software|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.<ref name="cppnorthkeynote-sched" /><ref name="cppnorthkeynote-video" /><ref name="cppnorthkeynote-9to5google" /> 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.<ref>{{Citation |title=Carbon Language: Roadmap |date=2024-01-11 |url=https://github.com/carbon-language/carbon-lang/blob/trunk/docs/project/roadmap.md |publisher=carbon-language |access-date=2024-01-18}}</ref>
The language intends to fix several perceived shortcomings of C++<ref name="difficulties improving cpp" /> 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 (programming language)|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.<ref name="c1" /><ref name="c2" /><ref name="c3" /><ref name="c4" />
Carbon's documents, design, implementation, and related tools are hosted on [[GitHub]] under the [[Apache License|Apache-2.0]] license with [[LLVM]] Exceptions.<ref>{{Cite web |url=https://github.com/carbon-language/carbon-lang/blob/31df852738aea520a1a1800259120bc10ce7a005/LICENSE |title=carbon-lang/LICENSE |date=2020-06-16 |access-date=2022-07-24 |website=GitHub}}</ref>
==Example==
The following shows how a program might be written in Carbon and C++:<ref>{{cite web |title=carbon-lang/docs/images/snippets.md at trunk · carbon-language/carbon-lang |url=https://github.com/carbon-language/carbon-lang/blob/trunk/docs/images/snippets.md |website=GitHub |access-date=16 December 2023 |language=en}}</ref>
{{clear}}
<!--
Part of the Carbon Language project, under the Apache License v2.0 with LLVM
Exceptions. See https://github.com/carbon-language/carbon-lang/blob/9a7b7c2b8be3bcf288d29eb9b7afbf37fb471c1b/LICENSE for license information.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Source: https://github.com/carbon-language/carbon-lang/blob/9a7b7c2b8be3bcf288d29eb9b7afbf37fb471c1b/docs/images/snippets.md
-->
{| class="wikitable"
|-
! Carbon !! C++
|- style=vertical-align:top
| <syntaxhighlight lang="carbon" line="1">
package Geometry;
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;
}
</syntaxhighlight>
| <syntaxhighlight lang="c++" line="1">
#include <vector>
using namespace std;
struct Circle {
float32_t r;
};
void PrintTotalArea(span<Circle> circles)
{
float32_t area = 0;
for (const Circle& c : circles) {
area += numbers::pi * c.r * c.r;
}
print("Total area: {}\n", area);
}
int main() {
vector<Circle> circles{{.r = 1.0}, {.r = 2.0}};
// Implicitly converts `vector` to `span`.
PrintTotalArea(circles);
return 0;
}
</syntaxhighlight>
|}
==See also==
{{Portal|Computer programming}}
* [[Comparison of programming languages]]
* [[Timeline of programming languages]]
* [[C++]]
* [[D (programming language)|D]]
* [[Go (programming language)|Go]]
* [[Rust (programming language)|Rust]]
* [[Mojo (programming language)|Mojo]]
== References ==
{{Reflist|refs=
<ref name="cppnorthkeynote-sched">{{Cite web
|url=https://cppnorth2022.sched.com/event/140f8/keynote-chandler-carruth-nulbscience-experiment-timenulb?linkback=grid
|title=Scheduled events for Tuesday, July 19, 09:00 - 10:30
|work=CppNorth, The Canadian C++ Conference, July 17–20, 2022
|publisher=CppNorth
|via=Sched.com
|access-date=2022-07-21
}}</ref>
<ref name="cppnorthkeynote-video">{{Cite web
|url=https://www.youtube.com/watch?v=omrY53kbVoA
|title=Carbon Language: An experimental successor to C++ - Chandler Carruth - CppNorth 2022
|publisher=CppNorth
|via=[[YouTube]]
|date=2022-07-22
}}</ref>
<ref name="cppnorthkeynote-9to5google">{{cite web
|url=https://9to5google.com/2022/07/19/carbon-programming-language-google-cpp/
|last1=Bradshaw
|first1=Kyle
|title=Carbon, a new programming language from Google, aims to be C++ successor
|work=9to5Google
|date=19 July 2022
}}</ref>
<ref name="difficulties improving cpp">{{Cite web
|title=Difficulties improving C++
|url=https://github.com/carbon-language/carbon-lang/blob/b62b7464a4f99f9101edbe3ea5b76d6cb2cdbc9b/docs/project/difficulties_improving_cpp.md
|work=carbon-language/carbon-lang repo
|publisher=[[Google]]
|via=[[GitHub]]
|date=2022-07-21
}}</ref>
<ref name="c1">{{cite web
|url=https://github.com/carbon-language/carbon-lang/blob/trunk/docs/project/evolution.md
|first1=Chandler
|last1=Carruth
|first2=Jon
|last2=Ross-Perkins
|first3=Matthew
|last3=Riley
|first4=Sidney
|last4=Hummert
|title=Evolution and governance
|work=carbon-language/carbon-lang repo
|publisher=[[Google]]
|via=[[GitHub]]
|date=23 July 2022
}}</ref>
<ref name="c2">{{Cite web
|url=https://mybroadband.co.za/news/software/453410-googles-carbon-programming-language-aims-to-replace-c.html
|last=Illidge
|first=Myles
|title=Google’s Carbon programming language aims to replace C++
|work=MyBroadband
|date=21 July 2022
}}</ref>
<ref name="c3">{{Cite web
|title=Google Launches Carbon, an Experimental Replacement for C++
|url=https://thenewstack.io/google-launches-carbon-an-experimental-replacement-for-c/
|last=Jackson
|first=Joab
|date=20 July 2022
|work=The New Stack
}}</ref>
<ref name="c4">{{Cite web
|title=Carbon, A New Programming Language from Google As A C++ Successor
|url=https://www.phoneworld.com.pk/carbon-a-new-programming-language-from-google-as-a-c-successor/
|last=Mustafa
|first=Onsa
|date=20 July 2022
|work=PhoneWorld
}}</ref>
}}
== External links ==
* {{GitHub|carbon-language}}
* [https://docs.carbon-lang.dev/ Carbon language documentation]
* [https://carbon.godbolt.org/ Carbon at the Compiler Explorer (godbolt)]
{{Google FOSS}}
{{Google LLC}}
[[Category:Google]]
[[Category:Programming languages]]
[[Category:Statically typed programming languages]]
[[Category:Cross-platform software]]
[[Category:Object-oriented programming languages]]
[[Category:Programming languages created in 2022]]
[[Category:Google software]]
|