Reason (ReasonMLとも呼ばれる)は、OCamlプログラミング言語エコシステムの一部であるプログラミング言語およびツールチェーンです。ReasonはJavaScriptの多くの構文要素を使用し、OCamlのコンパイラツールチェーンを使用してネイティブコードにコンパイルされ、Melangeコンパイラを使用してJavaScriptにコンパイルできます。[ 3 ]
ReasonはOCamlの代替構文であるため、両者は同じ特徴を共有しています。どちらの言語も汎用的で、[ 4 ] 関数型でオブジェクト指向です。[ 5 ]
ReasonはOCamlのツールチェーンを介してネイティブコードにコンパイルされますが、構文、エラーメッセージ、エディタツールにおいてOCamlとは大きく異なります。これにより、Reasonは開発者にとってJavaScriptやTypeScriptに近い使用感を提供できます。
Reason の構文は、OCaml よりも JavaScript や他の C スタイルの言語に似ています。たとえば、Reason はブロックを区切るために波括弧[ 6 ]を、ステートメントを区切るためにセミコロン[ 7 ]を使用する傾向がありますが、OCaml は主に括弧またはbegin/endキーワードを使用してブロックを区切り[ 8 ]fun 、宣言を区切るものはありません。Reason はまた、(OCaml のキーワードではなく)矢印のような構文で関数を定義し[ 6 ]、関数を呼び出すには引数を括弧で囲む必要があります[ 9 ] 。その他の注目すべき違いとしては、パターンマッチングキーワードの名前がswitch(ではなくmatch) [ 10 ]であり、エラーメッセージが JavaScript プログラマーにとってより馴染みやすいように再フォーマットされていること[ 11 ]が挙げられます。
Reasonコミュニティは、Reactフレームワークに基づいたWebアプリケーション向けのソリューションとしてReasonReactを公式に提供しています。[ 12 ] [ 13 ]
type schoolPerson = Teacher | Director | Student ( string );let greeting = person => switch ( person ) { | Teacher => "やあ、教授!" | Director => "こんにちは、ディレクター。" | Student ( "Richard" ) => "まだここにいるの、リッキー?" | Student ( anyOtherName ) => "やあ、" ++ anyOtherName ++ "." };Reactウェブフレームワークの開発者であるジョーダン・ウォークは、Facebookに勤務していた2016年にReasonを初めてリリースした。[ 1 ] [ 14 ] [ 15 ]
同年、ブルームバーグLPはOCamlをJavaScriptにコンパイルするコンパイラであるBuckleScriptを発表した。[ 16 ]両プロジェクトともJavaScriptの影響を受けていたため、ReasonとBuckleScriptはすぐに統合されたツールチェーンとなり、ReasonがJavaScriptをターゲットにできるようになった。[ 17 ] [ 18 ]
しかし、ReasonチームとBuckleScriptチームには異なる優先順位がありました。ReasonチームはOCamlエコシステムとの互換性を維持することを望んでいましたが、BuckleScriptチームはJavaScriptプログラマーに最高の開発者エクスペリエンスを提供するために構文を変更できるようにすることを望んでいました。[ 18 ]
2020年、BuckleScriptはReasonとは異なる新しい構文を導入しました。[ 19 ] 1か月後、BuckleScriptチームはツールチェーンをReScriptにブランド変更し、JavaScriptエコシステムのみに焦点を当て、Reasonとは異なる独自の言語となることを目指しました。[ 20 ] [ 21 ]
Reason が JavaScript をターゲットにする機能を維持するために、António Monteiro は BuckleScript が ReScript にブランド変更される前のバージョンをフォークし、OCaml エコシステムに近づけるように変更しました。Melange と名付けられたこのフォークは、2023 年に最初の安定版をリリースしました。[ 22 ] [ 23 ]