CLRジェネリックスの実装では、JVMの機能よりも多くの機能がサポートされており、JVMのジェネリックは単なるJavaの"compiler trick"であるため、F#では高級な型は使用できませんが、Scalaでは可能です。 JVMの欠如は、設計者が意図した以上に進むことを可能にする一方で、CLRジェネリック実装は何とかして物事の中に入りますか?動的言語のように、強く型付けされたコンパイラでは不可能なトリックを実行できますか?高級タイプ - Scalaでは可能ですが、F#ではできないのはなぜですか?
答えて
原則として、F#がより高い種類の類型を含むのを防ぐ何かがあるとは確信していません。 CLRはそれらをネイティブにサポートしていないので、より間接的なコンパイル戦略を使用する必要がありますが、JVM上のScalaの場合もそうです。 CLRの標準化されたジェネリックスの上でこれを行うのはもっと複雑かもしれませんが、F#にそれが含まれていない理由はより哲学的だと思われます。より親切な型がいいかもしれませんが、F#のデザインは他の.NET言語とうまく連携するシンプルな機能を好む傾向があります。より親切な型は多分言語への追加に多大な努力を必要とし、型推論や言語の他の部分を複雑にし、C#や他の.NET言語との相互作用を間違っていると思われるので、コスト(機会費用を含む)はおそらく利益を上回ります。
Scalaで定義された上位の類型は、Javaと相互に作用しませんか? – lobsterism
@lobsterism - 私はScalaのエキスパートではありませんが、Javaのタイプのシステムはそれらをサポートしていないので、どうすればよいかはわかりません。 – kvb
おそらく。
私が知っている唯一の違いは、「専門化」と呼ばれるジェネリックの機能です。そして、Scalaのプログラマ制御下で利用可能です。だから...私はScalaが「より良い」というケースを作ることができると言わなければならないだろう。
Scala *は*優れていますが、それは私が言っていることですが、CLRがJVMに比べてより強力な型システムを持っていると、F#でそれが不可能である理由が疑問です。 – lobsterism
@lobsterism JavaとJVMは同じものではありません...つまり、scalaはjavaと比較して "強力な"型指定システムを持つことができますが、どちらも同じJVMを使用します! – korefn
実際、Scalaの「特殊化」は、JVMの短期間のリリースを公開しています。プリミティブ型はオブジェクト階層外であり、ジェネリック型は解決されていません。 .NETとF#には、オブジェクト階層の一部である「ValueTypes」がありますが、JVMのプリミティブ型のすべてのパフォーマンス上の利点があります。つまり、.NETの 'List '( 'Int32'は.NETの' ValueType'です)のような型は完全に改訂され、要素にアクセスするためにボクシング/アンボックリングは必要ありません。 –
- 1. なぜScalaでdefで省略可能なのですか
- 2. rake -fを実行できないのはなぜですか?
- 3. Scalaでは、なぜGregorianCalendarでgetInstanceが機能しないのですか?
- 4. Scalaのパターンマッチングが変数で機能しないのはなぜですか?
- 5. "flatMap"はScalaのOptionタイプのシーケンスで動作するのはなぜですか?
- 6. ScalaでStringとIntを連結できないのはなぜですか?
- 7. F#関数でカッコが必要なのはなぜですか?
- 8. バイトアドレス可能なメモリで、4バイトアドレス可能なメモリではないのはなぜですか?
- 9. F#で非部分アクティブパターンをパラメータ化できないのはなぜですか?
- 10. Scalaが_の型を推論できないのはなぜですか?
- 11. Scalaのthis.apply(_)で「apply」を省略できないのはなぜですか?
- 12. なぜWhenAnyValueはサブスクリプションでトリガ可能なトリガですか?
- 13. Scala:なぜSome(None)を持つことが可能ですか?
- 14. コピーできないタイプの範囲ループの場合は可能ですか?
- 15. C#は高級言語ですか?
- 16. Scalaではなぜこのような演算子の定義が可能ですか?
- 17. jQueryのソート可能なテーブルが機能しないのはなぜですか?
- 18. 高級言語のデータグラムパケットを覗くことは可能ですか?
- 19. Scalaコンパイラは再入可能ですか?
- 20. Scalaでこのキーのこの可変マップの値を更新できないのはなぜですか?
- 21. 私のScala列挙が機能しないのはなぜですか?
- 22. Scalaがjava.lang.StackOverflowErrorをキャッチしないのはなぜですか?
- 23. バインド可能なピッカーが機能しないのはなぜですか?ここ
- 24. スレッドでガーベジコレクションが機能しないのはなぜですか?
- 25. Pythonクラスが呼び出し可能でないのはなぜですか?
- 26. divで可視性が機能しないのはなぜですか?ここ
- 27. Reason配列が変更可能なのはなぜですか?
- 28. なぜ列挙可能なのは<T> Tのためにシリアライズ可能ではないですか?
- 29. F#なぜ私は:を使用できないのですか?インタラクティブなF#の演算子?
- 30. List [Int、Int]が有効なScala型でないのはなぜですか?
なぜこれが閉じられましたか?私は本当に説明を理解していない。私は事実を提供しており、実際の答えがある質問をしています。誰かが元々問題が述べられているように「良い」という言葉に抱きついているように見え、議論の的となった答えを作り出しましたが、それはその質問に関するものではありませんでした。人々は単に「より良い」のようなキーワードを探し、先験的に閉じることに投票しますか? – lobsterism