[#14696] Inconsistency in rescuability of "return" — Charles Oliver Nutter <charles.nutter@...>

Why can you not rescue return, break, etc when they are within

21 messages 2008/01/02

[#14738] Enumerable#zip Needs Love — James Gray <james@...>

The community has been building a Ruby 1.9 compatibility tip list on =20

15 messages 2008/01/03
[#14755] Re: Enumerable#zip Needs Love — Martin Duerst <duerst@...> 2008/01/04

Hello James,

[#14772] Manual Memory Management — Pramukta Kumar <prak@...>

I was thinking it would be nice to be able to free large objects at

36 messages 2008/01/04
[#14788] Re: Manual Memory Management — Marcin Raczkowski <mailing.mr@...> 2008/01/05

I would only like to add that RMgick for example provides free method to

[#14824] Re: Manual Memory Management — MenTaLguY <mental@...> 2008/01/07

On Sat, 5 Jan 2008 15:49:30 +0900, Marcin Raczkowski <mailing.mr@gmail.com> wrote:

[#14825] Re: Manual Memory Management — "Evan Weaver" <evan@...> 2008/01/07

Python supports 'del reference', which decrements the reference

[#14838] Re: Manual Memory Management — Marcin Raczkowski <mailing.mr@...> 2008/01/08

Evan Weaver wrote:

[#14911] Draft of some pages about encoding in Ruby 1.9 — Dave Thomas <dave@...>

Folks:

24 messages 2008/01/10

[#14976] nil encoding as synonym for binary encoding — David Flanagan <david@...>

The following just appeared in the ChangeLog

37 messages 2008/01/11
[#14977] Re: nil encoding as synonym for binary encoding — Yukihiro Matsumoto <matz@...> 2008/01/11

Hi,

[#14978] Re: nil encoding as synonym for binary encoding — Dave Thomas <dave@...> 2008/01/11

[#14979] Re: nil encoding as synonym for binary encoding — David Flanagan <david@...> 2008/01/11

Dave Thomas wrote:

[#14993] Re: nil encoding as synonym for binary encoding — Dave Thomas <dave@...> 2008/01/11

[#14980] Re: nil encoding as synonym for binary encoding — Gary Wright <gwtmp01@...> 2008/01/11

[#14981] Re: nil encoding as synonym for binary encoding — Yukihiro Matsumoto <matz@...> 2008/01/11

Hi,

[#14995] Re: nil encoding as synonym for binary encoding — David Flanagan <david@...> 2008/01/11

Yukihiro Matsumoto writes:

[#15050] how to "borrow" the RDoc::RubyParser and HTMLGenerator — Phlip <phlip2005@...>

Core Rubies:

17 messages 2008/01/13
[#15060] Re: how to "borrow" the RDoc::RubyParser and HTMLGenerator — Eric Hodel <drbrain@...7.net> 2008/01/14

On Jan 13, 2008, at 08:54 AM, Phlip wrote:

[#15062] Re: how to "borrow" the RDoc::RubyParser and HTMLGenerator — Phlip <phlip2005@...> 2008/01/14

Eric Hodel wrote:

[#15073] Re: how to "borrow" the RDoc::RubyParser and HTMLGenerator — Eric Hodel <drbrain@...7.net> 2008/01/14

On Jan 13, 2008, at 20:35 PM, Phlip wrote:

[#15185] Friendlier methods to compare two Time objects — "Jim Cropcho" <jim.cropcho@...>

Hello,

10 messages 2008/01/22

[#15194] Can large scale projects be successful implemented around a dynamic programming language? — Jordi <mumismo@...>

A good article I have found (may have been linked by slashdot, don't know)

8 messages 2008/01/24

[#15248] Symbol#empty? ? — "David A. Black" <dblack@...>

Hi --

24 messages 2008/01/28
[#15250] Re: Symbol#empty? ? — Yukihiro Matsumoto <matz@...> 2008/01/28

Hi,

Type Tags: Re: IRHG - GC Memory Fragmentation?

From: Kurt Stephens <ks@...>
Date: 2008-01-02 06:31:26 UTC
List: ruby-core #14688
Gary Wright wrote:
>
> On Jan 1, 2008, at 9:27 PM, Kurt Stephens wrote:
>>
>> I have a question: why were Symbols made immediate with a dedicated
>> type tag in VALUE?
>>
>> http://kurtstephens.com/node/52
>
> re: your blog posting:
>
> If Fixnums had a two-bit tag of 00, how would you distinguish between
> fixnum instances and pointers to objects?  Wouldn't you have to do
> some bit twiddling before dereferencing every object pointer?
>
Ruby Fixnums and other types are already distinguished by the type tags.
The rationale for choosing a fixed-size lower 2-bit type tag, opposed to
a dynamic-length type tag, as in Ruby, or high-bit tags, like some older
Lisp implementations, is as follows:

C compilers and dynamic memory allocators will align allocations to
word-boundaries for performance reasons, so there cannot not be a
pointer to an object that would require the lower bits of a pointer,
except for sub-word access, e.g.: char *.  32-bit words are 4 bytes
long; the lower two-bits of any object pointer will always be zero, and
is free to be used for type tagging.

If references to allocated objects are encoded using a 0x03 type tag,
tag removal could be:

  #define RBASIC(X) ((struct RBasic*)((X)-3))

Assuming that most of the time the interpreter is referencing structure
members of the object, and does not need the actual address of the object:

  struct RBasic {
      VALUE flags; /* struct offset: 0 */
      VALUE klass; /* struct offset: 4 */
  };

  RBASIC(X)->klass =>
  ((struct RBasic*)((X)-3))->klass

C compilers convert the -> operator into an offset from an address.  For
32-bit VALUEs:

  RBASIC(X)->flags => *(VALUE*)((X)-3+0)
  RBASIC(X)->klass => *(VALUE*)((X)-3+4)

Using subtraction as the tag removal operation, instead of (X &~3),
allows the C compiler to constant fold the tag removal and the structure
offset:

  RBASIC(X)->flags => *(VALUE*)((X)-3)
  RBASIC(X)->klass => *(VALUE*)((X)+1)

Therefore, there is no additional tag removal cost to reference
structure members with non-zero offsets.  I would reorder the members
depending on which is "hotter".

Research shows that tag manipulation is a heavy cost, esp. for numerics;
any tagging scheme should be as simple and consistent as possible.

For example, determining the class of a VALUE could be inlined:

  #define CLASS_OF(v) ((v) & 3) ? RBASIC(v)->klass : rb_cFixnum)

Kurt Stephens



In This Thread