C--

C--（シーマイナスマイナス）は、人間ではなくコンパイラが生成することを想定したC言語風のプログラミング言語（中間言語）である。Haskell処理系のデファクトスタンダードであるGlasgow Haskell Compilerが、複数ある中間言語の一つとして採用している。
歴史.
1990年代、マルチプラットフォームのプログラミング言語は、元言語ソースコードをC言語ソースコードへトランスパイルして、C言語ソースコードを対象プラットフォームマシンコードへコンパイルしていた。C言語コンパイラは多様なプラットフォームのマシンコード出力をサポートしていたため、C言語を中間言語として採用することは現実的に利にかなった手法である。しかし、C言語は人間が読み書きするプログラミング言語として設計されているため、機械が処理してトランスパイルして生成する中間言語としては最適設計ではなかった。例えば、C言語ではガベージコレクションや例外処理は意図的に言語仕様に組み込んでおらず、それらの機能を利用したプログラミング言語からC言語へのトランスパイルは一部機能が利用不可となる制限がありえた。
1997年、それらの課題を解決するため、ノーマン・ラムゼーはC--をImplementing Functional LanguagesワークショップでC--: A Portable Assembly Languageのタイトルで、コンパイラが扱うC言語に代わる中間言語として発表した。C--は人間が読み書きするプログラミング言語としての特性より機械が処理する中間言語としての特性を重視し、多種プログラミング言語をフロントエンドに置きうるバックエンド仕様、マルチプラットフォームのマシンコード値型、ガベージコレクション・例外処理などのランタイムインターフェースを提供した。
1999年5月23日、C--バージョン1の言語仕様リファレンスがリリースされた。
2005年2月23日、C--バージョン2の言語仕様リファレンスがリリースされた。
2003年10月6日から2006年10月31日までの間、C--およびQuick C--の開発はアメリカ国立科学財団の支援を受けていた。
設計.
C--は、人間が読み書きするためのプログラミング言語としてではなく、マシンが解釈するアセンブリ言語として設計されている。C--コードは極力プラットフォームアーキテクチャに依存せず、直交性・最小性より性能・利便性を重要視した言語仕様である。C--の文法は、C言語の言語仕様に似たプログラミング言語の特徴を持っている。
処理系.
C--コードをマシンコードにコンパイルする処理系は複数存在する。2018年現在、大半の処理系がソースコードの公開を含めメンテナンスされていない。