[#33161] Call/CC and Ruby iterators. — olczyk@... (Thaddeus L Olczyk)

Reading about call/cc in Scheme I get the impression that it is very

11 messages 2002/02/05

[#33242] favicon.ico — Dave Thomas <Dave@...>

19 messages 2002/02/06
[#33256] Re: favicon.ico — Leon Torres <leon@...> 2002/02/06

[#33435] Reg: tiny contest: who's faster? (add_a_gram) — grady@... (Steven Grady)

> My current solution works correctly with various inputs.

17 messages 2002/02/08

[#33500] Ruby Embedded Documentation — William Djaja Tjokroaminata <billtj@...>

Hi,

24 messages 2002/02/10
[#33502] Re: Ruby Embedded Documentation — "Lyle Johnson" <ljohnson@...> 2002/02/10

> Now, I am using Ruby on Linux, and I have downloaded Ruby version

[#33615] Name resolution in Ruby — stern@... (Alan Stern)

I've been struggling to understand how name resolution is supposed to

16 messages 2002/02/11

[#33617] choice of HTML templating system — Paul Brannan <paul@...>

I am not a web developer, nor do I pretend to be one.

23 messages 2002/02/11

[#33619] make first letter lowercase — sebi@... (sebi)

hello,

20 messages 2002/02/11
[#33620] Re: [newbie] make first letter lowercase — Tobias Reif <tobiasreif@...> 2002/02/11

sebi wrote:

[#33624] Re: [newbie] make first letter lowercase — "Jeff 'japhy' Pinyan" <jeffp@...> 2002/02/11

On Feb 11, Tobias Reif said:

[#33632] Re: [newbie] make first letter lowercase — Mathieu Bouchard <matju@...> 2002/02/12

[#33731] simple XML parsing (greedy / non-greedy — Ron Jeffries <ronjeffries@...>

Suppose I had this text

14 messages 2002/02/13

[#33743] qualms about respond_to? idiom — David Alan Black <dblack@...>

Hi --

28 messages 2002/02/13
[#33751] Re: qualms about respond_to? idiom — Dave Thomas <Dave@...> 2002/02/13

David Alan Black <dblack@candle.superlink.net> writes:

[#33754] Re: qualms about respond_to? idiom — David Alan Black <dblack@...> 2002/02/13

Hi --

[#33848] "Powered by Ruby" banner — Yuri Leikind <YuriLeikind@...>

Hello Ruby folks,

78 messages 2002/02/14
[#33909] Re: "Powered by Ruby" banner — Leon Torres <leon@...> 2002/02/14

On Thu, 14 Feb 2002, Yuri Leikind wrote:

[#33916] RE: "Powered by Ruby" banner — "Jack Dempsey" <dempsejn@...> 2002/02/15

A modest submission:

[#33929] Re: "Powered by Ruby" banner — yet another bill smith <bigbill.smith@...> 2002/02/15

Kent Dahl wrote:

[#33932] OT Netscape 4.x? was Re: "Powered by Ruby" banner — Chris Gehlker <gehlker@...> 2002/02/15

On 2/15/02 5:54 AM, "yet another bill smith" <bigbill.smith@verizon.net>

[#33933] RE: OT Netscape 4.x? was Re: "Powered by Ruby" banner — "Jack Dempsey" <dempsejn@...> 2002/02/15

i just don't understand why it didn't show up! dhtml/javascript, ok, but a

[#33937] Re: OT Netscape 4.x? was Re: "Powered by Ruby" banner — Chris Gehlker <gehlker@...> 2002/02/15

On 2/15/02 7:16 AM, "Jack Dempsey" <dempsejn@georgetown.edu> wrote:

[#33989] Re: OT OmniWeb [was: Netscape 4.x?] — Sean Russell <ser@...> 2002/02/16

Chris Gehlker wrote:

[#33991] Re: OT OmniWeb [was: Netscape 4.x?] — Rob Partington <rjp@...> 2002/02/16

In message <3c6e5e01_1@spamkiller.newsgroups.com>,

[#33993] Re: OT OmniWeb [was: Netscape 4.x?] — Thomas Hurst <tom.hurst@...> 2002/02/16

* Rob Partington (rjp@browser.org) wrote:

[#33925] Re: "Powered by Ruby" banner — Martin Maciaszek <mmaciaszek@...> 2002/02/15

In article <3C6CFCCA.5AD5CA67@scnsoft.com>, Yuri Leikind wrote:

[#33956] Re: "Powered by Ruby" banner — Leon Torres <leon@...> 2002/02/15

On Fri, 15 Feb 2002, Martin Maciaszek wrote:

[#33851] Ruby and .NET — Patrik Sundberg <ps@...>

I have been reading a bit about .NET for the last couple of days and must say

53 messages 2002/02/14

[#34024] Compiled companion language for Ruby? — Erik Terpstra <erik@...>

Hmmm, seems that my previous post was in a different thread, I'll try

12 messages 2002/02/16

[#34036] The GUI Returns — "Horacio Lopez" <vruz@...>

Hello all,

33 messages 2002/02/17

[#34162] Epic4/Ruby — Thomas Hurst <tom.hurst@...>

Rejoice, for you no longer have to put up with that evil excuse for a

34 messages 2002/02/18

[#34185] Operator overloading and multiple arguments — ptkwt@...1.aracnet.com (Phil Tomson)

I'm trying to overload the '<=' operator in a class in order to use it for

10 messages 2002/02/18

[#34217] Ruby for web development — beripome@... (Billy)

Hi all,

21 messages 2002/02/19

[#34350] FAQ for comp.lang.ruby — "Hal E. Fulton" <hal9000@...>

RUBY NEWSGROUP FAQ -- Welcome to comp.lang.ruby! (Revised 2001-2-18)

15 messages 2002/02/20

[#34375] Setting the Ruby continued — <jostein.berntsen@...>

Hi,

24 messages 2002/02/20
[#34384] Re: Setting the Ruby continued — Paulo Schreiner <paulo@...> 2002/02/20

Also VERY important:

[#34467] recursive require — Ron Jeffries <ronjeffries@...>

I'm having a really odd thing happen with two files that mutually

18 messages 2002/02/21

[#34503] special characters — Tobias Reif <tobiasreif@...>

Hi all,

13 messages 2002/02/22

[#34517] Windows Installer Ruby 166-0 available — Andrew Hunt <andy@...>

16 messages 2002/02/22

[#34597] rdoc/xml questions — Dave Thomas <Dave@...>

24 messages 2002/02/23

[#34631] Object/Memory Management — "Sean O'Dell" <sean@...>

I'm new to Ruby and the community here (I've been learning Ruby for a grand

44 messages 2002/02/23

[#34682] duplicate method name — Ron Jeffries <ronjeffries@...>

I just found a case in a test file where i had two tests of the same

16 messages 2002/02/24
[#34687] Re: duplicate method name — s@... (Stefan Schmiedl) 2002/02/24

Hi Ron.

[#34791] Style Question — Ron Jeffries <ronjeffries@...>

So I'm building this set theory library. The "only" object is supposed

13 messages 2002/02/25

[#34912] RCR?: parallel to until: as_soon_as — Tobias Reif <tobiasreif@...>

Hi,

18 messages 2002/02/26

[#34972] OT A Question on work styles — Chris Gehlker <gehlker@...>

As a Mac baby I just had to step through ruby in GDB *from the command line*

20 messages 2002/02/28

[#35015] Time Comparison — "Sean O'Dell" <sean@...>

I am using the time object to compare times between two files and I'm

21 messages 2002/02/28

Re: Subclassing vs Subtyping (partly OOP vs FP)

From: Lewis Perin <perin@...>
Date: 2002-02-08 01:04:28 UTC
List: ruby-talk #33379
Dave Thomas <Dave@PragmaticProgrammer.com> writes:

> Lewis Perin <perin@panix.com> writes:
> 
> > > http://okmij.org/ftp/Computation/Subtyping/
> > 
> > The above was posted ten days ago and so far the silence has been
> > fairly deafening.  I found the site Robert Feldt mentions quite
> > compelling and was hoping that some true Ruby adepts would have a lot
> > to say about it.
> 
> To be honest I was not particularly stirred by the article. It became
> apparent during the lead-in that the choice of basing a Set on a Bag
> was wrong, and everything else fell out from that (it's the old Circle
> < Ellipse or Ellipse < Circle debate).
> 
> It's also not to relevant to Ruby, as Ruby's types are based on
> implicit protocols, not classes. In Ruby, you typically sublcass to
> get behavior, not interface, so these issues just don't arise.  You
> might choose to delegate a Set to a Bag, or you might choose to have a
> general collection mixin tha both Set and Bag could use, but you'd be
> unlikely to subclass one from the other.
> 
> It's a difficult habit to break. When you're used to C++ and Java, it
> seems natural to think of everything in terms of class hierarchies.
> But after programming in Ruby for a while, I find that I'm writing
> fewer and fewer deep class trees.

I took the liberty of forwarding this message plus the one by Robert
Feldt that immediately followed it to Oleg, the author of the
subclassing/subtyping site.  (I didn't forward the later followups,
not because they weren't interesting but because they didn't really
reply to Oleg's work.)  His response can be found below my sig.

/Lew
-- 
Lew Perin / perin@acm.org

-------Oleg's response follows-----

Hello!

	Thank you indeed for forwarding me follow-ups!

	I do want to comment on the follow-ups. I am replying to you,
so that you will catch errors and wrong assumptions I may have made
about Ruby. I understand that some of my points may be considered
inflammatory. The last thing I want is to incite a flame war or to tell
people what they should or should not be using. If you do find my
reply relevant, please free to post it, entirely ort in parts.


	I'm afraid the follow-ups do not go beyond picking on the C++
example, which is indeed contrived. The first follow-up also correctly
noted that article is about the old "Circle < Ellipse or Ellipse <
Circle debate". Yet the article tries to do more. For example, the
article actually shows that Set < Bag! (see below). The second part of
the article tries to discuss subtyping (not subclassing!) regardless
of the implementation language.  In that respect the conclusions may
be relevant to Ruby as well.

	I must mention that the need to clarify the article and to
point out general issues shows that the web pages are poorly
written. In this respect, I'd like to point out a paper
	http://pobox.com/~oleg/ftp/papers/Subtyping-OOP.ps.gz
which, IMHO, is phrased a bit better.


	Section 3 of the paper considers Bags and Sets in the most
general way -- from two different perspectives. One approach is to
regard Bags and Sets as _objects_, that is, as entities with a state
and the reactive behavior. We show that such objects are not subtypes
of each other. Note that we're talking about _subtyping_ rather than
subclassing, derivation or other implementation details. Bag and Set
can be just objects that happen to accept a common set of messages.

	In the later section, we consider Bags and Sets as entities
_without_ a state (distinct from their identity) and _without_ a
reactive behavior. In this approach, a Set is indeed a subtype of a
Bag: a Set _is-a_ Bag, every function that accepts Bags can be given a
Set instead without any change in behavior, a Set maintains every
invariant of a Bag -- and it is still a Set. The paper and the web
site then go into excruciating details to explain that the stated
assertions indeed hold, all at the same time. I'm afraid it is in this
jungle of details where I lost my reader.

	Although Section 4 of the paper uses C++ to define
_non-object_ Bags and Sets, the conclusion hold regardless of the
implementation language. Section 4.4 attempts to show that, by
consider the problem mathematically and designing an isomorphism
between Bags and Sets on one hand and certain sets of integers on the
other hand.

	The paper reaches a conclusion that it may be beneficial to
broaden our view and consider that not everything is an object, and
not everything should be an object. For example, distributed
programming is easier if processes exchange passive messages rather
than active messages (i.e, objects). It's easier to specify and reason
about a (passive, immutable) data structure than to specify and reason
about a behavior. See also
        http://www.mozart-oz.org/lists/oz-users/0431.html

	I specifically do not say that we should completely forgo
objects. I'm saying that object-less design ought to be on the table
when considering possible approaches to a problem. It's up to a
developer to select reactive entities or passive entities, or the
mixture of the two -- based on that developer's experience and the
problem at hand.

	BTW, the second follow-up mentions contracts. It is often
claimed that Design by contract can guard against improper
inheritance. Design by contract enforceable at run time is useful as a
regression testing tool -- but no more than that. The problem is how
to specify the contract precisely enough. Given a Stack abstract data
type, what is a post-condition of a 'push' method? The post-condition
should account for two facts -- that the pushed element becomes the
top of the stack, _and_ that the push method is free of all other side
effects. The latter requirement is far more difficult to specify --
let alone to effectively compute. Another good example to contemplate
is the post-condition of a random number generator. What is the
contract of the rand() function? Is it something you can easily
compute/verify during each invocation of rand()? BTW, this paragraph
is from an article that I started to write last year, and put on
indefinite hold after having written 10 pages or so.


	Thank you again for your kind message!
	Oleg

In This Thread

Prev Next