鉴于CLR泛型实现支持比JVM更多的功能,例如具体化,而JVM的泛型仅仅是Java "compiler trick",为什么在F#中不可能使用更高级的类型但在Scala中可能? CLR泛型实现是否会以某种方式阻碍事物的发生,而JVM缺少一个允许您进一步超出设计者的意图;有点像动态语言让你做一个强类型编译器无法实现的技巧吗?
答案 0 :(得分:22)
原则上,我不确定是否有任何阻止F#包含更高级别的类型的东西; CLR本身并不支持它们,因此需要使用更间接的编译策略,但JVM上的Scala也是如此。在CLR的具体化仿制药之上执行此操作可能会或可能不会更复杂,但我怀疑F#不包含它们的原因更具哲学性。虽然更高级的kinded类型会很好,但F#的设计倾向于支持与其他.NET语言良好互操作的简单功能;更高级的类型可能需要花费大量精力来添加到语言中,会使类型推断和语言的其他部分复杂化并且肯定不能与C#和其他.NET语言很好地互操作,因此成本(包括机会成本)可能被认为是超过了好处。
答案 1 :(得分:-4)
更好?可以想象。
我所知道的唯一区别是称为“专业化”的泛型特征。它在Scala的程序员控制下可用。所以...我不得不说可以证明Scala“更好”。