WebSharperではJavaScriptとの相互運用は問題ではありません。既存のJSライブラリに多くのバインディングを出荷しており、機能が不足している場合は、次のようなコードを使用してF#でかなり迅速に回復できます。
[<Direct "jQuery($x).hide()">]
let hide (x: obj) = ()
F#での課題は、型の安全性です。型付けされていない(そして多くの場合型付けできない!)JavaScriptライブラリに、型の安全性と正確なコード補完をどれだけ後付けするかです。私はClojureScriptを使用したことはありませんが、Clojureも型指定されていないため、これは問題ではないと思います。
基盤となる.NETプラットフォームとの相互運用は確かに「危険」です。Tomasが指摘しているように、WebSharperでは、JavaScriptで呼び出し可能なすべての関数に注釈を付ける必要があります。一部の標準クラス(文字列、辞書、マップ、セットなどのコレクション)についてこの制限を回避しましたが、サポートは完全ではありません。
WebSharperを使用すると、サーバー上で.NETコードを実行し、AJAXを介してかなり透過的に使用できます。
[<Remote>]
let add (x: int) (y: int) = async.Return(x + y)
[<JavaScript>]
let remoteAdd () =
async {
let! sum = add 1 2
return JavaScript.Log("RESULT", sum)
}
|> Async.Start
残念ながら、クライアントで大規模な.NETライブラリを実行する必要がある場合、これは解決策ではなく、代わりにSilverlightの方向に目を向ける必要があります。
免責事項-私はWebSharperを開発しているので、私の入力は明らかに偏っています。そうは言っても、WebSharperとPitのどちらかを選択するときは、WebSharperは積極的な開発とサポートを行っており、実際のプロジェクトで使用されていることに注意してください。大規模なプロジェクトで使用したため、出力コードを最適化し、F#リフレクションモデルのいくつかの制限やバグを回避し、目的に合わせてF#メタデータリーダーを書き直す必要がありました。これは、WebSharperトラッカーから数十のクローズされた問題を取得し、それらをPitの問題として再発見できることを意味します。私はそうしません、なぜなら人類はそのような努力の重複によって不利になるからです。