SML# - FeatureInteroperability Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

我々SML#開発チームは,Cを代表とする既存言語とのシームレスな相互運用性
の実現が,MLなどの新しい言語の実用化にとって最も重要な要素と考える.

しかし残念ながら,対話型プログラム,高階関数,多相型システムなど通常の
機能を含むML系関数型言語は,そのデータ表現に関して,Cなどの既存言語と
の相互運用性を持っていない場合が多い.例えば,OCamlやStandard ML of
New Jerseyでは,整数型は計算機が操作できる整数表現ではなく,それが整数
データであることを示す1ビットのタグを含む31ビット表現であり,また,浮
動小数点データは,ヒープに割り当てられたポインターで表現され,構造体な
どに直接格納することはできない.

SML#では,整数や浮動小数点データは計算機が提供する自然な表現を持ち,
レコードや配列,リストなどの他のデータ構造に格納できる実装方式を実現し
た.これにより,対話型プログラム,高階関数,多相型などの関数型言語の優
れた機能を損なうことなく,他に類をみない高い相互運用性を実現している.
SML#の対話型環境から,Cで書かれたライブラリ関数をロードしSML#の関
数として使用することが可能である.スタブの作成やデータ変換などの手間は
一切必用としない.以下の簡単な例を用いて,SML#のFFIの機能を紹介する.

* [[簡単なC関数呼び出しの例: Mersenne Twister乱数生成関数|Resources/ProgrammingExamples/MT]]
* [[コールバックを伴うC関数呼び出し|Resources/ProgrammingExamples/CallBack]]
* [[構造体を扱いC関数呼び出し|Resources/ProgrammingExamples/Struct]]
* [[多相型を持つC関数呼び出し|Resources/ProgrammingExamples/PolyC]]

これは,従来の言語では当たり前の機能である.SML#は,その当たり前の機能
を,型主導のコンパイル理論とその実装技術を開発し,対話型プログラミング
や多相関数などの機能をサポートするML系言語で初めて実現している.これに
よって,システムに用意されている豊富なC言語ライブラリを簡単な宣言のみ
で使用することが可能となっている.

これらを使えば,たとえば,
[[こんなプログラム|Resources/ProgrammingExamples/Spectrum]]
が,コンパイラの特別な機能なしに,ユーザレベルのコードとしてすぐに書くとができる.