プログラミング言語SML#解説 4.0.0版
3 SML#の概要

3.1 SML#とは?

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

  1. 1.

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

  2. 2.

    レコード多相性. レコード多相性[9]は,オブジェクトやデータベース のタプルなどに現れるラベル付きレコードをML言語に完全に統合するために必要 な型システムの機能です. SML#は,この機能を完全にサポートしています.

  3. 3.

    SQLのシームレスな統合. SQLはデータベースの標準問い合わせ言語であり,データベースを利用 するプログラムで必ず必要となる機能です. SML#は,SQLの一部の機能をライブラリとして提供するのでは なく,SQLクエリそのものを多相型をもつ第一級の式として統合しています. この機能により,複雑なプログラムデータベース操作を,MLプログラム の中で直接プログラムすることができます.

  4. 4.

    C言語との直接連携. システムプログラミングを含む種々のOSの機能の利用にはC言語で記述 されたライブラリへのアクセスが必要となります. SML#では,名前を外部名宣言するだけで,C言語で書かれCコン パイラでコンパイルされた関数を呼び出すことができます.

  5. 5.

    マルチコアCPU上のネイティブスレッドのサポート. SML#の並行かつオブジェクトを動かさないGCの機能により, C言語との連携機能を使い,OSのスレッドライブラリを直接呼び出すことができ ます. 従って,OSがマルチコアCPU上での並列実行をサポートしさえすれば, スレッドを使った高水準なMLプログラムを書き,マルチコアCPU上で効率良く 実行することができます.

  6. 6.

    分割コンパイルとリンク. SML#は,従来のインクリメンタルなコンパイルではない,真の分 割コンパイルを実現しています. 各モジュールのインターフェイスの確定後は,各モジュールを独立に開 発しコンパイルやテストできます. さらに,SML#コンパイラは,分割コンパイルの対象となる各ソー スコードを,システム標準のオブジェクトファイル(例えばLinuxならば ELFフォーマット)にコンパイルし,システムのリンカーでCのライブラリなどと ともにリンクします. この機能により,Standard MLだけでなくC言語やSQLなどをも使う 大規模プログラムを安全かつ効率的に開発することができます.

SML#コンパイラおよび実行時処理系は, SML#開発チームが著作権保有するオープンソースソフトウェアです. MITライセンス(4節参照)に よって公開されており,だれでも自由に利用することができます. このライセンスは,二次著作物(つまりコンパイラで作成されたシステ ムなど)に関する制限の少ないフリーソフトウェアライセンスであり,企業の商 品開発にも安心して使用できます. 現在(2021-04-06)のSML#開発チームのメンバーは、、五十音順で、 大堀 淳(東北大学)と上野雄大(東北大学)です。