MathLink を使った Mathematica セッション間の通信
Mathematica セッション間の MathLink 接続
セッション A
| Out[1]= |  |
セッション B
| Out[2]= |  |
セッション A

を評価し,リンクにそれを書き込む.
セッション B
リンクから読み出すと送信した

が得られる.
| Out[4]= |  |
セッション A
| Out[6]= |  |
MathLink 接続を使えば,Mathematica セッション間の中間ファイルを使わないデータ転送が可能になる.
その他の使い道としては,計算の一部を別のセッションに送ることがある.
セッション A

を評価せずにリンクに書き込む.
セッション B
リンクから式を読み出し,即座に
Holdで包み込む.
| Out[8]= |  |
| Out[9]= |  |
LinkWriteを呼び出すと,式を MathLink 接続に書き込んだ後,直ちに戻る.しかし,LinkReadは MathLink 接続から式を完全に読み出すまで戻らない.
読出しが可能かどうかをLinkReadyQ[link]の呼出しで知ることができる.LinkReadyQがTrueを返したら,安全にLinkReadを呼び出し,式を読み込むことができる.LinkReadyQがFalseを返した場合,LinkReadは読み出すべき式をもう一方の Mathematica セッションのLinkWriteが書き込むまでブロックする.
セッション A
| Out[10]= |  |
セッション B
セッション A
| Out[12]= |  |
| Out[13]= |  |
LinkReadyQはリンクオブジェクトのリストを取り,読むデータがあるかどうかを判断するために各リンクを並列で評価することができる.単独のリンクの場合のように,第2引数でタイムアウトの周期を指定するため,LinkReadyQはリンクのいずれかが使う準備ができるまで待つことになる.
| LinkCreate[LinkProtocol->"TCPIP"] | コンピュータが使用していないポートを取得する |
| LinkCreate["number",LinkProtocol->"TCPIP"] |
| 特定のポートを使用する |
| LinkConnect["number",LinkProtocol->"TCPIP"] |
| 同一コンピュータのポートに接続する |
| LinkConnect["number@host",LinkProtocol->"TCPIP"] |
| 別のコンピュータのポートに接続する |
TCP/IPで MathLink のリンクを設定する方法
コンピュータシステムがサポートしていれば,いかなるプログラム間通信のメカニズムでも MathLink は利用することができる.並列する Mathematica セッション間の接続を確立するには,インターネットのTCPポートを利用することが一般的である.
ほとんどのコンピュータシステムには利用可能なポートが数千個あり,そのうちのいくつかは標準的なサービスにすでに利用されている.
未使用のポートは MathLink 接続に使うことができる.
上のセッション

が使用していないポートを見付ける.
| Out[14]= |  |
上のセッション

のポートに接続する.
| Out[15]= |  |
上のセッション

に書かれた式を読む.
| Out[17]= |  |
インターネットのポートを MathLink 接続に利用すれば,異なる Mathematica セッション間でのデータ転送を簡単に行うことができる.インターネット接続が転送を実行するマシン間にあればよい.
MathLink は全くシステムに依存していないため,MathLink 接続の両端のコンピュータが同一の種類である必要はない.ただし,実際のリンクでは,コンピュータの機種の違いからくるデータ形式の違い等に対処するために MathLink 内で転送処理に対する最適化が図られる.