# -----Original Message----- # From: Mathieu Bouchard [mailto:matju / sympatico.ca] # Sent: 26 ???? 2001 ?. 12:14 # To: Aleksei Guzev # Cc: ruby-talk ML # Subject: Re: [ruby-talk:16873] RE: Something strange with # Ruby's inheritance mechanism # # # On Tue, 26 Jun 2001, Aleksei Guzev wrote: # > Every strong-typed language implies a lot of text being not a code, # > but declarations. # # Have you seen type-inference? Some languages actually analyze # your code for types and "templatize" your code according to # what you *don't* write. # You type code in the listener, and it answers with the # "declarations", which you don't have to put anywhere in your # files, as they are generated by compilation of the code. That's a good thing. # # > Ruby should provide a short-time development and therefore # > no type-checking. # # Short-time development should mean no type-checking when it # makes development shorter, and type-checking when it makes # development shorter. There's a balance you have to get. # # > Generally, classes are equal when they provide equal # interfaces. Class # > B is a subclass of A when it provides all the methods of A and some # > methods in addition. "<" in Ruby is a shorthand allowing # programmer to # > shorten the code. # Strong typing shortens development of large project involving large stuff. I use Ruby only to call huge complicated application written in strong-typed languages. Type checking is made at run-time ( as everything an script ). Class of object is determined by its interface. If the object implements particular interface then it belongs to the corresponding class. Take a look at Enumerable module documentaion. "The class must provide a method each, which yields successive members of the collection". Thus providing method 'each' one will get Enumerable mix-in working. Moreover defining for class A methods similar to methods of module Enumerable will allow use instances of A at every place where an Enumerable instance is allowed. The disadvantage of strong typing is vivid in MS MFC library. If one wishes instances of its class CA be collected in a linked list, he needs derive CA from Cobject, but this implies defining of hash function for CA! Thus one has to write a hash function in order to add object to a linked list. And there are much more overhead. # In Ruby, A == B means it's _the_ same class, and A < B means # all objects that inherit from A also inherit from B, that is, # the set of A objects is smaller than the set of B objects. # Ruby provides "class A<B" as a notation consistent with Class#<. # # Two classes A,B such that A<B could have an equal number of # methods. They could also have equal interfaces (but the Ruby # interpreter couldn't tell) I didn't say about Ruby but I said "generally" # # matju #