| パラダイム | 機能的な |
|---|---|
| デザイン: | ラドボウド大学ナイメーヘン ソフトウェア技術研究グループ |
| 初登場 | 1987年 |
| 安定版リリース | 3.1 / 5 2022年1月 |
| タイピングの規律 | 強い、静的、動的 |
| OS | クロスプラットフォーム |
| ライセンス | 簡易BSD [1] |
| ファイル名拡張子 | .icl、.dcl、.abc |
| Webサイト | クリーン |
| 影響を受けた | |
| リーン、ミランダ、ハスケル | |
| 影響を受けた | |
| ハスケル、イドリス[2] | |
Cleanは汎用の 純粋関数型 プログラミング言語です。元々はConcurrent Clean System [3]またはClean System [4] [5]と呼ばれ、1987年以来ナイメーヘンのラドバウド大学の研究者グループによって開発されてきました。[6] [7]言語の開発は鈍化していますが、一部の研究者はまだこの言語に取り組んでいます。[8] 2018年には、Cleanを使用するスピンオフ企業が設立されました。[9]
特徴
Cleanは、参照透過性、リスト内包、ガード、ガベージコレクション、高階関数、カリー化、遅延評価など、弟分言語であるHaskellと多くの特性と構文を共有している。しかし、Cleanは、Haskellのモナドの使用とは対照的に、一意性型システムを通じて可変状態と入出力(I/O)を処理する。コンパイラは、プログラムの実行中のどの時点でも、一意な型を持つ値への参照は1つしか存在できないことを認識しているため、一意性型システムを利用してより効率的なコードを生成する。したがって、一意の値はインプレースで変更できる。[10]
Clean ディストリビューションには、 Microsoft Windows用の統合開発環境( IDE)が含まれています。
例
開始= "Hello, world!"
階乗:
挿入演算子:
( ^ )挿入句8 :: Int Int -> Int ( ^ ) x 0 = 1 ( ^ ) x n = x * x ^ ( n -1 )
型宣言では、関数は優先度 8 の右結合中置演算子であると宣言されています。つまり、は ではなく とx*x^(n-1)同等であることを示しています。この演算子は、Clean標準ライブラリであるStdEnv で事前定義されています。
x*(x^(n-1))(x*x)^(n-1)
Cleanの仕組み
コンピューティングはグラフの書き換えと縮小に基づいています。数値などの定数はグラフであり、関数はグラフの書き換え式です。これをネイティブコードへのコンパイルと組み合わせると、高度な抽象化を使用する Clean プログラムは、The Computer Language Benchmarks Gameによると比較的高速に実行されます。[11] 2008 年のベンチマークでは、Clean ネイティブコードは、ベンチマークに応じて、 Glasgow Haskell Compiler (GHC) と同等のパフォーマンスを示しました。[12]
コンパイル
Clean からマシン コードへのコンパイルは次のように実行されます。
- ソース ファイル (.icl) と定義ファイル (.dcl) は、Clean で記述されたコンパイラ フロントエンドによって、Clean の基本バリアントである Core Clean に変換されます。
- コア clean は、Clean とCで記述されたコンパイラ バックエンドによって、Clean のプラットフォームに依存しない中間言語 (.abc) に変換されます。
- 中間 ABC コードは、 Cで記述されたコード ジェネレーターによってオブジェクト コード (.o) に変換されます。
- オブジェクト コードは、モジュールおよびランタイム システム内の他のファイルとリンクされ、システムリンカー(使用可能な場合) またはWindows上の Clean で記述された専用リンカーを使用して通常の実行可能ファイルに変換されます。
以前のバージョンの Clean コンパイラは完全にCで記述されていたため、ブートストラップの問題を回避できました。
ABCマシン
前述のABCコードは抽象マシンの中間表現です。ABCコードのマシンコード生成は比較的簡単なので、新しいアーキテクチャをサポートするのは簡単です。ABCマシンは命令型の抽象グラフ書き換えマシンです。[13]書き換え中のCleanグラフを保持するグラフストアと3つのスタックで構成されています。
- A(引数)スタックは、グラフ ストア内のノードを参照する引数を保持します。
- B(asic value) スタックは、基本値 (整数、文字、実数など) を保持します。これらの値はグラフ ストア内のノードになることもありますが、効率性のために別のスタックが使用されます。
- 制御スタックはフロー制御の戻りアドレスを保持します。
すべての実行ファイルにリンクされているランタイム システムは、グラフStartストアにノードを構築し、それを A スタックにプッシュします。次に、必要に応じて評価しながら、それを印刷し始めます。
ブラウザでクリーンを実行する
Cleanは通常ネイティブ実行ファイルを生成するために使用されますが、いくつかのプロジェクトではWebブラウザでアプリケーションを有効にすることができました。現在は中止されているSAPLプロジェクトはCore CleanをJavaScriptにコンパイルし、ABCコードは使用しませんでした。2019年以降は、 WebAssemblyで書かれたABCコードのインタープリターが代わりに使用されています。[14] [15]
プラットフォーム
Clean は、 Microsoft Windows ( IA-32およびX86-64 )、macOS ( X86-64 )、Linux ( IA-32、X86-64、AArch64 )で利用できます。[引用が必要]
一部のライブラリはすべてのプラットフォームで利用できるわけではありません。たとえば、Windows でのみ利用できる ObjectIO などです。また、ダイナミクスをファイルに書き込む機能も Windows でのみ利用できます。[引用が必要]
Cleanのプラットフォームごとの利用可能性はバージョンによって異なります: [16] [17]
Haskellとの比較
Cleanの構文はHaskellと非常に似ていますが、いくつかの注目すべき違いがあります。一般的に、HaskellはCleanよりも多くの構文糖を導入しています。 [10]
参考文献
- ^ 「Download Clean」. Clean . 2019年7月23日閲覧。
- ^ 「Idris - Uniqueness Types」。2018年11月20日閲覧。
- ^ 「Clean 0.7: Readme」。2019年5月24日時点のオリジナルよりアーカイブ。
- ^ 「Clean 1.0: Readme」。2019年5月5日時点のオリジナルよりアーカイブ。
- ^ 「Clean 1.3: Readme」。2019年4月27日時点のオリジナルよりアーカイブ。
- ^ “ラドボウド大学ナイメーヘン: ソフトウェア科学部: ソフトウェア”.
- ^ 「FAQ」. Clean . 2021年11月26日閲覧。
- ^ “Publications”. Clean . 2021年11月26日閲覧。
- ^ 「ホーム」。TOPソフトウェアテクノロジー。 2021年11月26日閲覧。
- ^ ab ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
- ^ 「どのプログラミング言語が最も速いか?」。コンピュータ言語ベンチマークゲーム。2011年6月28日時点のオリジナルよりアーカイブ。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク) - ^ ヤンセン、ヤン・マルティン;ピーター・コープマン。プラスマイヤー、リナス (2008)。 「通訳から編纂まで」(PDF)。2016 年5 月 21 日に取得。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ ピーター・コープマン (1990 年 12 月 10 日)。実行可能仕様としての機能プログラム(PhD)。ナイメーヘンのカトリーケ大学。 p. 35.ISBN 90-9003689-X。
- ^ 「Clean and iTasks / ABC Interpreter · GitLab」。GitLab上の Clean と iTasks。2023年4 月 13 日閲覧。
- ^ Staps, Camil; van Groningen, John; Plasmeijer, Rinus (2021年7月15日). 「サンドボックスと分散システムのためのコンパイル済みコードと解釈済みコードの遅延インターワーキング」。第31回関数型言語の実装と応用に関するシンポジウムの議事録。pp. 1–12。doi :10.1145/3412932.3412941。ISBN 9781450375627. S2CID 202751977。
- ^ “リリース履歴”. Clean . 2022年1月7日閲覧。
- ^ 「Index of /Clean」。2022年1月7日閲覧。
外部リンク
- クリーンウィキ
- clean-lang.org: Clean パッケージの公開レジストリ
- cloogle.org: クリーンパッケージ内を検索するための検索エンジン
