Ruby 浮点数和符号如何具有即时值?

Ruby 浮点数和符号如何具有即时值?,ruby,unsigned-integer,Ruby,Unsigned Integer,一位StackOverflow用户告诉我,Floats现在在Ruby中具有即时价值。然而,我对如何实现这一点感到困惑 对于Symbols如何具有即时值,我也感到困惑 我知道具有立即值的对象是可以将整个状态信息封装到名为value的unsigned longC变量中的对象 我可以直观地理解,在考虑小整数(Fixnums)和诸如truefalsenil等琐碎事情时,这是如何可能的 但是,如果对Floats和Symbols没有长度限制,这些对象在没有自身结构的情况下如何表示?首先,Float有长度限制

一位StackOverflow用户告诉我,
Float
s现在在Ruby中具有即时价值。然而,我对如何实现这一点感到困惑

对于
Symbol
s如何具有即时值,我也感到困惑

我知道具有立即值的对象是可以将整个状态信息封装到名为
value
unsigned long
C变量中的对象

我可以直观地理解,在考虑小整数(
Fixnum
s)和诸如
true
false
nil
等琐碎事情时,这是如何可能的


但是,如果对
Float
s和
Symbol
s没有长度限制,这些对象在没有自身结构的情况下如何表示?

首先,Float有长度限制-Float基本上是一个本机双精度浮点值,即64位。但这仍然太多,因此只有尾数不太大时,浮点值才是立即值(您可以看到确切的条件)


对于符号,有一个数据结构枚举所有创建的符号,因此它们可以被称为该表中的偏移量(在ruby 2.2上,只有一些符号是这样的-那些不是“正常”的、可垃圾回收的对象)。

您能否详细说明v2.2中对符号的处理(或给我指一个参考)?例如,请参阅,但简短的版本是,在2.2WOW中,这些符号大部分是可垃圾回收的!那肯定会占用很多空间。我认为尝试将状态封装在单个变量中的全部目的是避免保留大型表。符号就是这样处理的,这样比较可以更快吗?@LukeP fast comparations加上我认为c级代码需要这些不可变的唯一标识符。这些非中介的一大优点是不必反复实例化(然后垃圾收集)相同的对象。同样,关于符号,是否只有一些在运行时创建的常量包含ruby知道要检查的结构的地址?