Carbon Language が発表されたので実際に動かしてみた
はじめに
2022/07/19、C++ の後継言語の Carbon が発表されました。
最大の特徴としては、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 でまた遊んでみたいなと思います。
みなさんもぜひ一度試してみてはいかがでしょうか。
Discussion