mcpField
C
carbon-lang

carbon-lang

github.com/mohitmishra786開発269265 回インストール18 週間前に更新
リポジトリ

carbon-lang について

Carbon の評価や実験を行う開発者向けのガイドです。基本構文、C++ との双方向連携、ツールチェーンのビルド、実験段階のメモリー安全モデルを扱い、1.0 前の制約も説明します。

主な機能

  1. 01Carbon の基本構文の習得
  2. 02Carbon.h による C++ 連携
  3. 03carbon-toolchain のソースビルド
  4. 04checked borrows の確認
  5. 051.0 前の制約の把握

活用シーン

  1. 01C++ からの段階的移行の評価
  2. 02Carbon から C++ ライブラリーを呼び出す
  3. 03Carbon ツールチェーンの実験
  4. 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;
}
CarbonC++での相当表現
fn関数
var x: i32int32_t x
class / interfaceclass / 純粋仮想関数
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パイプライン

コメント