[#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:5748] Re: Dynamic languages, SWOT ?

From: Charles Hixson <charleshixsn@...>
Date: 2000-10-22 04:10:02 UTC
List: ruby-talk #5748
Dave Thomas wrote:

> Charles Hixson <charleshixsn@earthlink.net> writes:
>
> > > This is the area I'm thinking about where the typing is not so strong
> > > as would ease error detection.  OK, types can be dynamic, but for
> > > parameters it only make sense for them to be in a subset of the
> > > class heirarchy.   There is no way to express this constraint in Ruby
> >
> > This is a run time check in a dynamically bound language.  I'm pretty sure
> > that Ruby does have ways to catch this, though they don't seem, to me, to be
> > quite as ?elegant?, ?standardized? as those that Smalltalk uses.  Much more
> > similar to the techniques of Python.
>
> Well, I'm not sure what Ruby could do here, apart from implementing
> protocols. You can't constrain a parameter to be an object of a
> particular class: it's the methods that the object supports that is
> relevant, not the class itself (as I know everyone knows--I'm just
> reemphasizing the point)

Only one answer here, mainly questions:
Actually, I believe that you can implement a run-time constraint.  It just isn't
obvious what kind of standardized action should be taken.   So it's not clear how
the language could reasonably respond.  Also, it's not clear how one should
declare a parameter to be of a type.  Inheritance could be used, but isn't really
appropriate.  What is really wanted is something on the order of:
The paramer must respond to the following messages: ...
and must not throw any more than the following exceptions: ...
And then what should you do if it is in violation?  Currently an error is raised
(forget which one).  What is a more elegant way to handle this?  I don't think
that it could be reasonably detected until during execution, but I could be
wrong, so, if you could detect it, then what would you want it to do?  Abort the
program?  Throw and exception?  Loop?  Wait forever?
Throwing an exception is the best one that I've been able to think of.  It would
be nice if it could be detected at an earlier stage, but then what if the branch
of the program to be followed never executed the statement in violation?
Programs often have branches that are only executed when the inputs are of a
certain specific kind.

> ...

> Objective C had the concept of protocols, which are similar to Java's
> interfaces, which specified what messages an object supports.  This
> _could_ be added to Ruby (I have a quick hack that implements them in
> Ruby itself).

I think that Ruby already has such a list, but I could be confusing it with
Python (and don't know how to look this up quickly).  This isn't a formalized
thing created for users.  It's just that the compiler uses a list to keep track
of things, and that isn't hidden away.  (If you've done that "quick hack", then
I'm sure you know what I'm referring to.)
The problem is,  if you were to design a user interface to this list, what should
the API look like?  Remeber that included files can change the structure of the
class (defining new methods), and that individual members of a class can have
methods added to them (I still struggle when thinking of this as a Singleton, but
I suppose that it is).
So it looks like this list doesn't only exist for the class, but also for the
members of the class.  And, at least for the members, and probably for the entire
class, this list can be changed dynamically .  (When WILL that book show up! ...
I've already ordered it, but it sure would be nice to have a reference right
now.)

>
>
> However, let me ask a question: how often do you get bitten by this in
> reality? And, having been bitten, how long does it take to fix?
>
> Personally, I find that I pass in a wrong object about once in a blue
> moon, and it becomes apparent that I goofed pretty quickly.
>
> Now ask yourself a different question. Right now, legions of Java
> programmers are using
>
>    Employee emp = (Employee)staff.nextElement();
>
> Fundamentally, how is this different from using Ruby's type system?

The fundamental difference is that at programming time Java required knowledge
that the found element would necessarily be castable to type Employee, rather
than, say, Consultant, or Owner.  Now it you had been asking about C ...

>
>
> Regards
>
> Dave

Java is an interesting case.  It seems to carry enough information around that it
SHOULD be able to tell what the type of an object is.  But it can't.  It depends
on type declarations embedded in the program which must be program time
constants.  (Program time comes prior to compile time).  In C it come prior to
pre-processor time.)  This wouldn't be quite as wierd as it is if it weren't for
ClassLoader.  ClassLoader can take a file of compiled code, and extract the types
of the objects that it contains.  So the information is in there.  My guess it
that this constraint is a part of Java's security model, but I don't really
know.  Anyway, making type declarations programming time constants, but not
taking advantage of the optimizations that this makes possible in Strongly
typed-Statically linked languages, is one of the design decisions that were made
in creating Java.  This is the kind of choice that makes me uncertain of just
where in language space I should position it.


In This Thread