3.1 SML#とは?
SML#は,以下のような特徴をもったML系関数型プログラミング 言語です.
-
1.
Standard MLとの後方互換性. SML#は,ML系言語の標準の厳密な仕様であるStandard MLとの 後方互換性を持っています. わずかな例外を除いて, Standard MLの形式的な仕様[5]を満たすすべての プログラムをコンパイルできます.
-
2.
レコード多相性. レコード多相性[9]は,オブジェクトやデータベース のタプルなどに現れるラベル付きレコードをML言語に完全に統合するために必要 な型システムの機能です. SML#は,この機能を完全にサポートしています.
-
3.
SQLのシームレスな統合. SQLはデータベースの標準問い合わせ言語であり,データベースを利用 するプログラムで必ず必要となる機能です. SML#は,SQLの一部の機能をライブラリとして提供するのでは なく,SQLクエリそのものを多相型をもつ第一級の式として統合しています. この機能により,複雑なプログラムデータベース操作を,MLプログラム の中で直接プログラムすることができます.
-
4.
C言語との直接連携. システムプログラミングを含む種々のOSの機能の利用にはC言語で記述 されたライブラリへのアクセスが必要となります. SML#では,名前を外部名宣言するだけで,C言語で書かれCコン パイラでコンパイルされた関数を呼び出すことができます.
-
5.
マルチコアCPU上のネイティブスレッドのサポート. SML#の並行かつオブジェクトを動かさないGCの機能により, C言語との連携機能を使い,OSのスレッドライブラリを直接呼び出すことができ ます. 従って,OSがマルチコアCPU上での並列実行をサポートしさえすれば, スレッドを使った高水準なMLプログラムを書き,マルチコアCPU上で効率良く 実行することができます.
-
6.
分割コンパイルとリンク. SML#は,従来のインクリメンタルなコンパイルではない,真の分 割コンパイルを実現しています. 各モジュールのインターフェイスの確定後は,各モジュールを独立に開 発しコンパイルやテストできます. さらに,SML#コンパイラは,分割コンパイルの対象となる各ソー スコードを,システム標準のオブジェクトファイル(例えばLinuxならば ELFフォーマット)にコンパイルし,システムのリンカーでCのライブラリなどと ともにリンクします. この機能により,Standard MLだけでなくC言語やSQLなどをも使う 大規模プログラムを安全かつ効率的に開発することができます.
SML#コンパイラおよび実行時処理系は,東北大学電気通信研究 所大堀・上野研究室で開発され,東北大学が著作権保有するオープンソースソフトウェ アです. BSDスタイルのSML#ライセンス(4節参照)に よって公開されており,だれでも自由に利用することができます. このライセンスは,二次著作物(つまりコンパイラで作成されたシステ ムなど)に関する制限の少ないフリーソフトウェアライセンスであり,企業の商 品開発にも安心して使用できます.