11月17日、海外のテクノロジーメディアThe Registerが「Rust haters, unite! Fil-C aims to Make C Great Again」と題した記事を公開した。
この記事では、CとC++プログラミング言語を使用し続けたいと考える開発者に向けて、メモリ安全性を備えた新しいCフレーバー「Fil-C」について詳しく紹介されている。以下に、その内容を紹介する。
Fil-Cは、CおよびC++との100%の互換性を目指しつつ、メモリ安全性を提供するプログラミング言語である。このプロジェクトは、Epic Gamesのシニアディレクターであるフィリップ・ピズロ氏の個人的な取り組みで、既存のC/C++コードを再コンパイルするだけでメモリ安全なコードを実現することが可能だとされている。
米国政府を含む多くの関係者は、メモリ管理が手動で行われるCとC++の安全性に関心を持ち、より安全なプログラミング言語への移行を推奨している。Rustや他のメモリ安全な言語に移行する動きが加速している中で、Fil-Cは再教育の負担なく、安全性を高めるための一つの選択肢として登場した。
Fil-Cの特徴と制約
- メモリ安全性の実現:Fil-Cは、既存のCおよびC++コードと高い互換性を持ちながら、メモリ安全性を提供する。ピズロ氏は、Rustなどの新しい言語に依存せず、Cの利点を活かしたままメモリ管理のリスクを軽減することを目指している。
- 対応環境:現在、Fil-CはLinux/x86_64でのみ動作する。
- パフォーマンス:通常のCよりも1.5倍から5倍程度の速度低下が見られるが、最適化が進めば「最悪のケースで1.5倍の遅さ」に改善される見込みである。このパフォーマンス低下の一因として、ポインタの境界や型を追跡するための「MonoCaps」メソッドが挙げられており、これはメモリ安全性を維持するために使用されている。また、標準Cとは異なる呼び出し規約や動的リンクがパフォーマンスに影響しているとされる。
- 互換性の制約:完全なABI互換性はなく、Fil-Cでコンパイルされたコードと通常のC/C++コードを混在させると、メモリ安全性が損なわれる可能性がある。
使用可能なプロジェクト
現時点で、bzip2、zip、pcre、ncursesなどのプログラムは変更なくFil-Cでコンパイルできる。一方で、CPython、SQLite、OpenSSHなどのコードはわずかな変更が必要である。
ピズロ氏は、自身がFil-Cを開発する動機について、「Rustへの依存をなくすため」と述べている。Rustはメモリ安全性を備えた優れた言語として注目されているが、学習が難しいとの指摘があり、CやC++に精通した開発者には抵抗感がある。この背景から、Fil-Cはそのニーズに応えるために誕生したとされる。
詳細は[Hate Rust? Fil-C aims to Make C Great Again]を参照していただきたい。