Hacker Newsnew | past | comments | ask | show | jobs | submit | InfernalH's commentslogin

Already in production for months, no particular problems


I tried with a "pure" Array - for Ruby it's 1Mb for 100 000 elements

EDIT: and for Hash with h[i] = i, it's ~6Mb


Does that account for the size taken by the integers themselves?


I assume so. If the integers fit in 31 or 63 bits, depending on your architecture, they are inlined in the pointer.


OK (because that's not the case in CPython, I think)


Yeah, I too am pretty sure that CPython does not inline integers in the pointers. And from a quick glance at the source code I saw nothing such.

Inlining integers in pointers by shifting up and adding 1 is a quite common trick though and I have seen it in more programming language implementations than MRI. I think at least some Prolog implementation and older versions of Spidermonkey (newer versions use a similar trick with doubles).


Inlining integers in pointers by shifting up and adding 1 is a quite common trick though and I have seen it in more programming language implementations than MRI

This trick was already used in Smalltalk-80, btw. A more recent variant of this is NaN tagging, made popular by LuaJIT.


> Inlining integers in pointers by shifting up and adding 1 is a quite common trick though and I have seen it in more programming language implementations than MRI.

Yeah, I know about it, I just did not think MRI had bothered with it anymore than CPython.


false, true, nil, Symbol's and Fixnum's are all special cased with typetags in MRI.


Everytime when you try to build bigger app with sinatra, you will probably end up building half-rails. So it the end it doesn't make much sense just the time it was needed to put in to find and require additional libs


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: