carbon-lang について
Carbon の評価や実験を行う開発者向けのガイドです。基本構文、C++ との双方向連携、ツールチェーンのビルド、実験段階のメモリー安全モデルを扱い、1.0 前の制約も説明します。
主な機能
- 01Carbon の基本構文の習得
- 02Carbon.h による C++ 連携
- 03carbon-toolchain のソースビルド
- 04checked borrows の確認
- 051.0 前の制約の把握
活用シーン
- 01C++ からの段階的移行の評価
- 02Carbon から C++ ライブラリーを呼び出す
- 03Carbon ツールチェーンの実験
- 04本番利用への準備状況の評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill carbon-langインストール後、Claude Code で/carbon-langを入力して読み込まれたか確認します。
詳細
Carbon
目的
エージェントがCarbonプログラミング言語を理解できるよう、構文の基礎、Carbon.h を介した双方向のC++相互運用、carbon-toolchain を使ったソースからのビルド、実験段階のメモリ安全性モデル(チェック付き借用)、現在の1.0以前の制限事項、そしてCarbonを評価するかC++を使い続けるかの判断について説明します。
使用する場面
- C++への依存が多い新規プロジェクトでCarbonを評価する場合
- CarbonからC++ライブラリを呼び出す場合、またはCarbonをC++に公開する場合
- GitHubのソースからCarbonツールチェーンを試す場合
- C++コードベースからCarbonへ移行する道筋を理解する場合
- 本番環境で使用できる段階かどうかを評価する場合(現在は実験段階です)
- Carbonの使いやすさをモダンC++(C++20/23)と比較する場合
ワークフロー
1. プロジェクトのステータスを把握する
Carbon (2026 state)
├── Experimental — no 1.0 release
├── Focus: C++ interoperability and migration
├── No production stdlib equivalent to C++ yet
└── Toolchain under active development
チームが不安定さを受け入れない限り、本番システムではなく、調査や移行のプロトタイプ作成にCarbonを使用してください。
2. carbon-toolchainをビルドする
git clone https://github.com/carbon-language/carbon-lang
cd carbon-lang
# Prerequisites: LLVM, Clang, CMake, Ninja
./scripts/run_bazelisk.py build \
//toolchain:install \
--symlink_prefix=carbon/
# Add to PATH
export PATH="$PWD/carbon/bin:$PATH"
carbon --version
# Online explorer (Compiler Explorer instance)
# http://carbon.compiler-explorer.com/
3. 基本構文
package Sample api;
fn Add(a: i32, b: i32) -> i32 {
return a + b;
}
fn Main() -> i32 {
var x: i32 = 3;
var y: i32 = 4;
Print(ToString(Add(x, y)));
return 0;
}
| Carbon | C++での相当表現 |
|---|---|
fn | 関数 |
var x: i32 | int32_t x |
class / interface | class / 純粋仮想関数 |
impl | メソッド定義 |
package | 名前空間/モジュール |
4. C++相互運用 — CarbonからC++を呼び出す
// math.h (C++ header)
#pragma once
namespace Math {
int Add(int a, int b);
}
// Carbon imports C++ via library directive
package MathInterop api;
import Math;
fn Main() -> i32 {
var sum: i32 = Math.Add(3, 4);
return sum;
}
相互運用では、Clangを使ってC++ヘッダーを解析し、Carbonバインディングを生成します。
5. Carbon.h — CarbonをC++に公開する
// Exported for C++ consumption
package MyLib api;
export fn PublicApi() -> i32 {
return 42;
}
// C++ side includes generated Carbon headers
#include "carbon/generated/MyLib.h"
int main() {
return MyLib::PublicApi();
}
ビルドシステムは、Carbonツールチェーンのドライバーを介してCarbonのオブジェクトファイルをC++とリンクします。
6. メモリ安全性 — チェック付き借用(実験段階)
// Conceptual — API evolving
fn Process(data: i32*) -> i32 {
// Checked borrow: compiler tracks lifetime
var ref: i32* = data;
return *ref;
}
Carbonは、ガベージコレクションを使わずにメモリ安全性を実現することを目指しています。チェック付きポインターと所有権セマンティクスを採用しています。機能の成熟度はそれぞれ異なるため、最新の設計ドキュメントを確認してください。
7. 現在の制限事項
- C++の
<vector>、<thread>などに相当する安定した標準ライブラリがありません - ツールチェーンのAPIはリリースごとに変更されます
- IDEのサポートはC++やRustに比べて限られています
- クロスコンパイルの環境は未成熟です
- コミュニティとパッケージエコシステムは小規模です
8. CarbonとC++の判断フローチャート
Choose Carbon exploration when
├── Large C++ codebase to gradually migrate
├── Team wants improved syntax with C++ interop
└── Can tolerate toolchain churn
Stay on C++ when
├── Production stability required now
├── Need full stdlib, Boost, mature tooling
├── Heavy template metaprogramming investment
└── Platform support beyond Carbon targets
9. Carbonファイルをビルドする
# Compile and link (toolchain evolving — check docs)
carbon compile sample.carbon --output=sample.o
carbon link sample.o --output=sample
# Typecheck only
carbon compile --phase=check sample.carbon
# Or build from source with Bazel in carbon-lang repo
./scripts/run_bazelisk.py build //toolchain:install --symlink_prefix=carbon/
よくある問題
| 症状 | 原因 | 対処方法 |
|---|---|---|
| LLVMが見つからずビルドに失敗する | LLVMのバージョンが違います | carbon-langのREADMEに記載されたLLVMのバージョンに合わせてください |
| C++のインポートエラーが発生する | サポートされていないC++機能を使っています | ヘッダーを簡素化するか、C APIでラップしてください |
| チュートリアルから構文が変更されている | 1.0以前の頻繁な変更です | carbon-langの最新ドキュメントを確認してください |
| タスクに必要な標準ライブラリがありません | まだ実装されていません | 一時的にC++ライブラリと接続してください |
| ExplorerとCLIで動作が異なります | バージョンが異なります | 両方で同じコミットを使用してください |
| C++とのリンクエラーが発生する | ABIが一致していません | Carbonツールチェーンのリンクドライバーを使用してください |
関連スキル
skills/compilers/cpp-templates— 移行元となるC++skills/compilers/cpp-modules— C++20モジュールとの比較skills/compiler-internals/compiler-frontend— Carbonコンパイラーのアーキテクチャskills/languages/hare-lang— 代替となるシステム言語skills/compilers/clang— Carbon向けClangバックエンドskills/compilers/llvm— LLVM IRパイプライン
コメント
Markdown 対応