なんで?| | 目標| ステータス| はじめに| 参加しませんか
CppNorthから の発表ビデオをご覧ください。Carbon は 使用できる状態ではないことに注意してください。
高速で C++ で動作
現代的で進化している
オープンソース コミュニティの歓迎
C++ は、パフォーマンスが重要なソフトウェアの主要なプログラミング言語であり続けており、コードベースと投資が大幅に増加しています。しかし、上で概説したように、開発者のニーズを改善して満たすのに苦労しています。C++ を段階的に改善する ことは、技術的負債自体とその進化プロセスの課題の両方のために、非常に困難です。これらの問題に対処する最善の方法は、C または C++ の遺産を直接継承することを避け、代わりに、 最新のジェネリック システム、モジュラー コード編成、一貫性のある単純な構文などの強固な言語基盤から始めることです。
Go、Swift、Kotlin、Rust など、既存の最新の言語はすでに優れた開発者エクスペリエンスを提供しています。これらの既存の言語のいずれかを使用できる開発者は、 . 残念ながら、これらの言語の設計は、C++ からの採用と移行に対して大きな障壁となっています。これらの障壁は、ソフトウェアの慣用的な設計の変更からパフォーマンスのオーバーヘッドにまで及びます。
Carbon は基本的に、 C++ を段階的に進化させる試みではなく、後継言語アプローチです。これは、C++ との相互運用性、および既存の C++ コードベースと開発者のための大規模な採用と移行を中心に設計されています。C++ の後継言語には、次のものが必要です。
このアプローチにより、C++ の既存のエコシステムの上に構築し、既存の投資、コードベース、および開発者集団をもたらすことができます。他のエコシステムでこのモデルに従った言語がいくつかあり、Carbon は C++ で同様の役割を果たすことを目指しています。
以下をサポートするように Carbon を設計しています。
多くの言語がこれらの目標のサブセットを共有していますが、Carbon を際立たせているのはそれらの組み合わせです。
また、Carbon には明確な非目標があり、特に次のようなものがあります。
私たちの詳細な目標ドキュメントは、これらのアイデアを具体化し、Carbon プロジェクトと言語の目標をより深く理解できるようにします。
Carbon Language は現在、実験的なプロジェクトです。動作するコンパイラまたはツールチェーンはありません。compiler-explorer.comで、Carbon のデモ インタープリターを確認できます 。
私たちは、後継言語の基準を満たす言語を構築できるかどうか、また、結果として得られる言語が、より大きな C++ 業界およびコミュニティ内でクリティカル マスの関心を集めることができるかどうかをよりよく理解したいと考えています。
現在、Carbon プロジェクトと言語の両方のいくつかの主要な側面を具体化しています。
貢献することに興味がある場合は、0.1 言語の設計を 完成させ、この設計の Carbon Explorer の実装を完成させるのを手伝って ください。現在、C++ コミュニティからより幅広いフィードバックと参加を得られるよう取り組んでいます。それ以上に、C++ の相互運用性と、0.1 言語を実装し、Carbon をより詳細に評価するために使用できる現実的なツールチェーンを優先する予定です。
詳細については、完全なロードマップをご覧ください。
すでに C++ の開発者であれば、Carbon は簡単に習得できるはずです。これは、親しみやすく、読みやすく、理解しやすい言語構造の一貫したセットから構築されています。
次のような C++ コード:
次の Carbon コードに対応します。
オーバーヘッドなしで C++ から Carbon を呼び出すことができ、その逆も可能です。これは、単一の C++ ライブラリをアプリケーション内の Carbon に移行するか、既存の C++ への投資の上に新しい Carbon を作成することを意味します。例えば:
Carbon での C++ 相互運用について詳しくは、こちらをご覧ください 。
Carbon と C++ 間の相互運用性を超えて、慣用的な C++ コードを Carbon コードに機械的に変換し、既存の C++ コードベースを Carbon に切り替えるのに役立つ移行ツールのサポートも計画しています。
Carbon は、 シームレスな C++ 相互運用のためのオプトイン テンプレート を引き続きサポートしながら、チェックされた定義を備えた最新のジェネリック システムを提供します。チェック ジェネリックには、C++ テンプレートと比較していくつかの利点があります。
これらの利点を犠牲にすることなく、Carbon ジェネリックは特殊化をサポートし、パフォーマンスが重要な C++ テンプレートのユース ケースに完全に対応できるようにします。Carbon のジェネリックの詳細については、その 設計を参照してください。
C++ との簡単で強力な相互運用性に加えて、Carbon テンプレートを制約し、細かい粒度でスムーズな進化パスを使用して、チェック済みジェネリックに段階的に移行できます。
安全性、特に メモリの安全性は、C++ にとって依然として重要な課題であり、後継言語が対処する必要があるものです。私たちの最初の優先事項と焦点は、安全な空間で重要で簡単に達成できる成果にすぐに対処することです。
コードを Carbon に移行できるようになると、デザイン スペースに必要な注釈や機能を追加する余地のある単純化された言語と、より安全なデザイン パターンをサポートするためのジェネリックなどのインフラストラクチャが得られます。長期的には、これに基づいて安全な Carbon サブセットを導入します。これは大規模で複雑な作業になり、0.1 の設計には含まれません。その間、Rust にインスパイアされたライフタイム アノテーションなどのメモリ セーフ セマンティクスを C++ に追加する取り組みを注意深く観察し、そこから学んでい ます。
コンパイラはまだないため、Carbon を試すには、Carbon エクスプローラーを使用して Carbon コードを解釈し、その出力を出力できます。compiler-explorer.comですぐに試すことができます 。
Carbon Explorer を自分で構築するには、次の手順に従います。
# Install bazelisk using Homebrew.
$ brew install bazelisk
# Install Clang/LLVM using Homebrew.
# Many Clang/LLVM releases aren't built with options we rely on.
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"
# Download Carbon's code.
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
# Build and run the explorer.
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon
これらの手順は、Homebrewがインストールされていることを前提としています。より広範なツールの説明については、コントリビューション ツールのドキュメントを参照 してください。
Carbon プロジェクトの詳細については、次を参照してください。
Carbon は、誰もが貢献できる歓迎的で包括的な環境に取り組んでいます。