C2はブートローダやカーネル、ドライバ、システムレベルのツールといった低レベルプログラムに適したC言語の進化を目指した、新しいプログラミング言語である。

C2の基本理念は、C言語のよい部分を維持しながら、40年以上を経た古い言語の部分を捨てることにある、と作者のBas van den Berg氏は言う。C言語の望ましくない部分としては、コンパイル時間を大幅に遅くするヘッダファイルの使用、複雑な型定義構文などがある。C2ではこれらをモジュールシステムと、統一された型構文で置き換える。さらにC2では、完全なリンク時最適化(LTO)をサポートする統合ビルドシステムが導入され、マクロシステムも開発中である。

以下のコードは、典型的な“hello world”プログラムがC2でどのようなものになるのかを、モジュールやインポート、型システムと合わせて示したものだ。

module hello_world; import stdio as io; func i32 main(i32 argc, char*[] argv) { io.printf("Hello World!＼n"); return 0; }

C2では、OOサポートやガベージコレクションといった高度な機能の追加は目的ではない。

作者のBas van den Berg氏に話を聞いた。

InfoQ: C2の中心的な目標は何ですか？

Bas van den Berg: 私はC言語を20年ほど使っています。その間、ドライバの記述や修正、低レベルかつハイパフォーマンスなアプリケーション、リアルタイムシステムなどでC言語を使用してきました。典型的なCユーザです。C言語が本当に好きなのですが、時代を感じる部分もあります。C言語の領域(低レベル、カーネルなど)に進出している他の言語を知らないので、同じ問題を今後20年間、何度も何度も解決したくないと思って、C2を始めたのです。ですから、C2の大きな目標は、C言語で一般的な問題を解決し、開発者エクスペリエンスを改善することにあります。

InfoQ: 既存のCコードベースがC2に移行する可能性についてはどうでしょう？どのようなメリットがあるのでしょうか？

van den Berg: C言語のプログラムはそれ単独で開発するよりも、他の(C言語)ライブラリを使用する場合の方がはるかに多いのですが、C2にも同じことが言えます。ですから、C2のプログラムはC言語ライブラリを簡単に利用できなければなりませんし、C言語ライブラリとC2ライブラリを統合できる必要もあります。デモとして私は、LuaとVulkanのインターフェースを数日でC2に“移植”しました。この作業の成果は、c2_examplesのデモ実装で見ることができます。C2の感触を得るために私が個人的に行なっているのは、C言語のプログラムをC2に移植して、難しい問題がないかを確認する作業です。C2に問題があれば修正します。この方法で構文を改善しているのです。現行のC言語プログラムの移植には、プログラム全体の最適化が容易になることや、コンパイル時間の大幅な短縮といったメリットがあります。

InfoQ: 言語やツーリングの現時点での完成度はどうですか？実用可能なレベルに達しているのでしょうか？

van den Berg: 現在の形式でC2を業務のコードとして使用するのはお勧めしませんが、小規模なプロジェクトならば、間違いなく可能です。ただし、構文がまだ固まっていないので、アップデートによってプログラムが動かなくなる可能性はあります。 C2で変更される領域としてはマクロサブシステムの追加(現在はまだ設計中)と、ライブラリサブシステムを拡張して、ソースライブラリや、Cargo風のツールで外部パッケージが管理できるようになります。現在はライブラリシステムの開発中で、今年第２四半期から段階的にリリースする予定です。マクロシステムはその後に予定しています。

van den Berg氏自身の経験によると、C2によって開発速度を30パーセント向上することができる。C2はオープンソースで、Linux、macOSおよびWindowsにインストール可能である。