Where are data-types for Rust (eg. float) defined?
rust显然是一种新语言(0.8)。它看起来很有趣,我开始研究它。我提到了一些将
There are three floating-point types:
float ,f32 , andf64 . Floating-point numbers are written0.0 ,1e6 , or2.1e-4 . Like integers, floating-point literals are inferred to the correct type. Suffixesf ,f32 , andf64 .
我猜" float"或" f"是16位。
总的来说(我不是计算机科学家),真的值得弄乱所有这些小数据类型,例如
也许有些低级程序需要较小的值,但是为什么不将使用量保留给需要它们的程序却又将其置于核心之外?我发现从(例如)转换成它是不必要的琐事。
特别是对于
The Rust type float is a machine-specific type equal to one of the
supported Rust floating-point machine types (f32 or f64). It is the
largest floating-point type that is directly supported by hardware on
the target machine, or if the target machine has no floating-point
hardware support, the largest floating-point type supported by the
software floating-point library used to support the other
floating-point machine types.
所以
要回答问题的第二部分,在像Rust这样的低语言级别中,我们不能简单地假设浮点数是64位,因为如果硬件本身不支持这种浮点数,则存在一个明显的性能损失。一个人都不能具有未指定表示形式的单一浮点类型,因为在很多用例中,都需要保证被操纵数字的精度。
通常,通常使用
编辑:
"更一般的注释"的答案:Rust出于两个相互关联的原因而公开了这种数字类型:
-
Rust是一种系统语言。
编译目标(LLVM或最终的具体机器代码,例如amd64)进行了这些区分以表示不同的硬件功能。为不同的平台选择不同的数据类型会影响运行时性能,内存和其他资源使用。程序员具有这种灵活性,可以使他们将软件微调到特定的硬件。
-
Rust优先考虑与C的互操作。
C可能出于相同的理由做出了相同的区分,或者可能做出了区分,因为C在提供较少的抽象并将更多的委托给基础汇编程序时更为简单。
无论哪种方式,为了在Rust和C之间互操作而不使用昂贵的通用抽象层,每种语言中的原始类型都直接相互对应。
一些建议:
如果您不关心性能,只需使用最大的整数
这与传统的C语言智慧相反(也许Rust社区会不同意我的看法),因为如果您将"自然类型用于架构",则相同的代码将在多种架构上运行良好。但我认为,环绕精度或浮点精度的意外差异是比性能更糟糕的问题。 (我的偏见来自于处理安全性。)
如果要避免完全用整数环绕,可以使用bigints,这是对硬件基元的昂贵的软件抽象。
顺便说一句,我很欣赏明确地将