[#6954] Why isn't Perl highly orthogonal? — Terrence Brannon <brannon@...>

27 messages 2000/12/09

[#7022] Re: Ruby in the US — Kevin Smith <kevinbsmith@...>

> Is it possible for the US to develop corporate

36 messages 2000/12/11
[#7633] Re: Ruby in the US — Dave Thomas <Dave@...> 2000/12/19

tonys@myspleenklug.on.ca (tony summerfelt) writes:

[#7636] Re: Ruby in the US — "Joseph McDonald" <joe@...> 2000/12/19

[#7704] Re: Ruby in the US — Jilani Khaldi <jilanik@...> 2000/12/19

> > first candidates would be mysql and postgressql because source is

[#7705] Code sample for improvement — Stephen White <steve@...> 2000/12/19

During an idle chat with someone on IRC, they presented some fairly

[#7750] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

Stephen White wrote:

[#7751] Re: Code sample for improvement — David Alan Black <dblack@...> 2000/12/20

Hello --

[#7755] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

David Alan Black wrote:

[#7758] Re: Code sample for improvement — Stephen White <steve@...> 2000/12/20

On Wed, 20 Dec 2000, Guy N. Hurst wrote:

[#7759] Next amusing problem: talking integers (was Re: Code sample for improvement) — David Alan Black <dblack@...> 2000/12/20

On Wed, 20 Dec 2000, Stephen White wrote:

[#7212] New User Survey: we need your opinions — Dave Thomas <Dave@...>

16 messages 2000/12/14

[#7330] A Java Developer's Wish List for Ruby — "Richard A.Schulman" <RichardASchulman@...>

I see Ruby as having a very bright future as a language to

22 messages 2000/12/15

[#7354] Ruby performance question — Eric Crampton <EricCrampton@...>

I'm parsing simple text lines which look like this:

21 messages 2000/12/15
[#7361] Re: Ruby performance question — Dave Thomas <Dave@...> 2000/12/15

Eric Crampton <EricCrampton@worldnet.att.net> writes:

[#7367] Re: Ruby performance question — David Alan Black <dblack@...> 2000/12/16

On Sat, 16 Dec 2000, Dave Thomas wrote:

[#7371] Re: Ruby performance question — "Joseph McDonald" <joe@...> 2000/12/16

[#7366] GUIs for Rubies — "Conrad Schneiker" <schneik@...>

Thought I'd switch the subject line to the subject at hand.

22 messages 2000/12/16

[#7416] Re: Ruby IDE (again) — Kevin Smith <kevins14@...>

>> >> I would contribute to this project, if it

17 messages 2000/12/16
[#7422] Re: Ruby IDE (again) — Holden Glova <dsafari@...> 2000/12/16

-----BEGIN PGP SIGNED MESSAGE-----

[#7582] New to Ruby — takaoueda@...

I have just started learning Ruby with the book of Thomas and Hunt. The

24 messages 2000/12/18

[#7604] Any corrections for Programming Ruby — Dave Thomas <Dave@...>

12 messages 2000/12/18

[#7737] strange border-case Numeric errors — "Brian F. Feldman" <green@...>

I haven't had a good enough chance to familiarize myself with the code in

19 messages 2000/12/20

[#7801] Is Ruby part of any standard GNU Linux distributions? — "Pete McBreen, McBreen.Consulting" <mcbreenp@...>

Anybody know what it would take to get Ruby into the standard GNU Linux

15 messages 2000/12/20

[#7938] Re: defined? problem? — Kevin Smith <sent@...>

matz@zetabits.com (Yukihiro Matsumoto) wrote:

26 messages 2000/12/22
[#7943] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

Kevin Smith <sent@qualitycode.com> writes:

[#7950] Re: defined? problem? — Stephen White <steve@...> 2000/12/22

On Fri, 22 Dec 2000, Dave Thomas wrote:

[#7951] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

On Fri, 22 Dec 2000, Stephen White wrote:

[#7954] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

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

[#7975] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

Hello --

[#7971] Hash access method — Ted Meng <ted_meng@...>

Hi,

20 messages 2000/12/22

[#8030] Re: Basic hash question — ts <decoux@...>

>>>>> "B" == Ben Tilly <ben_tilly@hotmail.com> writes:

15 messages 2000/12/24
[#8033] Re: Basic hash question — "David A. Black" <dblack@...> 2000/12/24

On Sun, 24 Dec 2000, ts wrote:

[#8178] Inexplicable core dump — "Nathaniel Talbott" <ntalbott@...>

I have some code that looks like this:

12 messages 2000/12/28

[#8196] My first impression of Ruby. Lack of overloading? (long) — jmichel@... (Jean Michel)

Hello,

23 messages 2000/12/28

[#8198] Re: Ruby cron scheduler for NT available — "Conrad Schneiker" <schneik@...>

John Small wrote:

14 messages 2000/12/28

[#8287] Re: speedup of anagram finder — "SHULTZ,BARRY (HP-Israel,ex1)" <barry_shultz@...>

> -----Original Message-----

12 messages 2000/12/29

[ruby-talk:7880] Re: [Q] Are Exceptions used that much in practice?

From: raja@... (Raja S.)
Date: 2000-12-21 16:10:02 UTC
List: ruby-talk #7880
Kevin Smith <sent@qualitycode.com> writes:

>Correct me if I'm wrong, but it seems like Ruby's 
>catch/throw takes care of this "abuse" of 
>exceptions. If you want a clean way to exit deep 
>nesting, use catch/throw. If you have a true 
>error condition, use an exception. Right?

You are right.  But I wouldn't term it an "abuse".

>Before reading this piece, I hadn't put together 
>why it would make sense to support both 
>mechanisms. If there are other angles of this 
>topic, I'd be interested in hearing about them.

As with many things, the reason is historic.

Common Lisp absorbed catch/throw from MacLisp (to do with MIT's project MAC
of the 60s and not the friendly little desktop :-)).  It provides a
convenient -dynamic- non-local exit mechanism.  But the problem was that you
could leave your computation in an unstable state:

1. open a file
2. start processing it
3. close it

A throw from #2 would skip #3.  Hence the 'unwind-protect' form was
introduced: (IIRC Richard Stallman is credited with this)

(unwind-protect
  (prog2 (open file)
         (process file) ; prog2 was also introduced for this reason
         (close file))) ; it returns not the first but the value of the 2nd form

But, hey, thats what Java/Python's 'finally' and Ruby's 'ensure' is supposed
to do, right?  Exactly!

Remember, the reason is historic.  Exceptions (or in Lisp lingo 'conditions')
were introduced later.  Kent Pitman's conditions proposal was introduced into
Common Lisp only in Guy Steele's 2nd book circa 1990.

With the equivalent of ensure/finally the need for 'unwind-protect' is
-almost- moot.  (Some prefer it's syntactic convenience to exception
handling.) 

Bottom line:  if you are going to use catch/throw be sure you don't need an
              clean-up action the non-performance of which might leave your
              system in an unstable state.

Here is some pedagogical code the illustrates the difference:

def tst1
  puts "Line 1"
  x = catch (:foo) {
    begin
      puts "Line 2"
      throw :foo,  "ball"
      puts "Should not see this"
    rescue
      puts "Unfortunately neither will this be seen"
    end
  }
  puts "x = #{x}"
end

class Foo < RuntimeError
end


def tst2
  puts "Line 1"
  begin
    puts "Line 2"
    raise Foo,  "ball"
    puts "Should not see this"
  rescue => x
    "no op"    # just to mirror the above code as close as possible
  ensure
    puts "A non-local exit has occurred!"
  end
  puts "x = #{x}"
end


ruby> tst1

Line 1
Line 2
x = ball

ruby> tst2

Line 1
Line 2
A non-local exit has occurred!
x = ball

Hence 'exceptions' are more general/powerful than catch/throw --- Python's
choice can be justified.  Ruby is an interesting amalgamation of concepts
from various languages (i've started viewing it as having the evaluation
model of Lisp/Scheme + the object model of Smalltalk + conventional
syntax).

But continuations are even more powerful (too powerful in some folks
opinion).  All of the functionality of catch/throw and exceptions can be
emulated with continuations + macros (as folks in the Scheme world do).
This raised another interesting issue: OK, finally/ensure cleans thing up on
the way -out- ... but what do you do if you grab a continuation, perform a
non-local exit with clean up (e.g. raising an exception) and then later
invoke the continuation.  How do you conveniently "un-do" the cleanup
actions when you re-enter a captured state? Enter Friedman/Haynes/Dybvig's
concept of 'dynamic-wind' a generalization of Stallman's 'unwind-protect' in
the presence of full continuations ... but thats another story ;-)

Raja


In This Thread