是否有可能为Scala中的测量单位实施F#的基础设施?

soc*_*soc 8 f# types scala language-design units-of-measurement

F#附带了对测量单位系统的特殊支持,该系统提供静态类型安全性,同时编译为数字类型,而不是通过包装/展开操作增加运行时的负担.

是否有可能使用一些Scala的类型系统魔法来实现与之相当的东西?

Dan*_*ral 8

答案是否定的.

现在,有人必然会指向Scalar,但这会给运行时检查.或许,然后,指出Jesper Nordenberg的类型安全单位或Jim McBeath 对它的努力,但这些都很麻烦和笨拙.

我会指出,而不是Units编译器插件.它给了斯卡拉,在2008/2009,一个非常好的单位系统,正如在这篇文章中可以看到.但是,它通过扩展编译器来实现,如果类型系统足够的话,这不是必需的.唉,它没有被维护,它不再起作用了.


Jes*_*erg 2

有点儿。您可以使用指数元组中整数的类型表示非常轻松地对 SI 单位进行编码。有关示例实现,请参阅http://svn.assembla.com/svn/metascala/src/metascala/Units.scala 。

TList如果单位被编码为单位类型和整数对(例如,((M, _1), (S, _2))其中M <: Unit和) ,那么还应该可以支持可扩展单位系统S <: Unit。在这种编码中,计算数量运算的类型变得有点复杂。

关于性能,将值包装在包含单位信息的类型中总是会产生内存开销。然而,在实际操作中可能没有性能开销,因为所有单元检查都是在编译时完成的。