[#13775] Problems with racc rule definitions — Michael Neumann <neumann@...>

15 messages 2001/04/17
[#13795] Re: Problems with racc rule definitions — Minero Aoki <aamine@...> 2001/04/18

Hi,

[#13940] From Guido, with love... — Dave Thomas <Dave@...>

52 messages 2001/04/20

[#13953] regexp — James Ponder <james@...>

Hi, I'm new to ruby and am coming from a perl background - therefore I

19 messages 2001/04/21

[#14033] Distributed Ruby and heterogeneous networks — harryo@... (Harry Ohlsen)

I wrote my first small distributed application yesterday and it worked

15 messages 2001/04/22

[#14040] RCR: getClassFromString method — ptkwt@...1.aracnet.com (Phil Tomson)

It would be nice to have a function that returns a class type given a

20 messages 2001/04/22

[#14130] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Guy N. Hurst wrote:

21 messages 2001/04/24
[#14148] Re: Ruby mascot proposal — Stephen White <spwhite@...> 2001/04/24

On Tue, 24 Apr 2001, Conrad Schneiker wrote:

[#14188] Re: Ruby mascot proposal — matz@... (Yukihiro Matsumoto) 2001/04/25

Hi,

[#14193] Re: Ruby mascot proposal — "W. Kent Starr" <elderburn@...> 2001/04/25

On Tuesday 24 April 2001 23:02, Yukihiro Matsumoto wrote:

[#14138] Re: python on the smalltalk VM — Conrad Schneiker <schneik@...>

FYI: Thought this might be of interest to the JRuby and Ruby/GUI folks.

27 messages 2001/04/24
[#14153] Re: python on the smalltalk VM — Andrew Kuchling <akuchlin@...> 2001/04/24

Conrad Schneiker <schneik@austin.ibm.com> writes:

[#14154] array#flatten! question — Jim Freeze <jim@...> 2001/04/24

Hello.

[#14159] Can I insert into an array — Jim Freeze <jim@...> 2001/04/24

Ok, this may be a dumb question, but, is it possible to insert into an

[#14162] Re: Can I insert into an array — Dave Thomas <Dave@...> 2001/04/24

Jim Freeze <jim@freeze.org> writes:

[#14289] RCR: Array#insert — Shugo Maeda <shugo@...> 2001/04/27

At Wed, 25 Apr 2001 01:28:36 +0900,

[#14221] An or in an if. — Tim Pettman <tjp@...>

Hi there,

18 messages 2001/04/25

[#14267] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Danny van Bruggen,

16 messages 2001/04/26

[#14452] How to do it the Ruby-way 3 — Stefan Matthias Aust <sma@3plus4.de>

First a question: Why is

21 messages 2001/04/30

[ruby-talk:13709] Re: methods and types

From: Dave Thomas <Dave@...>
Date: 2001-04-16 17:45:08 UTC
List: ruby-talk #13709
"Jish Karoshi" <karoshijish@hotmail.com> writes:

> So is it true that in this system the first thing that every
> function ought to do, in order to be robust, is check to see that
> certain operations have been implemented by the arguments that are
> passed to it?  Is the definition of a type in ruby or a language
> like it the set of all combinations of operations which an object
> has implemented?  Also, since the return types of functions are not
> defined, how does function A know that checking for the existence of
> function B in some parameter is enough to do something useful with
> the parameter?  Do I really need to check the type of every argument
> passed to my method and then check the return type of every method I
> call from those arguments?

Possibly the issue is broader than this.

First look at popular languages such as Java, where type-safety is
largely defined in terms on interfaces. If an object implements an
interface, then it is an acceptable parameter for a method that
required that interface, or for assignment to a variable of that type.

What has this gained you?

Well, you know that you can call the methods in that interface on the
passed object, and you will not get a runtime failure because they
don't exist.

Anything else? Not really, because the specification of type by
interface alone totally ignores semantics: I could define

   public class Dave implements Stack {
     public void push(Pushable o) {
       System.out.println("Refusing to push: I'm tired");
     }
     public Pushable pop() {
       return new PushableInt(99);
     }
   }

Type safe, but semantic gibberish.

Now, turn the question around. What do you gain by abandoning this
limited form of safety?

Well, we gain immense flexibility. Refactoring Smalltalk and Ruby is
trivial compared to (say) Java. Things just move around. There's no
need to jump through hoops to satisfy the compiler.

We gain substantial testability. You can construct mock objects very,
very easily, and test out code with far less overhead. You can test
objects before the classes they rely on are finished (or even
started). This ability to test partial classes also lends itself to
easier incremental testing.

We gain expressiveness. I don't know how to describe this one
objectively: I just know that I find this kind of code speaks to me
more directly: I'm dealing with objects, not object categories.

This is not a thing that can be argued rationally. I was a strong-
typing advocate for years, and was nervous when I used languages such
as Smalltalk and Ruby. However, I now find Java a very frustrating
language to use, and find myself writing higher-quality code in
Ruby. In the end, the only way to find out is to try it for yourself
and see. Write some Ruby code, and wait until you experience that
a-ha! moment. Then write some more code until you start developing an
idiomatic style. Get comfortable with RubyUnit or Lapidary. Then take
on a largish project, and see what you thing.



Regards



Dave

In This Thread