ATS における外部の型と値

外部の型や値を簡単に ATS 言語に取り込むことができます。 また、それはC言語で宣言された型や値に関連付けさせることができます。

some_type_in_c とう名前でC言語の型が定義されていると想像してください。 この型は $extype"some_type_in_c" のように ATS 言語から参照することができます。 例えば次のコードのように、C言語でのいくつかの型を ATS 言語に取り込んで型定義できます:

typedef Cint = $extype"int" typedef Clint = $extype"long int" typedef Cllint = $extype"long long int" typedef Cint2 = $extype"struct{ int x; int y; }"

some_value_in_c という名前のC言語の値があった場合、 この値を $extval(T, "some_value_in_c") のように ATS から参照することができます。 この T はこの値に割り当てる ATS の型です。 例えば次のコードのように、C言語でのいくつかの外部定義の値を ATS 言語に取り込んでマクロ定義できます:

macdef NULL = $extval(ptr, "0") macdef stdin_ref = $extval(FILEref, "stdin") macdef stdout_ref = $extval(FILEref, "stdout")

また次のコードのように、C言語の関数を参照する外部定義の値を作ることができます:

macdef atoi = $extval(string -> int, "atoi") macdef atol = $extval(string -> lint, "atol") macdef atof = $extval(string -> double, "atof")

C言語の関数を直接参照するために、より適切な方法が ATS にはあることに注意してください。 一般に、ATS で外部定義の値を使う主な用途は、C言語の定数宣言を直接 ATS コードに関連付けることです。