From: Sean O'Dell Date: 2003-11-22T09:25:04+09:00 Subject: Re: "stereotyping" (was: Re: Strong Typing (Re: Managing metadata about attribute types) ) On Friday 21 November 2003 03:53 pm, Yukihiro Matsumoto wrote: > Hi, > > In message "Re: "stereotyping" (was: Re: Strong Typing (Re: Managing > metadata about attribute types) )" > > on 03/11/22, "Sean O'Dell" writes: > |Some of the things we gain were listed in the proposal. > | > |As to benefit: it depends on who you care about. Programmers, and > | especially library authors, gain a way to help people learn a little > | about their code and to catch potential errors in pitfalls. Project > | developers gain pretty much the same things: the ability to share code > | and help their co-workers understand a little more about their code and > | to help prevent them from making some obvious mistakes. We also gain > | some speed in debugging: where interfaces are used by people unfamiliar > | with the code they are calling into (through ignorance and lack of > | documentation) it's faster responding to a nice error message about type > | incompatibilities than it is to wonder about an error regarding method > | calls. Project managers are also far more likely to implement Ruby in > | their projects if they feel it is as safe as what they need, and type > | checking is one of the safety catches that a lot of people have grown > | comfortable with. It's also something Python doesn't have, and will be > | one of the things you can flat-out say "we have it, they do not." > | > |Worth it? In my opinion, absolutely. > > In my opinion, not much. You've mentioned interface contract would: > > (a) help learning code. > (b) gain speed in debugging by more check (and better message). > (c) make project manager feel better for more safety. > (d) allow us to say "we have something you don't have" to Python > people. > > Among these, only (b) appeal to me. (a) can be done better by RDoc > documents. For (c) and (d), I don't care about selling Ruby to > anyone. > > I prefer Jim Weirich's idea in [ruby-talk:86007], utilizing method > combination. > > in the library code foo.rb: > > require 'foo_if' > # which defines interface > # you can comment out from production code > > class Foo > def greet(hi) > hi.display > print "\n" > end > end > > in the foo_if.rb: > > class Foo > def greet:pre(hi) > assert hi.respond_to? :display > end > end > > with probably interface checking cosmetic. Well, this is certainly much simpler to implement. Sean O'Dell