Chapter 2. 拡張子

ATS では、拡張子 .sats.dats がそれぞれ静的と動的なファイルを表わすために予約されています。 これら2つの拡張子が付いたファイルは atscc によって解釈される特別な意味をもっていて、 それらを任意の拡張子に置き換えてはいけません。

静的なファイルは次の要素を含みます: 種 (sort) 定義, データ種 (datasort) 宣言, 静的な定義, 抽象型 (abstract type) 宣言, 例外宣言, データ型 (datatype) 宣言, マクロ定義, 動的な値と関数のインターフェイス, などです。 機能的な観点では、ATS の静的なファイルは (拡張子 .h を持つ) C言語のヘッダファイルや (拡張子 .mli を持つ) OCaml のインターフェイスファイルに幾分似ています。

動的なファイルは静的なファイルの持ちうる全ての要素を含むことができます。 さらに、動的な値と関数の定義を含むこともできます。 けれども、動的なファイルにおける関数と値のインターフェイスにはキーワード extern を付ける必要があります。 一方で、静的なファイルにおいてそのようなインターフェイスを宣言する時にはこのキーワードは不要です。 例えば、次の構文では静的なファイルにおいて pi という名前の値と area_of_circle という名前の関数のインターフェイスと型を宣言しています:

val pi : double fun area_of_circle (radius: double): double

動的な ファイルにおいて同じインターフェイスを宣言する際には、次のような少し異なる構文が用いられます:

extern val pi : double extern fun area_of_circle (radius: double): double

本質的に、静的なファイルは動的なファイルの特殊形であることに注意してください。 静的なファイルを動的なファイルによって完全に置換することは可能です。

慣習的に、ある作法で ATS コードと結合することを想定したC言語コードを含むファイルを表わすのに拡張子 .cats をしばしば使います。 また、他のファイルに含まれる ATS コードをインクルードするために時々用いられる拡張子 .hats もあります。 けれども、これら2つの拡張子の使用は強制されるものではありません。 必要であれば、それらの拡張子を置き換えることができます。