[#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,

Re: IRHG - GC Memory Fragmentation?

From: Kurt Stephens <ks@...>
Date: 2008-01-01 02:54:49 UTC
List: ruby-core #14651
Charles Thornton wrote:
> While working on Chapter 05  and referencing various works
> on Garbage Collection, I keep seeing that Mark & Sweep are
> considered to have a problem with memory fragmentation.
>
> Since I have not seen any complaints on this subject on the core
> list, I am wondering if there is something inherent about Ruby
> that prevents major fragmentation.
>
> For example, since all basic ruby objects are the same size, does
> this help reduce fragmentation of the GC space?
>
>                 Chuck
>                 ceo@hawthorne-press.com
>
My $0.03:

Ruby objects, like Strings and Vectors, explicitly allocate
dynamically-sized regions, well as the hash tables underneath all the
basic object structures.  Mark and sweep collectors always suffer from
fragmentation because order of allocation and reclamation does not imply
locality; page utilization can become sparser overtime, esp if page
allocations are not segmented by object size and free regions are not
aggressively scanned for best-fit during reallocation or scavenging.

Ruby (appears to) allocate its memory from the OS via malloc(), which
can lead to two levels of fragmentation, depending on the implementation
of malloc();  power-of-two allocators have notoriously poor actual
memory utilization.  Given the lack of comments in Ruby's gc.c, its hard
to tell if Ruby's GC does anything special about the fragmentation
issues with mark-sweep.

I recommend reading the proceedings from the ISMM
(http://www.cs.kent.ac.uk/people/staff/rej/ismm2008/) over the last ten
years and other papers on Lisp system design over the last 20 years.
http://www.memorymanagement.org/ has some helpful information.

There's a great book called "Topics in Advanced Language Implementation"
MIT Press, 1991 that provides a good overview of different automatic
memory managers and their context in programming languages.

My money is on the developments of efficient write barriers that allow
the allocate, mark, scan, reclaim phases to occur concurrently with very
minimal stopping of the world .

http://kurtstephens.com/pub/tredmill/current/src/tredmill/ is a
prototype implementation of a Treadmill allocator that uses color- and
size-segmented lists to concurrently allocate, mark, scan and reclaim
objects in the same thread.  It requires compiler-generated (or
hand-written) calls to a write-barrier to recolor mutated objects that
have been previous marked or scanned.  OS pages are segmented by
allocation size,  making the write-barrier computation reasonably simple.

Unfortunately, it would be difficult to use with Ruby due to Ruby's C
foreign-function interface.  FFIs to C greatly complicate modern memory
management techniques.  SUN's first Java implementations used mark-sweep
until it was clear that it does not perform well for long-running server
processes.  I believe Sun's Java now uses indirection handles to hide a
generational, copying collector from FFI C code. (I could be wrong on
this, I dislike Java too much to care about it :)

I'd like to see how well Ruby would perform using the Bohem/Demers
collector.  Don't get me started about Ruby using a 0x01 type tag for
Fixnums. :)

Kurt Stephens
http://kurtstephens.com



In This Thread