Ch.4 SML#の概要

§ 4.1. SML#とは?

SML#は,以下のような特徴をもったML系関数型プログラミング言語です.

  1. Standard MLとの後方互換性. SML#は,ML系言語の標準の厳密な仕様であるStandard MLとの 後方互換性を持っています. Standard MLの形式的な仕様[4]を満たすすべての プログラムをコンパイルできます.

  2. レコード多相性. レコード多相性[8]は,オブジェクトやデータベース のタプルなどに現れるラベル付きレコードを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#ライセンス(5節参照)に よって公開されており,だれでも自由に利用することができます. このライセンスは,二次著作物(つまりコンパイラで作成されたシステ ムなど)に関する制限の少ないフリーソフトウェアライセンスであり,企業の商 品開発にも安心して使用できます.