Idris有价值类型吗?

时间:2017-07-12 18:50:10

标签: value-type idris

Idris是否有价值类型?

术语"值类型"有点暧昧,但我不知道更好的。

我的意思是:结构的数组/结构是否总是指针的数组/结构(如在Java中,与C#和C ++不同)?

2 个答案:

答案 0 :(得分:3)

关于语义

值和引用类型仅需要因突变而区分。但伊德里斯纯粹是功能性的。

关于运行时性能

"值" dotnet中的类型通常被称为" unboxed"在伊德里斯社区。

AFAIK Idris尚不支持编码人员声明未装箱类型的能力。这可能会随着语言设计似乎关心运行时性能而及时改变。

即使该语言不支持显式拆箱,编译器仍可以执行此操作。例如:如果类型的不可变值的运行时表示不大于指针的运行时表示,那么最好不要将其打包。注意:盒装状态不必由类型决定。可以为一般[不可变]用法取消打包类型的值,并对其进行一些可变的使用。

与dotnet相比,Idris语言在性能方面也有一些优势:

  • 它没有空值。
  • [实验阶段]具有唯一性类型。

伊德里斯的后端还不成熟,他们甚至可能会错过一些基本的优化。如果考虑到运行时性能如此之大,那么现在采用Idris为时尚早[虽然Haskell可能仍然是一个不错的选择]。然而,该语言的设计考虑了性能,我希望它在很长一段时间内比dotnet具有更好的性能。

答案 1 :(得分:2)

由于Idris永远不会改变某个值,因此所有类型都是有效的值类型。我打赌这是你想要的答案。

至于事物是否在引擎盖下:我知道某些值不是(Int是标记值)并且打赌大多数都是C后端的指针。这取决于每个后端。