C–

 「C  – 」
C–(顕著 参照マイナスマイナス)でCライクな言語をプログラミング。そのクリエイター、関数型プログラミング研究者サイモンペイトンジョーンズとノーマンラムジーは、それがによって主に生成されるように設計されたコンパイラのための非常に高いレベルの言語ではなく、人間のプログラマによって書かれました。他の多くの中間言語とは異なり、その表現はプレーンASCIIテキストであり、バイトコードや別のバイナリ形式ではありません。
C–
パラダイム
命令
によって設計された
サイモンペイトンジョーンズとノーマンラムゼー
初登場 1997年 タイピング規律
静的、弱い
ウェブサイト
https://www.cs.tufts.edu/~nr/c–/index.html
に影響を受けた C C–には2つの主要なブランチが1つは元のC–ブランチで、最終バージョン2.0は2005年5月にリリースされました。もう1つは、GlasgowHaskellコンパイラによって中間表現として積極的に使用されているCmmフォークです。
内容
1 設計
2 型システム
3 実装
3.1 Haskell
4 も参照してください
5 参考文献
6 外部リンク
設計
C–は「ポータブルアセンブリ言語」であり、高品質のマシンコードを生成するコンパイラを実装するタスクを容易にするように設計されています。これは、コンパイラーにC–コードを生成させ、低レベルのコード生成と最適化のより困難な作業をC–コンパイラーに委任することによって行われます。
C–の作業は1990年代後半に始まりました。カスタムコードジェネレーターの作成はそれ自体が課題であり、当時の研究者が利用できるコンパイラーのバックエンドは複雑で文書化が不十分だったため、いくつかのプロジェクトではCコードを生成するコンパイラー(たとえば、元のModula-3コンパイラー)を作成していました。ただし、Cは関数型言語には適し末尾呼び出しの最適化を保証したり、正確なガベージコレクションや効率的な例外処理をサポートしたりすることはできません。C–は、これらすべてをサポートするCのより単純で、厳密に定義された代替手段です。その最も革新的な機能は、ポータブルガベージコレクター、例外処理システム、および任意のC–コンパイラーで動作するその他のランタイム機能の記述を可能にするランタイムインターフェイスです。
この言語の構文はCから大きく借用しています。可変個引数関数、ポインター 構文、Cの型システムの側面など、標準のC機能を省略または変更しています。これは、Cの特定の重要な機能と、コード生成ツールの使いやすさを妨げるためです。それを生成します。
言語の名前は冗談で、C ++が基本的にCの拡張形式であるのと同じように、C–がCの縮小形式であることを示しています(Cのような言語では、「-」と「 ++」は「デクリメント」と「インクリメント」を意味する演算子です。)
C–の最初のバージョンは1998年4月にMSRAペーパーとしてリリースされ、1999年1月のガベージコレクションに関するペーパーが付属していました。改訂されたマニュアルは1999年5月にHTML形式で投稿されました。 2000年にノーマンラムゼー(「提案された変更」)とクリスチャンリンディグ(「新しい文法」)によって提案された2セットの主要な変更はC–につながります。バージョン2は、2004年頃に完成し、2005年に正式にリリースされました。
型システム
C型システムは、高級言語によって課せられる規則ではなく、ハードウェアによって課せられる制約を反映するように意図的に設計されています。C–では、レジスタまたはメモリに格納されている値のタイプは、ビットベクトルの1つだけビットベクトルである多型のタイプと、いくつかの幅、例えば、に来るかもしれないbits8、
bits32、または
bits64。浮動小数点型の個別の32ビットまたは64ビットファミリがサポートされています。C–は、ビットベクトル型に加えて、ブール型boolも提供します
。これは、式で計算して制御フローに使用できますが、レジスタやメモリに格納することはできません。アセンブリ言語と同様に、signed、unsigned、float、pointerの区別など、より高度なタイプの規律は、言語内のC演算子またはその他の構文構造によって課せられます。
C–バージョン2では、ビットベクトル型と浮動小数点型の違いがなくなりました。プログラマーは、これらの型に文字列「kind」タグで注釈を付けて、特に変数の整数型と浮動型型、およびそのストレージ動作(グローバルまたはローカル)を区別することができます。最初の部分は、整数値と浮動小数点値に別々のレジスタがあるターゲットで役立ちます。さらに、ポインタとネイティブワードの特殊な型が導入されていますが、それらはターゲットに依存する長さのビットベクトルにマッピングするだけです。 C–は型チェックされておらず、呼び出し規約を強制またはチェックし:28
実装
C–の仕様ページには、C–のいくつかの実装がリストされています。「最も活発に開発された」コンパイラであるQuickC–は、2013年に廃止されました。 Haskell Cmmと呼ばれるC–方言は、GlasgowHaskellコンパイラの中間表現です。 GHCバックエンドは、LLVM IR、低速Cを介して、または組み込みのネイティブバックエンドを介して、C–を実行可能コードにさらに変換する役割を果たします。
Simon Peyton Jones、JoãoDias、Norman RamseyなどのCの開発者の一部は、Glasgow Haskellコンパイラに取り組んでいるか、取り組んできました。GHCでの作業は、C言語の拡張にもつながり、Cmm方言を形成しました。Cmmは、人間工学のためにCプリプロセッサを使用します。
当初の意図にもかかわらず、GHCはC–で一般的な最適化の多くを実行します。他のコンパイラIRと同様に、GHCではデバッグ用にC–表現をダンプできます。もちろん、ターゲット固有の最適化は、後でバックエンドによって実行されます。
も参照してください
icon  コンピュータプログラミングポータル
C ++ BCPL LLVM
参考文献
^ a b ノルディン、トーマス; ジョーンズ、サイモンペイトン; イグレシアス、パブロ・ノゲイラ; オリーバ、ディノ(1998-04-23)。「C言語リファレンスマニュアル」。 引用ジャーナルには|journal=(ヘルプ)が必要です ^ a b Reig、Fermin; ラムゼー、ノーマン; ジョーンズ、サイモンペイトン(1999-01-01)。「C–:ガベージコレクションをサポートするポータブルアセンブリ言語」。
引用ジャーナルには|journal=(ヘルプ)が必要です ^ a b c ラムゼー、ノーマン; ジョーンズ、サイモンペイトン。「C–言語仕様、バージョン2.0」(PDF)。
^ a b GHC解説:.cmmファイルとは一体何ですか? ^ ノルディン、トーマス; ジョーンズ、サイモンペイトン; イグレシアス、パブロ・ノゲイラ; オリーバ、ディノ(1999-05-23)。「C言語リファレンスマニュアル」。
^ 「C–ダウンロード」。www.cs.tufts.edu 。
^ 「改善されたLLVMバックエンド」。
^ GHCバックエンド ^ 最適化燃料を使用したコンパイラのデバッグ
外部リンク
古い公式ウェブサイトのアーカイブ(cminusminus.org)
クイックC–コードアーカイブ(リファレンス実装)

投稿日:
カテゴリー: C