Author: larry Date: Thu Feb 1 10:52:27 2007 New Revision: 13559 Modified: doc/trunk/design/syn/S03.pod
Log: Keeping exceptions exceptional and lazy to promote parallelism. Some random C<> cleanup. Modified: doc/trunk/design/syn/S03.pod ============================================================================== --- doc/trunk/design/syn/S03.pod (original) +++ doc/trunk/design/syn/S03.pod Thu Feb 1 10:52:27 2007 @@ -12,9 +12,9 @@ Maintainer: Larry Wall <[EMAIL PROTECTED]> Date: 8 Mar 2004 - Last Modified: 30 Jan 2007 + Last Modified: 1 Feb 2007 Number: 3 - Version: 93 + Version: 94 =head1 Overview @@ -66,31 +66,31 @@ =item * -Int literal +C<Int> literal 42 =item * -Num literal +C<Num> literal 3.14 =item * -Non-interpolating Str literal +Non-interpolating C<Str> literal '$100' =item * -Interpolating Str literal +Interpolating C<Str> literal "Answer = $answer\n" =item * -Generalized Str literal +Generalized C<Str> literal q["$100"] qq["$answer"] @@ -352,7 +352,7 @@ be an approximation. If the right argument is of an integer type, exponentiation is at least as accurate as repeated multiplication on the left side's type. (From which it can be deduced that C<Int**UInt> -is always exact, since Int supports arbitrary precision.) If the +is always exact, since C<Int> supports arbitrary precision.) If the right argument is an integer represented in a non-integer type, the accuracy is left to implementation provided by that type; there is no requirement to recognize an integer to give it special treatment. @@ -468,17 +468,30 @@ infix:</> - $dividend / $divisor + $numerator / $denominator -Converts both operands to Num and does division returning Num. +Converts both operands to C<Num> and does division returning C<Num>. +If the denominator is zero, returns either C<+Inf>, C<NaN>, or C<-Inf> +as the numerator is positive, zero, or negative. (This is construed +as the best default in light of the operator's possible use within +hyperoperators and junctions. If you want it to throw an exception +on an individual scalar division, you can alwyas check the denominator +yourself.) =item * infix:<div>, generic division - $dividend div $divisor + $numerator div $denominator -Dispatches to the infix:<div> multi most appropriate to the operand types. +Dispatches to the infix:<div> multi most appropriate to the operand +types. Policy on what to do about division by zero is up to the type, +but for the sake of hyperoperators and junctions those types that +can represent overflow (or that can contain an unthrown exception) +should try to do so rather than simply throwing an exception. (And in +general, other operators that might fail should also consider their +use in hyperops and junctions, and whether they can profitably benefit +from a lazy exception model.) =item * @@ -486,7 +499,7 @@ % -Always floor semantics using Num or Int. +Always floor semantics using C<Num> or C<Int>. =item * @@ -747,7 +760,7 @@ == != < <= > >= -As in Perl 5, converts to Num before comparison. C<!=> is short for C<!==>. +As in Perl 5, converts to N>um before comparison. C<!=> is short for C<!==>. =item * @@ -755,7 +768,7 @@ eq ne lt le gt ge -As in Perl 5, converts to Str before comparison. C<ne> is short for C<!eq>. +As in Perl 5, converts to C<Str> before comparison. C<ne> is short for C<!eq>. =item *