2022年の完成に向けて、C言語委員会(C committee)が進めるC2x標準が、その進化を開始した。InfoQでは今回、同委員会における新標準の推進役であり、Modern Cの著者であるJens Gustedt氏と話す機会を得ることができた。

Gustedt氏は先日、現時点までの委員会の作業成果を取りまとめ、新標準として最初のワーキングドラフトを公開した。現在のC17標準に対する、主にバグ修正を目的とした作業の他、C2xには、言語の改善を目的とした標準の変更が含まれる予定である。

InfoQ: 次期C標準の主な目標は何ですか？何がCを進化させるのでしょう？

Jens Gustedt: 新C標準の開発は、その主な目標を定めた宣言書に従っています。ここでポイントとなるのは、標準とは既存のプラクティスを述べたものであって、それ自体を発明するものではない、ということです。発明は可能な限り、既存のCコンパイラであれ、他のプログラミング言語(デファクト、主にC++)からであれ、現場で行われるべきです。従って活動の多くは、既存の機能のクリーンアップ、文言のあいまいさの追放、エッジの除去、毎日のコーディング活動を円滑にするような不足機能の追加、といったことのためです。

InfoQ: 言語にはどのような変更が行われるのでしょうか？重要だと思われる新機能について、いくつか例をあげて頂けますか？

Gustedt: 言語やライブラリのレベルでは、プログラマが直接目にするような決定は、今のところあまり行なわれていません。ただし提案は常に受け入れています。私としては、C++の機能のいくつかをCに取り込みたいと思っています。属性や、すべてのデータ型に対する何らかの形式でのコンパイル時定数、そしておそらくは、初期値からの型推測(C++の auto 機能のようなもの)などが対象になります。また、Cが初期段階から引きずっている、 errno による雑なエラー返却規約を置き換えられるような新たな呼び出し規約のために、C++と歩調を合わせた取り組みもしています。C++委員会との連携を確保してくれる人が何人かいて、これらの問題に関して優れた仕事をしています。 しかしC標準には、もうひとつの重要な役割があります。私たちのコンピュータアーキテクチャや他のプログラミング言語の基盤となるマシンモデルを、基本的に設定しているものだからです。C標準ではこれを“抽象状態マシン(abstract state machine)”と呼んでいます。ここでの重要な機能としては、最新のIEEE浮動小数点仕様をC標準に統合することをすでに検討中です。“メモリモデル”を改訂するワーキンググループも立ち上げています。ここではプログラマがコンピュータメモリ内の素のデータ表現をどのように操作する可能性があるのか、あるいはないのか、それは実行可能なオプティマイズにどのような影響を及ぼし得るのか、このようなバイトないしビットレベルの操作を安全かつセキュアにするにはどうすればよいか、といった課題に取り組んでいます。作業はPeter Sewell氏(その他)の論文である“pointer provenance”に基づいて行われており、C言語が提供するさまざまなシステムソフトウェアやアプリケーションの共通基盤に適したメモリモデルを提供できるものと期待しています。

InfoQ: 最近ではRustやSwift、Dart、Goといったネイティブ言語(インタプリタやJVM言語に対して)が大きな注目を集めています。C++はもちろん、その着実な進化の一端を担っています。そのような中で、Cが特に優れていると思われる用途や、アプリケーションドメインといったものを端的に表現できるでしょうか？

Gustedt: Cの最も重要な利点は、効率性、可搬性、そして安定性です。これらがソフトウェア開発の重要な懸念事項である場合には、Cが重要な選択肢として見なされるべきです。 効率性: ここでの効率性には、エネルギとメモリの効率性(小型ないしポータブルデバイス、衛星など)、実行時の効率性(中～大規模の計算集約型処理)、速度(科学的な視覚化、ゲーム、ネットワーク通信)など、さまざまな意味があります。これらの分野で、Cの効率性に匹敵するものはありません。他のプログラミング言語には大量のメモリ間接参照、動的な振る舞い、肥大化によって、効率性を犠牲にする傾向があるからです。 可搬性: Cの抽象状態マシンは、ほぼ任意の計算デバイス上への移植性を実現します。このコンセプトは極めて良好に機能しています – 新しいCPU(あるいは既存仕様に対する追加機能)用に開発される最初のソフトウェアコンポーネントは、一般的にCコンパイラです。そうすることで、Cで記述されたコード、特にOSや他のシステムソフトウェアが、短期間に移植されます。新たなアーキテクチャを低コストで立ち上げることが可能なのです。これはまた、膨大な数のソフトウェアプロジェクトにとってもメリットがあります – Linuxディストリビューションは何千という数のソフトウェアパッケージのコレクションですが、新たなアーキテクチャにも比較的容易に移植可能であるため、既存の主流プラットフォームの発展に歩調を合わせています。 安定性: C言語委員会は、ユーザのコードベースの安定性を保証するため、特に努力をしています。機能の破棄(deprication)はまれであり、ごくわずかです。現在記述した正しいCコードは、20年後もわずかな修正のみでコンパイルし、実行することが可能です。80年代や90年代に記述されたコードが現在でも実行できることと同じです。さらにCの機能は限定的であるため、優良なエンジニアリングスクールであれば、大学院レベルでマスタされているはずです。そのため、数年から数十年にわたってメンテナンスを保証することが可能です。Cでの“レガシ(Legacy)”は、他とはまったく違う意味を持っています – 優れたCコードは真の資産であって、負債にはなり得ません。

Gustedt氏はフランス国立情報学自動制御研究所(INRIA)とICube研究所に勤務し、ICPS(並列科学計算)研究チームの代表を務めている。