| パラダイム | マルチパラダイム:関数型、命令型、モジュール型、並行型 |
|---|---|
| 家族 | ML :標準ML |
| 初登場 | 1991年[1] |
| Webサイト | 翻訳元 |
| 主な実装 | |
| SML/ニュージャージー州、[2] MLトン、[3]マンティコア[4] | |
| 影響を受けた | |
| ML、標準ML | |
並行 ML (CML) は、マルチパラダイム、汎用、高水準、関数型 プログラミング言語です。これは、標準 ML言語の並行拡張であるプログラミング言語MLの方言であり、言語に組み込まれているのではなく、第一級の構成可能な通信抽象化を作成できる機能が特徴です。CML の設計とその基本操作は、 GNU Guile、[5]、Racket、[6]、Manticore [4]など、他のいくつかのプログラミング言語に採用されています。
コンセプト
並行処理をサポートする多くのプログラミング言語は、システム内で同時に実行されているプロセスまたはスレッド間で値を交換できる通信チャネルを提供します。プロセス間で確立される通信は特定のプロトコルに従う場合があり、プログラマは必要な通信パターンを確立するための関数を記述する必要があります。一方、通信システムでは、複数のサーバーなど複数のチャネルを確立し、新しいデータが利用可能になったときに利用可能なチャネルを選択する必要があることがよくあります。これは、Unix システムの選択操作などのポーリングを使用して実現できます。
アプリケーション固有のプロトコルとマルチパーティ通信の両方を組み合わせると、既存のプロトコル内でポーリングとブロッキングのチェックを導入する必要があるため、複雑になる可能性があります。並行MLは、同期可能なイベントを導入してプログラミング概念の結合を減らすことでこの問題を解決します。[ 7 ]イベントは、同期操作(CMLとRacketで呼び出される)で使用できるファーストクラスの抽象化であり、通信の結果として生じる値(たとえば、チャネルで送信されたデータ)を潜在的にブロックしてから生成します。
sync
CML では、いくつかの基本操作を使用してイベントを組み合わせたり操作したりできます。各基本操作は、イベントをその場で変更するのではなく、新しいイベントを構築します。これにより、必要な通信パターンを表す複合イベントを構築できます。たとえば、CML では、プログラマーが複数のサブイベントを組み合わせて複合イベントを作成し、サブイベントの 1 つを非決定的に選択できます。別の基本操作は、同期の結果得られた値を変更する新しいイベントを作成します。これらのイベントは、CML 以外の言語では通常、ポーリング ループまたは各イベントの種類に対応するハンドラーを持つ関数を使用して処理される通信パターンを具体化します。
こんにちは世界
これは、システム コンソールに出力する「Hello, World!」プログラムです。文字列用のチャネルを持つスレッドを1 つ生成し、チャネルで受信した文字列を出力する別のスレッドを生成します。このプログラムでは、ニュージャージー標準 ML (SML/NJ) と CML を使用します。(Linux-x86 以外のプラットフォームでは、ヒープ名が異なります。「cml_test.x86-linux」の行を別の名前に変更する必要がある場合があります。)
外部リンク
- 公式サイト
参考文献
- ^ Reppy, John H. (1991 年 6 月). CML: 高階並行言語. PLDI.
- ^ 「ニュージャージー州の標準MLとは?」2021年4月5日閲覧。
- ^ 「ConcurrentMLImplementation」 . 2021年4月5日閲覧。
- ^ ab Fluet, Matthew; Bergstrom, Lars; Ford, Nic; Rainey, Mike; Reppy, John; Shaw, Adam; Xiao, Yingqi (2009 年 5 月)。「異種並列関数型言語 Manticore でのプログラミング」(PDF) 。2018 年7 月 11 日閲覧。
- ^ Wingo, Andy (2017 年 6 月 29 日). 「新しい同時実行 ML」 . 2018 年7 月 11 日閲覧。
- ^ Flatt, Matthew; Findler, Robert Bruce (2004). 「Kill-safe 同期抽象化」。プログラミング言語の設計と実装に関する ACM SIGPLAN 2004 会議の議事録。第 39 巻。pp. 47–58。doi : 10.1145 / 996841.996849。ISBN 1581138075. S2CID 5547460。
- ^ Reppy, John H. (1993). 「並行 ML: 設計、アプリケーション、セマンティクス」.関数型プログラミング、並行性、シミュレーション、自動推論. コンピュータサイエンスの講義ノート. 第 693 巻. pp. 165–198. CiteSeerX 10.1.1.50.7965 . doi :10.1007/3-540-56883-2_10. ISBN 978-3-540-56883-4。
