PureScriptは、
JavaScriptへのコンパイルを前提とした純粋関数型プログラミング言語です。Webアプリケーションはもちろん、サーバーサイドアプリケーションや、Electronを用いたデスクトップアプリケーションの開発にも利用できます。
Haskellとよく似た構文を持ちながらも、ローポリモーフィズムや拡張可能なレコードといった特徴的な機能を備えています。また、
Haskellとは異なり、PureScriptは正格評価を採用している点も重要な違いです。
歴史
PureScriptは、2013年にPhil Freemanによって設計されました。彼がPureScriptの開発に着手したのは、
Haskellのセマンティクスを維持しつつ
JavaScriptにコンパイルを試みる既存の様々なプロジェクト(Fay、Haste、GHCJSなど)の結果に満足できなかったことがきっかけです。
その後、PureScriptはコミュニティに支持され、
GitHub上で活発な開発が続けられています。コミュニティによって開発された主要なツールとしては、専用のビルドツールである「Pulp」、ドキュメント検索ディレクトリの「Pursuit」、そしてパッケージマネージャの「Spago」などが挙げられます。これらのツール群が、PureScriptの開発体験をより快適なものにしています。
特徴
PureScriptは、正格評価、永続的なデータ構造、そして強力な
型推論を特徴としています。正格評価を採用することで、
Haskellの遅延評価とは異なる挙動を示す場合がありますが、より予測しやすい実行順序を実現しています。また、永続的なデータ構造は、データの変更時に新しいデータ構造を作成することで、副作用を抑制し、プログラムの安全性を高めます。
型推論は、コンパイラが自動的に変数の型を推論してくれるため、型アノテーションの記述量を減らし、コードを簡潔に保つことができます。
PureScriptの
型システムは、
Haskellをはじめとする類似の関数型言語と多くの機能を共有しています。具体的には、以下のような機能が挙げられます。
代数的データ型 (ADT): 複数の型を組み合わせた新しい型を定義できます。これにより、複雑なデータ構造を安全に表現できます。
パターンマッチ: ADTの構造に基づいて、関数の引数を分解し、異なる処理を実行できます。コードの可読性と安全性を向上させます。
高カインド型: 型コンストラクタを引数として受け取る型です。より抽象的なプログラミングを可能にします。
型クラス:
Haskellの型クラスと同様に、特定の型が満たすべきインターフェースを定義します。これにより、異なる型に対して共通の操作を適用できます。
関数従属性: 型クラスのインスタンス間の関係を制約します。型推論をより強力にし、型安全性を高めます。
高ランクポリモーフィズム: 引数としてポリモーフィックな関数を受け取る関数を定義できます。より柔軟なコードを実現します。
PureScriptは、これらの機能を組み合わせることで、安全で効率的な関数型プログラミングを可能にします。
関連項目
Elm
外部リンク
公式ウェブサイト
PureScript by Example (設計者Phil Freeman氏によるPureScriptの解説)
実例によるPureScript (PureScript by Exampleの日本語訳)