== Clone of https://github.com/carbon-language/carbon-lang.git ==

Richard Smith b87d04bf9b Remove executable_semantics files that were accidentally re-created (#1227) il y a 4 ans
.github 6fe8411122 Refactor common script functionality and reimplement the buildifier pre-commit (#1080) il y a 4 ans
.vscode 3116c6ff5d Update vscode recommendations (#707) il y a 4 ans
bazel 309ec35f95 Rename executable_semantics to explorer (#1188) il y a 4 ans
common 9ec2a0bb98 Added googletest deps removed in #1215 as the deps are still required in strict headers mode for the googletest.h include (#1218) il y a 4 ans
docs 4a8ca9cd0f Rework operator interfaces (#1178) il y a 4 ans
explorer e85f45de10 Move CHECK lines in tests next to the line that caused the output. (#1224) il y a 4 ans
github_tools ad08148304 Specify gql version (#1039) il y a 4 ans
installers 309ec35f95 Rename executable_semantics to explorer (#1188) il y a 4 ans
migrate_cpp 9ec2a0bb98 Added googletest deps removed in #1215 as the deps are still required in strict headers mode for the googletest.h include (#1218) il y a 4 ans
proposals 4a8ca9cd0f Rework operator interfaces (#1178) il y a 4 ans
scripts 150057f260 Added GetRunfilesFile() to be able to reliably determine prelude location under various invocation scenarios il y a 4 ans
third_party 22462a0d7f Carbon fuzzing 3/3: added actual fuzzer implementation and a fuzzverter utility for investigating crashing protos (#1156) il y a 4 ans
toolchain 9ec2a0bb98 Added googletest deps removed in #1215 as the deps are still required in strict headers mode for the googletest.h include (#1218) il y a 4 ans
.bazelignore fbb0aa729b Update LLVM and switch to upstreamed Bazel BUILD. (#838) il y a 4 ans
.bazeliskrc 151f54e040 Update bazel version (#925) il y a 4 ans
.bazelrc 22462a0d7f Carbon fuzzing 3/3: added actual fuzzer implementation and a fuzzverter utility for investigating crashing protos (#1156) il y a 4 ans
.clang-format f44cf22924 Add a C++ style guide for the project (#113) il y a 5 ans
.clang-tidy f9014a6d10 clang-tidy with readability checks (#1148) il y a 4 ans
.codespell_ignore 1723b4e0b2 Hide `Interpreter` in .cpp (#1036) il y a 4 ans
.gdbinit dcc694c2e0 Auto-enable pretty-printing of libcxx in gdb. (#679) il y a 4 ans
.gitallowed cc4211442f Merge carbon-project-tools back into carbon-lang (#203) il y a 5 ans
.gitignore 07cee1b82a Switch to the Bazel disk cache (locally and in CI). (#579) il y a 4 ans
.pre-commit-config.yaml 309ec35f95 Rename executable_semantics to explorer (#1188) il y a 4 ans
.prettierrc.yaml a768b0ee19 Adjust copyrights based on carbon-project-tools/#3 (#171) il y a 5 ans
BUILD d550256c93 Delete the website and references (#782) il y a 4 ans
CODEOWNERS fa984743bf Update CODEOWNERS for the carbon-leads switch (#458) il y a 5 ans
CODE_OF_CONDUCT.md 24b763c7e8 Fix or remove invalid anchor links, adding pre-commit (#997) il y a 4 ans
CONTRIBUTING.md a13cecccc6 Updates docs for community changes (#489) il y a 5 ans
LICENSE 7e81d1c213 Fix typo 'langauge'. il y a 5 ans
README.md 309ec35f95 Rename executable_semantics to explorer (#1188) il y a 4 ans
WORKSPACE 22462a0d7f Carbon fuzzing 3/3: added actual fuzzer implementation and a fuzzverter utility for investigating crashing protos (#1156) il y a 4 ans
bazel-execroot e440b07eb3 Improve correctness of our Clang tooling infrastructure. (#392) il y a 5 ans
compile_flags.txt e476373d28 Cleanup the new dependencies and our tooling setup. (#943) il y a 4 ans
pyproject.toml a768b0ee19 Adjust copyrights based on carbon-project-tools/#3 (#171) il y a 5 ans
setup.cfg 797a33df02 Fix flake8 config (#1181) il y a 4 ans

README.md

Carbon language

The Carbon Language project is an experiment exploring a future direction for the C++ programming language.

Carbon goals | Carbon and C++ | Take a look | Join us

<img src="docs/images/quicksort_snippet.svg" align="right" width="575"

 alt="Quicksort code in Carbon. Follow the link to read more.">

Fast and works with C++

  • Performance matching C++ using LLVM, with low-level access to bits and addresses
  • Interoperate with your existing C++ code, from inheritance to templates
  • Fast and scalable builds that work with your existing C++ build systems

Modern and evolving

  • Solid language foundations that are easy to learn, especially if you have used C++
  • Easy, tool-based upgrades between Carbon versions
  • Safer fundamentals, and an incremental path towards a memory-safe subset

Welcoming open-source community

  • Clear goals and priorities with robust governance
  • Community that works to be welcoming, inclusive, and friendly
  • Batteries-included approach: compiler, libraries, docs, tools, package manager, and more

Carbon goals

We believe Carbon must support:

  1. Performance-critical software
  2. Software and language evolution
  3. Code that is easy to read, understand, and write
  4. Practical safety and testing mechanisms
  5. Fast and scalable development
  6. Modern OS platforms, hardware architectures, and environments
  7. Interoperability with and migration from existing C++ code

While many languages share subsets of these goals, what distinguishes Carbon is their combination. For the Carbon project, they are prioritized in the above order to help make clear what tradeoffs we intend to make. However, each and every goal remains critically important: Carbon must have excellent C++ interoperability and migration to be successful.

Read the language overview for more on the language design itself, and the goals for more on these values.

Carbon and C++

If you're already a C++ developer, Carbon should have a short learning curve. It is built out of a consistent set of language constructs that should feel familiar. C++ code like this:

<img src="docs/images/cpp_snippet.svg" width="600"

 alt="A snippet of C++ code. Follow the link to read it.">

can be mechanically transformed to Carbon, like so:

<img src="docs/images/carbon_snippet.svg" width="600"

 alt="A snippet of converted Carbon code. Follow the link to read it.">

without loss of performance or readability. Yet, translating C++ to Carbon isn't necessary; you can call Carbon from C++ without overhead and the other way around. You can port your library to Carbon, or write new Carbon on top of your existing C++ investment. Carbon won't add a sea of dependencies or slow down your performance-critical code. For example:

<img src="docs/images/mixed_snippet.svg" width="600"

 alt="A snippet of mixed Carbon and C++ code. Follow the link to read it.">

In terms of safety, any language that can seamlessly call C++ will not be perfectly safe in every dimension. However, Carbon's design encourages you to use safe constructs where possible.

Ultimately, C++ carries a significant historical legacy, including around ABI stability, that constrains its evolution. Carbon is an attempt to set a new direction for C++ developers that allows for fast development, flexibility, and delight without sacrificing performance, interoperability, and familiarity.

Read more about C++ interop in Carbon.

Take a look

Learn more about Carbon's design:

Join us

Carbon is committed to a welcoming and inclusive environment where everyone can contribute.