⚒️

Carbon Language が発表されたので実際に動かしてみた

2022/07/20に公開

はじめに

2022/07/19、C++ の後継言語の Carbon が発表されました。

https://github.com/carbon-language/carbon-lang

最大の特徴としては、C++ との双方向の相互運用性です。
TypeScript や Kotlin と役割が近いですね。

Rust でいいのでは?

はい、その認識で間違いないようです。
公式の FAQ でも「f you can use Rust, ignore Carbon」と記載されています。
あくまで、C++ に大きく依存するプロジェクト向けのようです。

Editor は?

contribution_tools に記載されている通り、基本的には Vim で、数名 Visual Studio Code を利用しているメンバーがいるくらいのようです。
ただ、Carbon 用のプラグインはまだないようなので、本格的に開発するのはまだまだ難しそうです。

言語仕様

Language design に記載されています。
まだ、暫定的なものと記載されていますが、思っている以上に充実している印象です。

構造体・タプル・型推論・ジェネリックなど、色々と便利なものが揃っていて今後が非常に楽しみです。

動かしてみよう

以下の手順で Carbon explorer を用いて任意の carbon ファイルを実行できます。

# Homebrew (macOS or Linux 用のパッケージマネージャー) をインストール
# すでにインストール済みの場合は `brew upgrade`
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# bazelisk (ビルドツール) をインストール
brew install bazelisk

# Clang/LLVM (コンパイラ) をインストール
brew install llvm

# パスを通す
# シェルが zsh の場合は `echo 'export PATH="$(brew --prefix llvm)/bin:${PATH}"' >> ~/.zshrc`
export PATH="$(brew --prefix llvm)/bin:${PATH}"

cd {Carbon をダウンロードするディレクトリ}
git clone https://github.com/carbon-language/carbon-lang
cd carbon-lang

# Desktop ディレクトリに hello.carbon を作成
cat <<EOF > ~/Desktop/hello.carbon
package sample api;

fn Main() -> i32 {
  let s: auto = "Hello world!";
  Print(s);
  return 0;
}
EOF
bazel run //explorer -- ~/Desktop/hello.carbon

オンラインコンパイラ

コンパイルが通るかどうかだけ気になる場合は Compiler Explorer を利用するのも良さそうです。

ちょっと遊んでみる

再帰関数を作って、フィボナッチ数を 10 番目まで表示してみました。

package sample api;

fn Fibonacci(x: i32) -> i32 {
  if (x == 0) {
    return 0;
  }
  if (x == 1) {
    return 1;
  }
  return Fibonacci(x - 1) + Fibonacci(x - 2);
}

fn Main() -> i32 {
  var count: i32 = 0;
  while (not (count == 10)) {
    let result: i32 = Fibonacci(count);
    count = count + 1;
    Print("{0}", result);
  }
  return 0;
}

おわりに

不動小数点の f32 を使おうとしたら Only i32 is supported for now: f32 と怒られてしまいました。。
つまり、まだ除算 / にも対応していなさそうで、安定するにはだいぶかかりそうだなぁと感じました。

自分の生きている世界線ではあまり触れることはなさそうですが、数年後、活躍している Carbon でまた遊んでみたいなと思います。

みなさんもぜひ一度試してみてはいかがでしょうか。

GitHubで編集を提案

Discussion