[#11822] RCR: Input XML support in the base Ruby — Dave Thomas <Dave@...>

15 messages 2001/03/01

[#11960] Not Ruby, for me, for the moment at least — "Michael Kreuzer" <mkreuzer@... (nospam)>

I wrote on this newsgroup last weekend about how I was considering using

11 messages 2001/03/04

[#12023] French RUG ? — "Jerome" <jeromg@...>

Hi fellow rubyers,

16 messages 2001/03/05

[#12103] disassembling and reassembling a hash — raja@... (Raja S.)

Given a hash, h1, will the following always hold?

20 messages 2001/03/06

[#12204] FEATURE REQUEST: 'my' local variables — Leo Razoumov <see_signature@127.0.0.1>

Ruby is, indeed, a very well designed language.

64 messages 2001/03/07
[#12250] Re: FEATURE REQUEST: 'my' local variables — Leo Razoumov <see_signature@127.0.0.1> 2001/03/07

>>>>> "GK" == GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp> writes:

[#12284] Re: FEATURE REQUEST: 'my' local variables — gotoken@... (GOTO Kentaro) 2001/03/08

In message "[ruby-talk:12250] Re: FEATURE REQUEST: 'my' local variables"

[#12289] Re: FEATURE REQUEST: 'my' local variables — matz@... (Yukihiro Matsumoto) 2001/03/08

Hi,

[#12452] Re: FEATURE REQUEST: 'my' local variables — gotoken@... (GOTO Kentaro) 2001/03/12

In message "[ruby-talk:12289] Re: FEATURE REQUEST: 'my' local variables"

[#12553] Re: FEATURE REQUEST: 'my' local variables — Dave Thomas <Dave@...> 2001/03/13

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#12329] Math package — Mathieu Bouchard <matju@...>

18 messages 2001/03/09

[#12330] Haskell goodies, RCR and challenge — Robert Feldt <feldt@...>

Hi,

19 messages 2001/03/09
[#12374] Re: Haskell goodies, RCR and challenge — matz@... (Yukihiro Matsumoto) 2001/03/10

Hi,

[#12349] Can Ruby-GTK display Gif Png or Jpeg files? — Phlip <phlip_cpp@...>

Ruby-san:

20 messages 2001/03/09

[#12444] class variables — Max Ischenko <max@...>

14 messages 2001/03/12

[#12606] Order, chaos, and change requests :) — Dave Thomas <Dave@...>

17 messages 2001/03/14

[#12635] email address regexp — "David Fung" <dfung@...>

i would like to locate probable email addresses in a bunch of text files,

12 messages 2001/03/14

[#12646] police warns you -- Perl is dangerous!! — Leo Razoumov <see_signature@127.0.0.1>

I just read this story on Slashdot

14 messages 2001/03/14
[#12651] Re: police warns you -- Perl is dangerous!! — pete@... (Pete Kernan) 2001/03/14

On 14 Mar 2001 11:46:35 -0800, Leo Razoumov <see_signature@127.0.0.1> wrote:

[#12691] Re: police warns you -- Perl is dangerous!! — "W. Kent Starr" <elderburn@...> 2001/03/15

On Wednesday 14 March 2001 15:40, Pete Kernan wrote:

[#12709] [OFFTOPIC] Re: police warns you -- Perl is dangerous!! — Stephen White <spwhite@...> 2001/03/16

On Fri, 16 Mar 2001, W. Kent Starr wrote:

[#12655] Re: FEATURE REQUEST: 'my' local variables — "Benjamin J. Tilly" <ben_tilly@...>

>===== Original Message From Leo Razoumov <see_signature@127.0.0.1> =====

18 messages 2001/03/14

[#12706] Library packaging — "Nathaniel Talbott" <ntalbott@...>

I have a project that I'm working on that needs to live two different lives,

30 messages 2001/03/16

[#12840] Looking for a decent compression scheme — Dave Thomas <Dave@...>

14 messages 2001/03/19

[#12895] differences between range and array — "Doug Edmunds" <dae_alt3@...>

This code comes from the online code examples for

16 messages 2001/03/20
[#12896] Re: differences between range and array — "Hee-Sob Park" <phasis@...> 2001/03/20

[#12899] Re: differences between range and array — Jim Freeze <jim@...> 2001/03/20

On Tue, 20 Mar 2001, Hee-Sob Park wrote:

[#12960] TextBox ListBox — Ron Jeffries <ronjeffries@...>

Attached is a little Spike that Chet and I are doing. It is a

13 messages 2001/03/20

[#12991] [ANN] Lapidary 0.2.0 — "Nathaniel Talbott" <ntalbott@...>

Well, here's my first major contribution to the Ruby world: Lapidary. It's a

16 messages 2001/03/20

[#13028] mkmf question — Luigi Ballabio <luigi.ballabio@...>

15 messages 2001/03/21

[#13185] Reading a file backwards — "Daniel Berger" <djberg96@...>

Hi all,

21 messages 2001/03/25
[#13197] Re: Reading a file backwards — "Daniel Berger" <djberg96@...> 2001/03/25

> Hi Dan,

[#13203] Re: Reading a file backwards — Mathieu Bouchard <matju@...> 2001/03/25

On Sun, 25 Mar 2001, Daniel Berger wrote:

[#13210] Re: Reading a file backwards — "Daniel Berger" <djberg96@...> 2001/03/25

"Mathieu Bouchard" <matju@sympatico.ca> wrote in message

[#13374] Passing an array to `exec'? — Lloyd Zusman <ljz@...>

I'd like to do the following:

15 messages 2001/03/31

[#13397] Multidimensional arrays and hashes? — Lloyd Zusman <ljz@...>

Is it possible in ruby to make use of constructs that correspond to

14 messages 2001/03/31

[ruby-talk:13224] Re: Native/pthreads in Ruby [Long]

From: Marc Butler <mlb@...>
Date: 2001-03-27 00:37:09 UTC
List: ruby-talk #13224
Yukihiro Matsumoto wrote:

> Hi,
>
> In message "[ruby-talk:12981] Re: Native/pthreads in Ruby"
>     on 01/03/21, "Marc Butler" <marc.butler@voyanttech.com> writes:
>
> |>From cursory inspection of the source code Ruby appears to use a
> |conservative Mark-Sweep garbage collector.  This would require all threads
> |that my potentially 'mutate' the heap be suspended before the garbage
> |collector runs, and remain suspened until it has finished.  POSIX threads
> |does *not* provides mechanism by which threads may be suspended without
> |cooperation. [LinuxThreads, 2001]
>
> Giant interpreter lock like Python's may solve this.

> |Garbage collection and Threading are of interest to me and I would be happy
> |to discuss in more detail with like minded list participants.
>
> Inform me since I'm not a thread expert.
>
> Currently, I'm thinking of the scheme following.
>
>   * add configure option to enable native-thread (which is off by
>     default).
>
>   * add interpreter lock for native-thread enabled interpreter.
>
>   * wrap pthread_create() to preserve stack address for each new
>     thread like Bohem GC.
>
> But there might be better way.
>
>                                                         matz.

Hi matz,

I apologize in the long delay in replying to you.  Family commitments have kept
me away from the computer for some time.  I have developed and modified threaded
C++ software on Solaris and Linux for close to 4 years now, but I doubt I am
entitled to consider myself an expert.  I apologize if this appeared to be my
pretense.

I do have some questions and observations for you regarding Ruby's garbage
collector and the possible integration of native threads.

Certainly a global interpreter lock would achieve the synchronization necessary
to run the mark-sweep collector.  It seems natural to place this lock in the
memory allocation routine, so that only threads that are attempting to allocate
memory are locked during garbage collection.

I am aware of the Bohem GC but entirely unfamiliar with its implementation.
Given it is a well established and widely used implementation of a conservative
collector; it seems like a great candidate for a template for Ruby.

I know there are certain annoyances that you would have to accommodate for like
whether the stack grows up or down from the address retrieved from
pthread_getstackaddr and so forth; however such things are trivial.  It is not
clear to me however whether the library reserves the right to move the stack
address around or not.  If this may be the case you might want to set the stack
address and size explicitly when you create the thread.

I am curious as to why ruby uses a conservative collector.  I know that Ruby is
a type-less language but I would have thought the run time structures used by
the interpreter would provide enough information to avoid the need of the
collector.  I am only just learning about garbage collection, and have not
developed any intuition about such systems.

I had imagined that it might be possible to implement a thread oriented
collector using the concepts that drive a generational collector.  If we ignore
thread recycling for convenience, threads often fall into two categories:
short-lived work threads that perform specific tasks; and long-lived threads
that handle blocking system calls (like I/O).  By using the thread id like a
special reference you can dereference all the data allocated in that threads
lifetime, if other threads now have references to that data it will still be
safe.

I realize that the previously described scheme is at best "half-baked" as I am
unable to cook up a nice scheme to deal with long lived threads. However I was
hoping it might be a seed for someone.  Perhaps one of the distributed garbage
collection schemes could be modified to work in the context of Ruby?

marc

In This Thread