[#18974] Perl/Python/Ruby common backend (Perl6) — ptkwt@...1.aracnet.com (Phil Tomson)

There is a thread about using .NET's CLR as a backend for Ruby, but how

17 messages 2001/08/01

[#19064] ANN: Code Amelioration Contest (presented by Ruby Conference 2001) — David Alan Black <dblack@...>

17 messages 2001/08/03
[#19184] Re: ANN: Code Amelioration Contest (presented by Ruby Conference 2001) — John Carter <john.carter@...> 2001/08/06

On Fri, 3 Aug 2001, David Alan Black wrote:

[#19185] Re: ANN: Code Amelioration Contest (presented by Ruby Conference 2001) — David Alan Black <dblack@...> 2001/08/06

Hello --

[#19186] Re: ANN: Code Amelioration Contest (presented by Ruby Conference 2001) — John Carter <john.carter@...> 2001/08/06

On Mon, 6 Aug 2001, David Alan Black wrote:

[#19125] My 1st look @ ruby: No prototypes and problem with String#gsub — stesch@... (Stefan Scholl)

My first ruby program:

23 messages 2001/08/04

[#19192] Some remarks from a nembie in Ruby — Renaud HEBERT <renaud.hebert@...>

After having read the book "Programming Ruby: The Pragmatic Programmer's

38 messages 2001/08/06

[#19269] Re: Perl/Python/Ruby common backend (Parrot, can Ruby play too?) — ptkwt@...1.aracnet.com (Phil Tomson)

In article <72X97.12093$9i1.972452@e420r-atl1.usenetserver.com>,

50 messages 2001/08/07
[#19349] Re: Perl/Python/Ruby common backend (Parrot, can Ruby play too?) — Mathieu Bouchard <matju@...> 2001/08/08

[#19456] Re: Perl/Python/Ruby common backend (Parrot, can Ruby play too?) — Harry Ohlsen <harryo@...> 2001/08/09

Ned Konz wrote:

[#19451] Re: Help! I'm still confused about threadin g in the ML — "Morris, Chris" <chris.morris@...>

> Is there an Outlook option to turn on In-Reply-To or References

14 messages 2001/08/09
[#19453] Re: Help! I'm still confused about threadin g in the ML — Dave Thomas <Dave@...> 2001/08/09

"Morris, Chris" <chris.morris@snelling.com> writes:

[#19506] the way class variables work — David Alan Black <dblack@...>

Hello --

51 messages 2001/08/10
[#19511] Re: the way class variables work — Chris Uzdavinis <chris@...> 2001/08/11

David Alan Black <dblack@candle.superlink.net> writes:

[#19524] order and freedom in Ruby (was: Re: Re: the way class variables work) — David Alan Black <dblack@...> 2001/08/11

Hello --

[#19517] Why not?: Assigning to self — furufuru@... (Ryo Furue)

Hi there,

55 messages 2001/08/11
[#19689] Re: Why not?: Assigning to self — Ron Jeffries <ronjeffries@...> 2001/08/14

On 13 Aug 2001 20:59:54 -0700, furufuru@ccsr.u-tokyo.ac.jp (Ryo Furue)

[#19694] Re: Why not?: Assigning to self — Ned Konz <ned@...> 2001/08/14

On Tuesday 14 August 2001 05:09 am, Ron Jeffries wrote:

[#19695] Re: Why not?: Assigning to self — ts <decoux@...> 2001/08/14

>>>>> "N" == Ned Konz <ned@bike-nomad.com> writes:

[#19696] Re: Why not?: Assigning to self — Ned Konz <ned@...> 2001/08/14

On Tuesday 14 August 2001 07:51 am, you wrote:

[#19697] Re: Why not?: Assigning to self — ts <decoux@...> 2001/08/14

>>>>> "N" == Ned Konz <ned@bike-nomad.com> writes:

[#19700] Re: Why not?: Assigning to self — Ned Konz <ned@...> 2001/08/14

On Tuesday 14 August 2001 08:27 am, you wrote:

[#19701] Re: Why not?: Assigning to self — ts <decoux@...> 2001/08/14

>>>>> "N" == Ned Konz <ned@bike-nomad.com> writes:

[#19703] Re: Why not?: Assigning to self — Ned Konz <ned@...> 2001/08/14

On Tuesday 14 August 2001 09:05 am, Guy Decoux wrote:

[#19704] Re: Why not?: Assigning to self — ts <decoux@...> 2001/08/14

>>>>> "N" == Ned Konz <ned@bike-nomad.com> writes:

[#19708] Re: Why not?: Assigning to self — Ned Konz <ned@...> 2001/08/14

On Tuesday 14 August 2001 09:27 am, you wrote:

[#19709] Re: Why not?: Assigning to self — ts <decoux@...> 2001/08/14

>>>>> "N" == Ned Konz <ned@bike-nomad.com> writes:

[#19713] Re: Why not?: Assigning to self — Ned Konz <ned@...> 2001/08/14

On Tuesday 14 August 2001 09:45 am, you wrote:

[#19750] Re: Why not?: Assigning to self — matz@... (Yukihiro Matsumoto) 2001/08/15

Hi,

[#19819] Re: Why not?: Assigning to self — Ned Konz <ned@...> 2001/08/15

On Tuesday 14 August 2001 08:14 pm, matz wrote:

[#19852] Re: Why not?: Assigning to self — matz@... (Yukihiro Matsumoto) 2001/08/16

Hi,

[#19857] Re: Why not?: Assigning to self — "Florian G. Pflug" <fgp@...> 2001/08/16

On Thu, Aug 16, 2001 at 11:05:59AM +0900, Yukihiro Matsumoto wrote:

[#19858] Re: Why not?: Assigning to self — matz@... (Yukihiro Matsumoto) 2001/08/16

Hi,

[#19867] Re: Why not?: Assigning to self — "Pit Capitain" <pit@...> 2001/08/16

Just a followup at (my) current end of the thread:

[#19550] Forced garbage collection — Lars Christensen <larsch@...>

14 messages 2001/08/11
[#19562] Re: Forced garbage collection — "Nat Pryce" <nat.pryce@...13media.com> 2001/08/12

From: "Lars Christensen" <larsch@cs.auc.dk>

[#19551] /.ed again — Tobias Reif <tobiasreif@...>

Ruy gets slasdotted again ;)

19 messages 2001/08/11

[#19650] Ruby Newbie mailing list — Michael Pence <mikepence@...>

Hello all.

14 messages 2001/08/13
[#19656] RE: Ruby Newbie mailing list — "Louis Brothers" <lcb134@...> 2001/08/13

We had a similar discussion on the OmniWeb Objective-C mailing list not to

[#19659] Re: Ruby Newbie mailing list — Michael Pence <mikepence@...> 2001/08/13

I appreciate your references to Objectionable-C ;-)

[#19685] Compiling Ruby with cygwin and Tk support — Manuel Zabelt <ng@...>

Hello!

13 messages 2001/08/14

[#19718] General (GUI/license) questions — Ryan Tarpine <rtarpine@...>

First: Kero commented in the description of his new Ruby Agenda program

18 messages 2001/08/14

[#19755] "new" returning nil: how to report the failure of object creation — furufuru@... (Ryo Furue)

Hi there,

14 messages 2001/08/15

[#19758] The GUI poll is in, and the results are surprising — Dave Thomas <Dave@...>

40 messages 2001/08/15
[#19774] Re: The GUI poll is in, and the results are surprising — Lars Christensen <larsch@...> 2001/08/15

On Wed, 15 Aug 2001, Dave Thomas wrote:

[#19784] Re: The GUI poll is in, and the results aresurprising — "Lyle Johnson" <ljohnson@...> 2001/08/15

> Please don't forget what Ruby is all about in this discussion! I think

[#19824] Ruby GUI — "Hal E. Fulton" <hal9000@...>

The concept of a new GUI is somewhat appealing,

16 messages 2001/08/15

[#20033] Ruby Article — Joshua Drake <jd.nospam@...>

Hello,

38 messages 2001/08/20

[#20127] Another Possible RCR - Wrappers via Mixins — Stephen White <spwhite@...>

The main difference between mix-ins and multiple inheritence is (to my understanding) that parent classes do not call child code, but mix-ins do.

15 messages 2001/08/22

[#20135] Bruce Eckel's criticism of Ruby — Ned Konz <ned@...>

Python.org links to http://www.mindview.net/Etc/notes.html#Ruby , saying

24 messages 2001/08/22

[#20183] ++ Operator — kamphausen@... (SKa)

Dear Community,

35 messages 2001/08/23
[#20234] Re: ++ Operator — Dave Thomas <Dave@...> 2001/08/24

matz@ruby-lang.org (Yukihiro Matsumoto) writes:

[#20236] Re: ++ Operator — matz@... (Yukihiro Matsumoto) 2001/08/24

Hi,

[#20209] In Ruby 0 is true but nil is false.. or how to shoot yourself?.. — Guillaume Cottenceau <gc@...>

I have a simple Audio-CD database (using CSV format). I was writing a

11 messages 2001/08/23

[#20254] File.readline(s) — Michael Husmann <michael.husmann@...>

I am reading a 55MB ASCII file by using File.readline(s) which takes on

14 messages 2001/08/24

[#20303] New Windows InstallShield version of Ruby — Andrew Hunt <andy@...>

19 messages 2001/08/24

[#20307] Backwards language — "Sean Middleditch" <elanthis@...>

Greetings,

30 messages 2001/08/24

[ruby-talk:20047] The Ruby Way [was: Ruby Article]

From: jweirich@...
Date: 2001-08-21 12:11:34 UTC
List: ruby-talk #20047
>>>>> "Joshua" == Joshua Drake <jd.nospam@commandprompt.com> writes:

    Joshua> I am the author of the Programming in ruby on IBM
    Joshua> Developworks. [...]
    Joshua> I am getting ready to release the second article, but I
    Joshua> want to get some feedback from the ruby community first. I
    Joshua> would like the second article to be more ruby centric and
    Joshua> will need some help.

I think Joshua just made the first entry into the Code Amelioration
Contest.  (See [ruby-talk:19064])

I found it interesting to peruse the responses to Joshua's request for
help.  There has been some talk about the "Ruby Way" of doing things,
but no one has been able to describe exactly what means when a piece
of Ruby code is written in the "Ruby Way".  For example, we can say
things like "The Ruby/FOX library isn't very Ruby-like", but we find
it difficult to express exactly what it is that makes it feel wrong.
BTW, I'm not picking on Lyle Johnson's fine work on FXRuby, but it is
an example of a recent discussion on the topic (see
[ruby-talk:19946]).

Matz (and a few others) can spot the Ruby Way pretty reliably.  The
rest of us need a little help in learning to identify it.

Below I have abstracted some candidate "rules of thumb" for defining
the Ruby Way.  They were all taken from responses to Joshua's request
for help and based on a suggested change to his code.

NOTE: These are only *candidate* guidelines based on actual code
improvement suggestions.  I did this to start a discussion, not to
preemptively define the "Ruby Way".  In fact, I'm not sure *I* agree
with all the suggestions below.  It is my hope that some good
guidelines will be generated by consensus and discussion.

Ok, without further ado, here is a list of candidate guidelines ...

----------------------------------------------------------------------
I) Factor redundant code into a method

    ORIGINAL
       print "\n\tFirst Name: "
       enterFirstName = STDIN.gets
       enterFirstName.chop!
       if enterFirstName == "END"
         print $closing
         break
       end
       # Repeated 2 more times ...

   BETTER
       def prompt_and_read(prompt)
         print "\n", prompt, ": "
         result = gets
         throw :done if !result || result == "END\n"
         result.chop
       end

       # ...
       first_name = prompt_and_read "First name"
       last_name  = prompt_and_read "Last name"
       phone      = prompt_and_read "Phone"

----------------------------------------------------------------------
II) Use catch/throw for control structures, use rescue/raise for
    communicating errors.

    ORIGINAL
      class MyLoopExit < Exception; end
      begin
        loop do
          # Note: prompt_and_read can raise MyLoopExit
          first_name = prompt_and_read "First name"
          last_name  = prompt_and_read "Last name"
          phone      = prompt_and_read "Phone"
      
          myfile.puts first_name + "\t" + last_name + "\t" + phone
      resure MyLoopExit
      end

    BETTER
      catch (:done) do 
        loop do
          # Note: prompt_and_read can throw :done
          first_name = prompt_and_read "First name"
          last_name  = prompt_and_read "Last name"
          phone      = prompt_and_read "Phone"
      
          myfile.puts first_name + "\t" + last_name + "\t" + phone
        end
      end

----------------------------------------------------------------------
III) Take advantage of iterators.

    ORIGINAL
       first_name = prompt_and_read "First name"
       last_name  = prompt_and_read "Last name"
       phone      = prompt_and_read "Phone"


    BETTER
      FIELDS = [ "First name", "Last name", "Phone" ]
      FIELDS.each do |prompt| ... end


----------------------------------------------------------------------
IV) Take advantage of blocks to do automatic closing

    ORIGINAL
        begin
          myfile = File.open('phonespec.txt', 'a')
          # ...
        ensure
          myfile.close
        end        file = File.open


    BETTER
        File.open('phonespec.txt', 'a') do |myfile|
          # ...
        end

----------------------------------------------------------------------
V) Avoid Unnecessary Globals

    ORIGINAL
      $closing = "\n\nTo start ... "

    BETTER
      closing = "\n\nTo start ... "

----------------------------------------------------------------------
VI) Use true/false to represent booleans, not 1/0.

    ORIGINAL
      while 1

    BETTER
      while true

----------------------------------------------------------------------
VII) Use loop do ... end for infinite loops

    ORIGINAL
      while true
        # loop stuff ...
      end

    BETTER
      loop do
        # loop stuff ...
      end

----------------------------------------------------------------------
VIII) Use File.open rather than IO.open or just plain open.
      (Applies to readlines and other methods in File as well).

    ORIGINAL
      open ("phonespec.txt")
      # or
      IO.open ("phonespec.txt")

    BETTER
      File.open ("phonespec.txt")
      loop do
        # loop stuff ...
      end

----------------------------------------------------------------------
IX) Chop input as read

    ORIGINAL
      searchData = gets
      searchData.chop!

    BETTER
      searchData = gets.chop

 [What if gets returns a nil?]

----------------------------------------------------------------------
X)  Ask objects to convert themselves

    ORIGINAL
      String(numres)

    BETTER
      numres.to_s

----------------------------------------------------------------------
XI) Take advantage of grep and other methods in Enumerable

    ORIGINAL
      IO.foreach("phonespec.txt") do |data|
        if myreg =~ data
          print "Found result: ", data
           numres += 1                
        end
      end

    BETTER
      found = File.readlines("phonespec.txt").grep(myreg)
      found.each {|f| print "Found result: #{ f }"}

----------------------------------------------------------------------


-- 
-- Jim Weirich     jweirich@one.net    http://w3.one.net/~jweirich
---------------------------------------------------------------------
"Beware of bugs in the above code; I have only proved it correct, 
not tried it." -- Donald Knuth (in a memo to Peter van Emde Boas)

In This Thread