Clojureの概要
Clojure(クロージャ)は「関数型プログラミング言語」であるLisp(リスプ)の方言の一つの汎用プログラミング言語です。2007年に開発者であるRich Hickey氏により公開され、2009年5月4日にバージョン1.0がリリースされました。
「関数型プログラミング言語」とは、関数をオブジェクトのように扱える「第一級関数」、そして、その関数を引数や戻り値のように扱える「高階関数」をサポートするプログラミング言語です。
Rich Hickey 氏によると、Clojureを作成した理由は、Lispであり、関数型プログラミング言語であり、一般的なプラットフォームに対応し、かつ並行処理が得意な言語を探したが見つからなかったためで、Clojure という名前は、他に同じものが無く、C#の「C」、Lispの「L」、Javaの「J」を使えないか考えていたところ、Googleスペースのあまりにも広大な空間の逆の意味を持つ「閉鎖」を意味する Closure という言葉を思いつき、それをもじって Clojure としたそうです。発音はClosure と同じクロージャとされています。
Clojureの主な特徴
関数型プログラミング言語 | ClojureはLispを源泉とした「関数型プログラミング言語」の一つです。Lisp同様「S式」と呼ばれる()を多用する書式で記述し、数式は「ポーランド記法」と呼ばれる書式で記述します。 |
---|---|
JavaVM言語 | ClojureはJava仮想マシン(JavaVM)上で動作するJavaVM言語の一つであり、Clojureの本体はjarファイルです。JavaVM言語であることの利点としてJavaのクラスを使うこともできます。 |
豊富なデータ構造 | 何も無いことを表すnilを始め、数値、文字列、キャラ、キーワード、シンボル、コレクション、リスト、ベクター、マップなどの豊富なデータ型が用意されています。なお、Clojureでは変数の値は不変なものとして扱います。 |
REPL | REPL(Read-Eval-Print-Loop)と呼ばれる対話型形式で、コードをインタラクティブの作成することが可能です。 |
コードはデータ | コードをデータとして扱います。コードはデータ、データはコードという考え方で、ホモコニック言語とも呼ばれる思想で設計されています。 |
マクロ | Lispから引き継いだ強力なマクロ機能を持っています。 |
マルチスレッド | ソフトウェアトランザクションメモリシステム(SMT)、及びリアクティブエージェントシステムによるクリーンなマルチスレッドを保証します。 |
遅延シーケンス | データが必要になった時に評価を行う遅延シーケンスが使えます。この機能により無限に続くデータも扱えます。 |
ビルドツール | Leiningenというビルドやパッケージ管理が出来るツールが用意されています。 |
豊富なライブラリ | コミュニティリポジトリClojars.orgには豊富なライブラリが公開されています。 |
Java以外の実装 | ClojureはJavaVM言語ですが、JavaScript に変換して動作する ClojureScript、.NET Frameworkのネイティブ実装である、ClojureCLR も派生プロダクトとして存在しています。 |
Clojureに関連するプログラミング言語
- ClojureScript
- ClojureCLR
- Lisp
- Scheme
- Haskell
- Scala
Clojureの動作環境
基本的にJavaVM上で動作するので、Mac、Linux、Windows で利用可能です。
コマンドラインツール clj のWindows版は現状ではまだα版ですが、本体はJavaのjar 形式ファイルなのでjavaコマンドで直接起動することも可能です。
Java 8以上に対応していますが、現在、推奨されているバージョンはJava8、または Java 11 です。
Clojureのライセンス
Clojureのライセンスは、Eclipse Public License 1.0で提供されています。
Eclipse Public License(EPL)はオープンソースのライセンスの1つで、EPLライセンスされたプログラムの受領者は、使用・修正・コピーや、修正したバージョンの配布が可能です。 しかし、修正したバージョンを配布する場合はソースコードの入手方法を示すなどの義務が生じます。
Clojureのダウンロード
入手方法およびインストール方法は下記を参照して下さい。
https://clojure.org/guides/getting_started
Clojureのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。