2

私は(ほとんど)Javascriptに変換できる関数型言語を見てきましたが、この2つは最近ではトップに立っています。しかし、私はそれらについて2つの疑問を持っています(ClojureScriptとPit for F#について話します):

  • どちらも元の言語を翻訳するだけなので、.NetまたはJavaを呼び出すとすぐに、プログラムをJavascriptに直接コンパイルすることはできないと思います。私はこれで正しいですか?その場合、この場合、Java/.Net環境と対話する機能は「危険」です。
  • 私の知る限り、ClojureScriptはそこにある任意のJSライブラリ(node.js、jqueryなど)と対話できますが、Pitではこれを可能にする「拡張機能」を開発しています...したがって、jsライブラリのインポートはサポートされていないと思います。私はSOで、WebSharperがこれをサポートしていることを読みましたが、証拠はあまりなく、クローズドソースです。では、実際には、両方の言語からのJSインタラクションの状態は実際にはどのようになっていますか?

どうもありがとう!

4

3 に答える 3

3

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の問題として再発見できることを意味します。私はそうしません、なぜなら人類はそのような努力の重複によって不利になるからです。

于 2012-05-31T15:31:51.620 に答える
3

私は ClojureScript に詳しくありませんが、Pit (および WebSharper) に関するいくつかの質問に答えることができます。

.NET ライブラリの呼び出し
Pit は、明示的にマークされた F# コードのみを変換するため、標準の .NET ライブラリまたは Pit をサポートしない F# ライブラリを呼び出すと、機能しません ( Microsoft Live Labs Voltaプロジェクトとは異なり、現在は機能していません)。

ただし、F# でそのようなライブラリを再実装し、代わりにその実装を使用するように Pit に指示することができます。機能が標準の F# ライブラリの一部である場合は、オープンソースの F# リリースからソース コードをコピーすることもできます。実際には、これはそれほど大きな問題ではないと思います。ほとんどの .NET ライブラリはサーバーまたはデスクトップに固有のものであり、おそらくそれほど多くは必要ないからです。

JS ライブラリの呼び出し
F# は静的に型付けされた言語であるため、作業対象の型を知る必要があります。Pit と WebSharper では、これらは F# 型 (実装なし) を定義することによって取得され、JavaScript にマップされます。Pit では、これらは手動で記述する必要がありますが、私の推測では、F# 3.0 では、これは F# 型プロバイダーを使用して自動的に行うことができます。WebSharper にはそのためのツールがあると思いますが、商用リリースの一部としてのみ利用できます。

于 2012-05-31T09:59:05.817 に答える
0

ClojureScript の方が適していると思います。JavaScript と同じ動的な性質を持ち、出力の最適化に Google Closure Compiler を使用する場合があります。JS VM で実行するように設計されています。

Clojure との違いはほとんどありません。

于 2012-06-05T06:48:48.660 に答える