Can a Ruby program determine whether it's running on a 32-bit or 64-bit system?

I can’t go by RUBY_PLATFORM – I’m setting up a new 32-bit Linux box,
and RUBY_PLATFORM is set to “i686-linux”.

Or maybe this is a bug – repaved machine, installed Fedora Core 9,
downloaded and built a vanilla Ruby 1.8.6 – but I see this on another
32-bit Linux box as well (this one’s a virtual host, but cat /proc/ cpuinfo
suggests it’s 32-bit)

If anyone’s wondering, this is related to the Komodo debugger. The
ruby-debug-base component is not 32/64-bit universal, so I need to
put the 32-bit binary in one dir, the 64-bit one in another, and
direct the client to the right spot.

Thanks,
Eric P.

On Wednesday 03 September 2008 02:39:37 Eric P. wrote:

I can’t go by RUBY_PLATFORM – I’m setting up a new 32-bit Linux box,
and RUBY_PLATFORM is set to “i686-linux”.
Well, i?86 means it is 32bit.
64-bit x86 system would have ‘x86_64-linux’.

Jan

Eric P. wrote:

Can a Ruby program determine whether
it’s running on a 32-bit or 64-bit system?

Yes. Look at the result of calling the ‘size’ method on a Fixnum; it
will be 4 on 32-bit machines, and 8 on 64-bit machines.

0.size
=> 4

I got 4 on 64bit Windows Server. That doesn’t mean that it depends if it
was
built on 64bit or 32bit, I mean ruby core.

2008/9/2 Suraj K. [email protected]

Le 3 septembre 2008 à 02:42, Eric P. a écrit :

I can’t go by RUBY_PLATFORM – I’m setting up a new 32-bit Linux box,
and RUBY_PLATFORM is set to “i686-linux”.

Pack has a support for native size :

RUBY_PLATFORM
=> “i386-freebsd6”

[ -1 ].pack(‘l!’).length
=> 4

While…

RUBY_PLATFORM
=> “amd64-freebsd7”

[ -1 ].pack(‘l!’).length
=> 8

(From the Pickaxe : ‘Any of the directives “sSiIlL” may be followed by
an underscore (_) or bang (!) to use the underlying platform’s native
size for the specified type’)

Fred

Suraj K. wrote:

Eric P. wrote:

Can a Ruby program determine whether
it’s running on a 32-bit or 64-bit system?

Yes. Look at the result of calling the ‘size’ method on a Fixnum; it
will be 4 on 32-bit machines, and 8 on 64-bit machines.

0.size
=> 4

On my 32 bit machine I get this:
p 0.size
=> 8

p [ -1 ].pack(‘l!’).length
=> 4

I am not sure why, but there it is, fyi.