Haskell用于.net平台?

Wil*_*ill 36 .net clr haskell

我白天是一名.NET开发人员,但现在我在业余时间和Haskell玩了一段时间.我很好奇:任何Haskell .net实现与IronPython一样吗?

Don*_*art 29

将GHC运行时移植到.NET没有积极的工作.

F#是最接近的东西,但要注意它是基于OCaml的,因此,默认情况下,并不像Haskell那样基于参照透明度.

  • @knocte因为这样你不仅可以抛出副作用操作而且强制执行不可变状态,从而导致代码可以更容易地被推理(并且更少的错误). (3认同)
  • 您能否详细说明为什么默认情况下引用透明度是一件好事? (2认同)

Con*_*ngo 16

请参阅hs-dotnet:Haskell的Pragmatic .NET interop

hs-dotnet是Haskell的一个实用的.NET互操作层.它将.NET类暴露给Haskell(通过GHC),将Haskell函数值暴露给.NET.


Rei*_*aka 9

如果没有对运行时进行一些重大更改或者可能是一个非常聪明的编译器,Haskell就不会在.NET上很好地工作.

当代码契约渗透得更多时,事情会发生变化,但是现在,即使是行为纯粹的函数,比如字符串操作函数,也必须通过IO访问 - 所以它根本就不值得.

那,并且存在优化问题 - 例如,.NET不对不可变对象进行任何优化,因此列表(在F#中调用它们的序列,或者在C#中调用它们的IEnumerable)将不会效率很高.

Haskell IL编译器可能是可行的,就像吐出.NET程序集而不是x86 .exes/.dll的东西一样.

  • 据我所知,情况与不变性相同.我认为优化不变性非常复杂,平衡内存和性能成本等等.垃圾收集器可能看起来也不同,JVM和.NET共享类似的垃圾收集器..NET 4的一个特点是尾递归优化,这有助于简化函数编译器 - 但它们只为x64而不是x86提供它,这是一个令我感到困惑的决定. (3认同)