Microsoftが、C言語を拡張した独自言語「Checked-C」の仕様をオープンソース化した。
Checked CはC言語にポインタの境界チェック機能を追加したことが名前の由来となっている。チェックに対応する新しい種類の配列型やポインタ型が追加されており、スコープを指定してチェックを強制することもできる。
何故Microsoftが、このような言語拡張を開発したのかはちょっと想像できない。C++の機能改善や機能拡張により、バッファオーバフローをなるべく早く検出したり、valgrindなどの様々なソフトウェアを拡張することで、独自言語を作るまでもなくその機能を補うことはできるように思うが、そこは内部の事情があるのだろうか。
それにしても、開発効率を上げるためなら言語から作り上げるというのは、AppleのSwift、GoogleのGoと言い、かなり重要なテーマなのだろうか。
Checked-Cの仕様書を手に入れる
Checked-Cは、LaTeXのソースコードとして配布されている。
Linuxの環境でリポジトリをチェックアウトして、ビルドしてみよう。
# UbuntuにてLaTeXのインストール sudo apt-get install texlive-lang-cjk sudo aptitude install texlive-latex-extra git clone https://github.com/Microsoft/checkedc.git cd checkedc/ make
これで、checkedc.pdfが生成される。
最初のイントロダクションを読んだだけだが、大きな特徴としてはやはりポインタだ。C言語のポインタ*以外に、3種類のポインタを導入する。境界チェックの必要ないptr型、ポインタの算術演算が可能な配列array_ptr、動的に境界が変動するspan型を導入する。
checked修飾子を付けた配列を導入する。例えば、
int a checked[10];
は、配列を参照した際に常に境界チェックが行われる。
void add(int a checked[2][2], int b checked[2][2]) { for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { a[i][j] += b[i][j]; } } }