[#48779] Ruby jobs — Phlip <phlip_cpp@...>

Rubies:

31 messages 2002/09/01

[#48886] cgi redirect — Tom Robinson <tom@...>

in perl, this is easy:

15 messages 2002/09/03

[#48917] New list: ruby-modules - for module developers... — Sean Chittenden <sean@...>

Howdy folks. I've put together a new list for ruby developers at

18 messages 2002/09/03

[#48978] option remember

Hi,

16 messages 2002/09/04

[#49042] Options for optimizing a large Ruby system — sera@... (Francis Hwang)

Hi everybody:

16 messages 2002/09/04

[#49107] RE: suggestions to the Ruby community — "Berger, Daniel" <djberge@...>

I've been following the documentation discussion with some interest. Some

35 messages 2002/09/05
[#49136] RE: suggestions to the Ruby community — " JamesBritt" <james@...> 2002/09/05

[#49294] OS-independent build of ruby — "reckless" <reckless2k@...>

Hi,

42 messages 2002/09/06
[#49318] Re: OS-independent build of ruby — ptkwt@...1.aracnet.com (Phil Tomson) 2002/09/06

In article <alali7$cth$01$1@news.t-online.com>,

[#49450] JRuby (was Re: OS-independent build of ruby) — Austin Ziegler <austin@...> 2002/09/08

JRuby exists ...

[#49297] Larry Wall's comments on Ruby — ptkwt@...1.aracnet.com (Phil Tomson)

http://interviews.slashdot.org/article.pl?sid=02/09/06/1343222&mode=thread&tid=145

29 messages 2002/09/06

[#49301] Re: Larry Wall's comments on Ruby — Andrew Hunt <andy@...>

61 messages 2002/09/06
[#49372] Re: Larry Wall's comments on Ruby — Reimer Behrends <behrends@...> 2002/09/07

Patrick May (patrick-may@monmouth.com) wrote:

[#49446] Re: Larry Wall's comments on Ruby — Austin Ziegler <austin@...> 2002/09/08

On Sat, 7 Sep 2002 14:21:22 +0900, Reimer Behrends wrote:

[#49333] Re: Larry Wall's comments on Ruby — Andrew Hunt <andy@...>

>yeah and as I said, depending on your background , Ruby is just as full

20 messages 2002/09/06

[#49627] Re: Larry Wall's comments on Ruby — "Marcin 'Qrczak' Kowalczyk" <qrczak@...>

Mon, 9 Sep 2002 14:26:37 +0900, Wirianto Djunaidi <ryo_saeba_009@yahoo.com> pisze:

83 messages 2002/09/09
[#49658] Re: Larry Wall's comments on Ruby — "Christoph" <chr_news@...> 2002/09/10

"Yukihiro Matsumoto" wrote

[#49707] Re: Larry Wall's comments on Ruby — David.Stagner@...

I think Gavin is right... we don't "add" strings, we concatenate them.

16 messages 2002/09/10

[#49766] RubyInline 1.0.4 Released! (fwd) — Pat Eyler <pate@...>

Woohoo! another cool new toy to play with!

34 messages 2002/09/10
[#49965] Re: Windows XP : RubyInline 1.0.4 Released! (fwd) — "Park Heesob" <phasis@...> 2002/09/12

Hi,

[#49787] call for commentary: review of Ruby for a magazine (long, sorry!) — Rick Wayne <fewayne@...>

hello again folks,

30 messages 2002/09/10

[#49849] private variables — ts <decoux@...>

81 messages 2002/09/11
[#50348] Re: private variables — William Djaja Tjokroaminata <billtj@...> 2002/09/16

Well, will these localized/private variables make it into the next Ruby

[#49988] not grasping the method overloading/multi-dispatch thing — dblack@...

Hello --

58 messages 2002/09/12
[#49990] Re: not grasping the method overloading/multi-dispatch thing — Friedrich Dominicus <frido@...> 2002/09/12

dblack@candle.superlink.net writes:

[#49992] Re: not grasping the method overloading/multi-dispatch thing — dblack@... 2002/09/12

Hi --

[#50040] Re: not grasping the method overloading/multi-dispatch thing — ptkwt@...1.aracnet.com (Phil Tomson) 2002/09/12

In article <3D80AD8D.27388.FBF0F18@localhost>,

[#50027] interesting Perl Journal move — Pat Eyler <pate@...>

The Perl Journal is being reborn yet again. This time, it will be an

21 messages 2002/09/12
[#50041] Re: interesting Perl Journal move — Jim Freeze <jim@...> 2002/09/12

On Fri, Sep 13, 2002 at 01:44:18AM +0900, Pat Eyler wrote:

[#50172] DbTalk 0.7 — Dalibor Sramek <dali@...>

I would like to announce a new release of my Ruby project DbTalk.

17 messages 2002/09/13

[#50224] MVC and OO Design? — jcb@... (MetalOne)

The Model View Controller Architecture has always had me a bit

18 messages 2002/09/14

[#50298] camelCaseTo_ruby_case.rb ?? — Thomas Sdergaard <tsondergaard@...>

Hi,

21 messages 2002/09/15
[#50304] Re: camelCaseTo_ruby_case.rb ?? — dblack@... 2002/09/16

Hello --

[#50312] Re: camelCaseTo_ruby_case.rb ?? — Joel VanderWerf <vjoel@...> 2002/09/16

[#50369] Why are parser tools rarely used in ruby? — "MikkelFJ" <mikkelfj-anti-spam@...>

Why is it that all the ruby source I find in the Ruby (windows) distribution

25 messages 2002/09/16

[#50374] Dependency "trees" - suggestions? — Massimiliano Mirra <list@...>

I'm struggling with building dependency "trees" for rpkg. What

15 messages 2002/09/16

[#50403] comments and continuing strings on the next line — Paul Brannan <pbrannan@...>

I have a tendency to write:

14 messages 2002/09/16

[#50466] Qt vs. FOX vs. ? (was Help on installing ruby-qt on windowsXP) — "Volkmann, Mark" <Mark.Volkmann@...>

> -----Original Message-----

16 messages 2002/09/17

[#50525] Matz, if you're reading, please scan this email — ser@... (Sean Russell)

I've found a problem with the Ruby interpreter, wherein the

23 messages 2002/09/18
[#51226] Re: Matz, if you're reading, please scan this email — Sean Chittenden <sean@...> 2002/09/24

> I've found a problem with the Ruby interpreter, wherein the

[#51281] Re: Matz, if you're reading, please scan this email — ts <decoux@...> 2002/09/25

>>>>> "S" == Sean Chittenden <sean@chittenden.org> writes:

[#51454] Re: Matz, if you're reading, please scan this email — Sean Chittenden <sean@...> 2002/09/26

> S> In the unit tests for libxml, I think I've pushed things to SEGV land

[#51592] Re: Matz, if you're reading, please scan this email — ts <decoux@...> 2002/09/27

>>>>> "S" == Sean Chittenden <sean@chittenden.org> writes:

[#51742] Re: Matz, if you're reading, please scan this email — Sean Chittenden <sean@...> 2002/09/28

> >>>>> "S" == Sean Chittenden <sean@chittenden.org> writes:

[#51748] Re: Matz, if you're reading, please scan this email — ts <decoux@...> 2002/09/28

>>>>> "S" == Sean Chittenden <sean@chittenden.org> writes:

[#51796] ruby bug in tight loops? (was: Re: Matz, if you're reading, please scan this email) — Sean Chittenden <sean@...> 2002/09/28

> S> :-/ You could be right, but, the IO context is created when reading

[#51825] Re: ruby bug in tight loops? (was: Re: Matz, if you're reading, please scan this email) — ts <decoux@...> 2002/09/29

>>>>> "S" == Sean Chittenden <sean@chittenden.org> writes:

[#51826] Re: ruby bug in tight loops? (was: Re: Matz, if you're reading, please scan this email) — Sean Chittenden <sean@...> 2002/09/29

> S> Good catch, I fixed this in the CVS version, however this is a

[#51831] Re: ruby bug in tight loops? (was: Re: Matz, if you're reading, please scan this email) — ts <decoux@...> 2002/09/29

>>>>> "S" == Sean Chittenden <sean@chittenden.org> writes:

[#50579] How to Efficiently Calculate the Pattern of Zeros and Ones? — William Djaja Tjokroaminata <billtj@...>

Hi,

11 messages 2002/09/18

[#50606] Python the new Lisp, what about Ruby then? — web2ed@... (Edward Wilson)

I've been reading that Python is the new lisp.

19 messages 2002/09/18
[#50614] Re: Python the new Lisp, what about Ruby then? — Tom Sawyer <transami@...> 2002/09/19

come on! python the new lisp? what's that suppose to mean? nothing

[#50629] RE: Python the new Lisp, what about Ruby then? — "Mike Campbell" <michael_s_campbell@...> 2002/09/19

> ruby though just may gain as great a heritage as lisp due to its highly

[#50652] Is better to subclass or to add methods to an existing class? — Vincent Foley <vinfoley@...>

I was discussing with a (Python) friend last night. I told him that one

31 messages 2002/09/19

[#50667] select and select — dblack@...

Hello --

99 messages 2002/09/19
[#50906] class documentation — "Mark Volkmann" <volkmann2@...> 2002/09/21

Is there a general concensus as to the best tool/format for documenting Ruby

[#50787] Re: select and select — Joel VanderWerf <vjoel@...> 2002/09/20

Yukihiro Matsumoto wrote:

[#50911] Re: select and select — matz@... (Yukihiro Matsumoto) 2002/09/21

Hi,

[#50912] Re: select and select — dblack@... 2002/09/21

Hi --

[#51168] Re: select and select — "Gavin Sinclair" <gsinclair@...> 2002/09/24

[#51184] Re: select and select — dblack@... 2002/09/24

Hi --

[#51196] Re: select and select — "Gavin Sinclair" <gsinclair@...> 2002/09/24

[#51199] Re: select and select — dblack@... 2002/09/24

Hi --

[#50732] don't understand cause of `sysread': Bad file descriptor (Errno::EBADF) — Robert McGovern <tarasis@...>

Was writting a script to poll an audiotron (www.audiotron.net) and

13 messages 2002/09/19

[#50762] Thoughts on improving usage of Regexp#match — "Hal E. Fulton" <hal9000@...>

Please feel free to point out obvious things

15 messages 2002/09/20

[#50850] Checking hash key's and values, with case insensitivity — khabibiuf@... (Khurram)

Hey all,

26 messages 2002/09/20

[#50867] Speed up suggestions — Tomas Brixi <tomas_brixi@...>

Hello,

18 messages 2002/09/20

[#50878] String interpolation at will? — "Hal E. Fulton" <hal9000@...>

Maybe I'm overlooking something obvious,

14 messages 2002/09/20
[#50880] RE: String interpolation at will? — Steve Tuckner <STUCKNER@...> 2002/09/20

Maybe this is too dangerous but

[#50958] are functions/methods "first class objects"? — David Garamond <davegaramond@...>

sorry this is a bit philosophical, but i just wonder whether ruby can be

17 messages 2002/09/22

[#50972] Re: Speed up suggestions — Tomas Brixi <tomas_brixi@...>

Thanks all for speedup tips.

22 messages 2002/09/23
[#50975] Re: Speed up suggestions — Ryan Davis <ryand@...> 2002/09/23

[#50983] Re: Speed up suggestions — Tomas Brixi <tomas_brixi@...> 2002/09/23

[#51156] adding overload to ruby — "Bulat Ziganshin" <bulatz@...>

Hello all and especially Matz,

285 messages 2002/09/24
[#51371] Re: adding overload to ruby — "Justin Johnson" <justinj@...> 2002/09/26

[#51372] Re: adding overload to ruby — "Bulat Ziganshin" <bulatz@...> 2002/09/26

Hello Justin,

[#51375] Re: adding overload to ruby — ts <decoux@...> 2002/09/26

>>>>> "B" == Bulat Ziganshin <bulatz@integ.ru> writes:

[#51376] Re: adding overload to ruby — "Bulat Ziganshin" <bulatz@...> 2002/09/26

Hello ts,

[#51378] Re: adding overload to ruby — ts <decoux@...> 2002/09/26

>>>>> "B" == Bulat Ziganshin <bulatz@integ.ru> writes:

[#51382] Re: adding overload to ruby — "Bulat Ziganshin" <bulatz@...> 2002/09/26

Hello ts,

[#51384] Re: adding overload to ruby — dblack@... 2002/09/26

Hi --

[#51388] Re: adding overload to ruby — "Bulat Ziganshin" <bulatz@...> 2002/09/26

Hello dblack,

[#51391] Re: adding overload to ruby — dblack@... 2002/09/26

Hi --

[#51413] Re: adding overload to ruby — "Justin Johnson" <justinj@...> 2002/09/26

[#51542] Re: adding overload to ruby — "Bulat Ziganshin" <bulatz@...> 2002/09/27

Hello Justin,

[#51574] R (was: adding overload to ruby) — Nikodemus Siivola <tsiivola@...> 2002/09/27

[#51576] Re: R (was: adding overload to ruby) — "Bulat Ziganshin" <bulatz@...> 2002/09/27

Hello Nikodemus,

[#51591] Re: R (was: adding overload to ruby) — Nikodemus Siivola <tsiivola@...> 2002/09/27

[#51621] Re: R — William Djaja Tjokroaminata <billtj@...> 2002/09/27

Hi,

[#51741] Re: R — Nikodemus Siivola <tsiivola@...> 2002/09/28

[#51747] Re: R — William Djaja Tjokroaminata <billtj@...> 2002/09/28

Hi,

[#51752] Re: R — dblack@... 2002/09/28

Hi --

[#51755] Re: R — William Djaja Tjokroaminata <billtj@...> 2002/09/28

Oh yes, in fact, this is one of our selling points, right? We show the

[#51918] Re: R — "Bulat Ziganshin" <bulatz@...> 2002/09/30

Hello William,

[#51923] Re: R — matz@... (Yukihiro Matsumoto) 2002/09/30

Hi,

[#51938] Re: R — "Bulat Ziganshin" <bulatz@...> 2002/09/30

Hello Yukihiro,

[#51949] Re: R — matz@... (Yukihiro Matsumoto) 2002/09/30

Hi,

[#51953] Re: R — "Bulat Ziganshin" <bulatz@...> 2002/09/30

Hello Yukihiro,

[#51593] RE: R (was: adding overload to ruby) — "Christian Boos" <cboos@...> 2002/09/27

Did you have a look at http://merd.net :

[#51462] Re: adding overload to ruby — William Djaja Tjokroaminata <billtj@...> 2002/09/26

Why not designing a new language with a mix of typed variable and untyped

[#51467] Re: adding overload to ruby — <bbense+comp.lang.ruby.Sep.26.02@...> 2002/09/26

-----BEGIN PGP SIGNED MESSAGE-----

[#51185] Object-Oriented struct Model in C — William Djaja Tjokroaminata <billtj@...>

Hi,

20 messages 2002/09/24

[#51389] Is Ruby's grammar LL(k)? — Mauricio =?unknown-8bit?Q?Fern=E1ndez?= <batsman.geo@...>

16 messages 2002/09/26

[#51444] Ruby/Tk or mod_ruby or what ?? — GBanschbach@...

Dear All,

16 messages 2002/09/26

[#51486] Ruby - common pitfalls? — Rudolf Polzer <AntiATField_adsgohere@...>

Is there a list of common pitfalls beginners in this language should

32 messages 2002/09/26

[#51530] Where Is Method Call Precedence? — William Djaja Tjokroaminata <billtj@...>

Hi,

40 messages 2002/09/27

[#51639] RE: REXML namespace support — "Volkmann, Mark" <Mark.Volkmann@...>

In my case I'm given a string which is a namespace prefix and I want to

14 messages 2002/09/27

[#51809] thoughts on typelessness — dblack@...

Hi --

136 messages 2002/09/29
[#51810] Re: thoughts on typelessness — William Djaja Tjokroaminata <billtj@...> 2002/09/29

Hi David,

[#51877] Re: thoughts on typelessness — Chris Gehlker <canyonrat@...> 2002/09/29

[#52055] Re: thoughts on typelessness — Bryan Murphy <bryan@...> 2002/10/01

Gavin Sinclair wrote:

[#52059] Re: thoughts on typelessness — Chris Gehlker <canyonrat@...> 2002/10/01

[#52062] Re: thoughts on typelessness — Bryan Murphy <bryan@...> 2002/10/01

Chris Gehlker wrote:

[#52081] Re: thoughts on typelessness — Chris Gehlker <canyonrat@...> 2002/10/01

[#52147] Re: thoughts on typelessness — William Djaja Tjokroaminata <billtj@...> 2002/10/01

Hi Dave,

[#52150] Re: thoughts on typelessness — Dave Thomas <Dave@...> 2002/10/01

William Djaja Tjokroaminata <billtj@y.glue.umd.edu> writes:

[#52151] Re: thoughts on typelessness — GOTO Kentaro <gotoken@...> 2002/10/01

At Wed, 2 Oct 2002 01:37:46 +0900,

[#52154] Re: thoughts on typelessness — Paul Brannan <pbrannan@...> 2002/10/01

On Wed, Oct 02, 2002 at 02:11:24AM +0900, GOTO Kentaro wrote:

[#51818] announce@ == less email (FAQ item?) — Ryan Davis <ryand-ruby@...>

ZenTest and ZenWeb were just released. I announced these to several

40 messages 2002/09/29

[#51974] Things That Newcomers to Ruby Should Know — William Djaja Tjokroaminata <billtj@...>

Things That Newcomers to Ruby Should Know

37 messages 2002/09/30
[#52128] Re: Things That Newcomers to Ruby Should Know — William Djaja Tjokroaminata <billtj@...> 2002/10/01

Thanks, Gabriele. I will try to incorporate your input. The "0 is

[#52965] Re: Things That Newcomers to Ruby Should Know — "Kontra, Gergely" <kgergely@...> 2002/10/11

>> - the ||= operator exists :-)

[#52970] Re: Things That Newcomers to Ruby Should Know — William Djaja Tjokroaminata <billtj@...> 2002/10/11

Hi,

[#52971] Re: Things That Newcomers to Ruby Should Know — dblack@... 2002/10/11

Hi --

Re: Ruby aesthetics

From: Reimer Behrends <behrends@...>
Date: 2002-09-06 11:50:36 UTC
List: ruby-talk #49260
Christian Szegedy (szegedy@t-online.de) wrote:
[...]
>  In C++, you don't have to know the implementation of the base class, 
>  i.e., you only need to know the interface. If you declare a new
>  data member, then it will hide the original one, so you don't have to
>  worry about the private part of all ancestor classes, if you define
>  a new data member.

I am well aware of that. However, as I said, it's a religious issue that
has been debated to death over the years (see the comp.object or
comp.lang.eiffel archives, for instance). It is essentially a question
of methodology. Let me present you with the other side of the coin.

When you use private methods to encapsulate part of a class against
access by its descendants, you have failed to identify a substructure
of that class. Given that substructure, it could be implemented in a
class of its own, and accessed through its public methods, achieving
just the same purpose.

For instance, we may discover that we have an instance variable that is
an array. But the only operations that we are using on it are push,
shift, and whether the array is not empty. Essentially, we have
implemented an ad-hoc queue and now proceed to make the array private,
accessible only through the three operations (protected or public)
'get', 'put', and 'has_data?'.

But we do not really need to make anything private here: we could
instead replace that array with a queue object implementing just the
three operations 'get', 'put', and 'has_data?' In essence, we have
identified a structural abstraction and factored it out.

Moreover, private methods can actually be harmful. To begin with, they
encourage the above phenomenon: pieces of loosely related functionality
within a class. In software engineering, this is called "low cohesion",
and generally considered undesirable, because it creates unnecessary
interdependencies and replicated functionality.

The other harmful aspect is that they may prevent legitimate uses of
inheritance. It is often not possible to redefine or add functionality
without having access to the data structure. Consider that we find out
in our queue example that we want to implement operations 'get_pair' and
'has_pair?', where 'get_pair' retrieves a pair of values and 'has_pair?'
tests if there are at least two more elements available in the queue.
We cannot implement 'has_pair?' without first counting every element in
the queue by retrieving them and then putting them back in, or hacking
in some additional code to transparently pull out the first element.

However, if we first factored out the functionality of the queue, we can
now subclass the implementation of the queue separately (the queue
having no private members), and substitute the new implementation for
the old one.

(See http://citeseer.nj.nec.com/257843.html for a more elaborate
discussion.)

>  In Ruby, the situation is even worse, as all methods may introduce new
>  data memebers, so you have to check the body of all methods, if you
>  want to avoid name collisions for sure.

Why would somebody create such a mess in the first place? Information
hiding does not exempt the implementation side from documentation and
clean design.

>  It may be OK for small projects, but if you have to work in a large
>  class hierarchy written by someone else, it can become hopeless,
>  and you can only hope that nothing goes wrong.

If the parent class you're inheriting from is too convoluted to be
understood, then you have a far bigger problem on your hand. I'd
suggest that it isn't safe to inherit from the class at all, and
that you should use aggregation instead.

The reason is that by inheriting you make the promise that you implement
the same contract as the parent class, and that you do typically by
reusing part of the implementation. This is far stronger than the
client-supplier relationship. If you don't know what you are doing
there, don't do it at all.

For what it's worth, if you introduce private variables, the problem
is only transferred to the functions accessing it. Redefine 'put'
in the queue example above by accident, and you have the same problem;
except that it's more subtle, since two pieces of code accessing the
same variable are going to show up on your unit tests much quicker
than one errant function.

>  Besides, I think it is a clear violation of the separation of 
>  mplementation and interface.

The relationship between subclass and parent is a different one from
that between client and supplier. Nothing can be assumed between client
and supplier, but the subclass is-a parent, and needs to know a whole
lot more about it. The justification for information hiding in the
client-supplier relationship -- to hide design decisions from the client
so as not to create inadvertent dependencies -- does not hold for the
parent-subclass relationship, because there already is an
interdependency: the subclass needs to know about those design
decisions, as opposed to the client. Conversely, the impact is much
smaller: the parent has much fewer subclasses than potential clients.

This leads us to the real underlying problem: We have a trade-off
between two alternatives: Making classes fully extensible by inheritance
or limiting that extensibility. In fact, if all variables were private,
then we could essentially do no more with inheritance than composing the
functions of the parents, but not add any real new and non-trivial
functionality. And we don't really need inheritance for that -- it would
become more or less superfluous.

The openness, the extensibility of classes through inheritance plays a
critical part in object-oriented programming. It allows us to keep the
interfaces of base classes fixed and unchanging. If we need additional
functionality, we derive a subclass and add the functionality there. If
we can't do that, then we have to go back to the base class and augment
that, leading to the fragile base class problem (even adding a single
method to access data that subclasses aren't aware of can break entire
caching schemes, for instance) and possibly even changing public
interfaces. Inheritance is essentially our safety-valve so that base
classes remain stable and that changes are localized. Conversely, if we
shut down that safety valve, we pay our price in terms of more frequent
changes to the base classes, and the resultant instability of the entire
system.

Yet that doesn't mean that we want our subclasses to mess around with
instance variables introduced by their parents at will. But rather than
throwing out the baby with the bathwater -- disallowing any and all
changes -- it is much more sensible to just disallow those changes that
are actually illegitimate. For that, we distinguish the abstract
behavior -- that which is visible to external clients -- from the
concrete behavior: that which is internal to the class. Note that
writing unit tests for the concrete behavior of a class is not hard,
since instance_eval allows us to peek inside a class with ease; but also
that private variables can make writing unit tests for the concrete
behavior of a subclass a real pain. Anyway, once we've got unit tests
for the concrete behavior for the parent class, we can apply the same
tests to the subclass, to see if the behavior has been preserved.

As I said, it is largely a religious issue, and this has become much
longer than I wanted it to be. But there is more to the problem
than you think. And some programming languages have actively chosen
_not_ to have an information hiding barrier between subclass and
parent for reasons such as the ones outlined above.

			Reimer Behrends

In This Thread