Idris是否有价值类型?
术语"值类型"有点暧昧,但我不知道更好的。
我的意思是:结构的数组/结构是否总是指针的数组/结构(如在Java中,与C#和C ++不同)?
答案 0 :(得分:3)
关于语义
值和引用类型仅需要因突变而区分。但伊德里斯纯粹是功能性的。
关于运行时性能
"值" dotnet中的类型通常被称为" unboxed"在伊德里斯社区。
AFAIK Idris尚不支持编码人员声明未装箱类型的能力。这可能会随着语言设计似乎关心运行时性能而及时改变。
即使该语言不支持显式拆箱,编译器仍可以执行此操作。例如:如果类型的不可变值的运行时表示不大于指针的运行时表示,那么最好不要将其打包。注意:盒装状态不必由类型决定。可以为一般[不可变]用法取消打包类型的值,并对其进行一些可变的使用。
与dotnet相比,Idris语言在性能方面也有一些优势:
伊德里斯的后端还不成熟,他们甚至可能会错过一些基本的优化。如果考虑到运行时性能如此之大,那么现在采用Idris为时尚早[虽然Haskell可能仍然是一个不错的选择]。然而,该语言的设计考虑了性能,我希望它在很长一段时间内比dotnet具有更好的性能。
答案 1 :(得分:2)
由于Idris永远不会改变某个值,因此所有类型都是有效的值类型。我打赌这是你想要的答案。
至于事物是否在引擎盖下:我知道某些值不是(Int是标记值)并且打赌大多数都是C后端的指针。这取决于每个后端。