soc*_*soc 8 f# types scala language-design units-of-measurement
F#附带了对测量单位系统的特殊支持,该系统提供静态类型安全性,同时编译为数字类型,而不是通过包装/展开操作增加运行时的负担.
是否有可能使用一些Scala的类型系统魔法来实现与之相当的东西?
有点儿。您可以使用指数元组中整数的类型表示非常轻松地对 SI 单位进行编码。有关示例实现,请参阅http://svn.assembla.com/svn/metascala/src/metascala/Units.scala 。
TList如果单位被编码为单位类型和整数对(例如,((M, _1), (S, _2))其中M <: Unit和) ,那么还应该可以支持可扩展单位系统S <: Unit。在这种编码中,计算数量运算的类型变得有点复杂。
关于性能,将值包装在包含单位信息的类型中总是会产生内存开销。然而,在实际操作中可能没有性能开销,因为所有单元检查都是在编译时完成的。