develooper Front page | perl.perl6.language | Postings from June 2006

[svn:perl6-synopsis] r9660 - doc/trunk/design/syn

June 15, 2006 16:05
[svn:perl6-synopsis] r9660 - doc/trunk/design/syn
Message ID:
Author: larry
Date: Thu Jun 15 16:05:17 2006
New Revision: 9660


Definition of warning control exceptions.

Modified: doc/trunk/design/syn/S04.pod
--- doc/trunk/design/syn/S04.pod	(original)
+++ doc/trunk/design/syn/S04.pod	Thu Jun 15 16:05:17 2006
@@ -12,9 +12,9 @@
   Maintainer: Larry Wall <>
   Date: 19 Aug 2004
-  Last Modified: 7 June 2006
+  Last Modified: 15 June 2006
   Number: 4
-  Version: 22
+  Version: 23
 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -473,6 +473,30 @@
 in the current sub was implicit.  For Perl 6 we have to make this
 preference explicit.)
+Warnings are produced in Perl 6 by throwing a resumable control
+exception to the outermost scope, which by default prints the
+warning and resumes the exception by extracting a resume continuation
+from the exception, which must be supplied by the warn() function
+(or equivalent).  Exceptions are not resumable in Perl 6 unless
+the exception object does the C<Resumable> role.  (Note that fatal
+exception types can do the C<Resumable> role even if thrown via
+C<fail()>--when uncaught they just hit the outermost fatal handler
+instead of the outermost warning handler, so some inner scope has to
+explicitly treat them as warnings and resume them.)
+Since warnings are processed using the standard control exception
+mechanism, they may be intercepted and either suppressed or fatalized
+anywhere within the dynamic scope by supplying a suitable C<CONTROL>
+block.  This dynamic control is orthogonal to any lexically scoped
+warning controls, which merely decide whether to call C<warn()>
+in the first place.
+As with calls to C<return>, the warning control exception is an
+abstraction that the compiler is free to optimize away (along with the
+associated continuation) when the compiler or runtime can determine
+that the semantics would be preserved by merely printing out the
+error and going on.
 =head1 The goto statement
 In addition to C<next>, C<last>, and C<redo>, Perl 6 also supports Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About