[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>

13 messages 2000/10/02

[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>

OK, here is what I think I know.

14 messages 2000/10/11

[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>

18 messages 2000/10/11
[#5427] RE: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — OZAWA -Crouton- Sakuro <crouton@...> 2000/10/11

At Thu, 12 Oct 2000 03:49:46 +0900,

[#5429] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...> 2000/10/11

Thanks for the input.

[#5432] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Yasushi Shoji <yashi@...> 2000/10/11

At Thu, 12 Oct 2000 04:53:41 +0900,

[#5516] Re: Some newbye question — ts <decoux@...>

>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:

80 messages 2000/10/13
[#5531] Re: Some newbye question — matz@... (Yukihiro Matsumoto) 2000/10/14

Hi,

[#5544] Re: Some newbye question — Davide Marchignoli <marchign@...> 2000/10/15

On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:

[#5576] Re: local variables (nested, in-block, parameters, etc.) — Dave Thomas <Dave@...> 2000/10/16

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#5617] Re: local variables (nested, in-block, parameters, etc.) — "Brian F. Feldman" <green@...> 2000/10/16

Dave Thomas <Dave@thomases.com> wrote:

[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>

There has been discussion on this list/group from time to time about

16 messages 2000/10/20
[#5712] Re: Dynamic languages, SWOT ? — Charles Hixson <charleshixsn@...> 2000/10/20

Hugh Sasse Staff Elec Eng wrote:

[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>

Hello fellow rubyists,

21 messages 2000/10/26

[ruby-talk:5782] Re: Dynamic languages, SWOT ?

From: Hugh Sasse Staff Elec Eng <hgs@...>
Date: 2000-10-23 10:34:50 UTC
List: ruby-talk #5782
On Mon, 23 Oct 2000, Dave Thomas wrote:

> A type is defined by a state domain and a set of operations that
> (normally) act on that domain. The state domain determines the valid
	[...]
> Many languages, such as C and Fortran, have built-in types, such as
	[...] 
> Some languages, such as Pascal, have the ability to create new types
> based on these existing types. In Pascal, these new types have the
> same operations as their base types, but their domain is restricted to 
> some subset of their parent's domain.
> 
> Object-oriented languages extend the paradigm. Now we can define a
> class, where we manage the state internally and export the operations
	[...] 
> Languages such as Java (and, less elegantly, C++), introduce a
> twist. Using multiple inheritance or using interfaces, a class may
	[...] 
> 
> So, on to Ruby, Smalltalk, and the like.
> 
> Here the picture is somewhat more subtle. At their simplest,
> Ruby classes implement types, and subclasses implement subtypes. Ruby
> mixins add capabilities similar to interfaces, and hence associate
> multiple types with a class (for example, [1,2,3] is both an Array and
> an Enumerable object).

This seems to be the crux of what is gained by having a dynamic language.
And it would seem to make type checking very difficult.
> 
> However, Ruby differs from Java and other static languages in that it
> does not check the types of objects at compile or runtime. It doesn't
> care about an object's class per se. Instead, it cares that an object
> implements the required methods. This leads to interesting
> possibilities.  For example, things that would traditionally be
> implemented as subclasses in order to pass type-checking need not be
> in Ruby. Instead, they can be implemented as two independent classes
> that happen to implement a common set of methods (Think of the way that
> you can use ARGF as a File, or ENV as a Hash, even though they are
> actually just Objects.) So, Ruby immediately gives us a more complex
> class/type relationship:
	[...]
I had not noticed how these were implemented but they are very powerful.
> 
> Many classes can implement a type, and any one class can have many
> types.
> 
> Then we muddy the waters even further. In Ruby, you can extend both
> classes and objects while your program is running. Say you want to

Yes, with new methods and Mix-ins.
	[...]
> 
> Given this tremendous flexibility, I'm not sure how an enforced system 
> of static tye checking could be shoe-horned in to Ruby: the paradigms
> are just plain different.

I think this answers my question.  I have not done much with Mix-ins
myself, but have bumped into them of course.  This is something I will
look into further.
> 
> In my opinion, this is not a bad thing. While programming Ruby, I have 

I was not trying to suggest that it was a bad thing :-).  I was trying
to see why not having type checking provided some advantaage(s) that
outweighed the advantages type checking gives.  I think you have answered
this pretty effectively.  It could be summarized by saying it is more of
a consequence of the extra flexibility than an intentional omission, but
the power gained by sacrificing it is considerable.  It can be worth
sacrificing a knight to allow a pawn to become a queen, but it doesn't
mean knights are worthless.


> never really felt the need for static type analysis nor for dynamic
> type checking. In the face of mutable types and extendible classes,
> I'm not even sure what form type checking could take.
> 
> Help me understand the other point of view.

:-)  I have used type checking langauges rather a lot.  This was exactly
my point, I want to understand the point of view of dynamic languages.
> 
> 
> Regards
> 
> 
> Dave
> 
	Thank you,
	Hugh
	hgs@dmu.ac.uk


In This Thread