Gmail Calendar Documents Reader Web more »
Recently Visited Groups | Help | Sign in
Google Groups Home
r29049 - docs/Perl6/Spec
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  1 message - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
pugs-comm...@feather.perl6.nl  
View profile  
 More options Nov 10, 1:07 pm
Newsgroups: perl.perl6.language
From: pugs-comm...@feather.perl6.nl
Date: Tue, 10 Nov 2009 19:07:56 +0100
Local: Tues, Nov 10 2009 1:07 pm
Subject: r29049 - docs/Perl6/Spec
Author: lwall
Date: 2009-11-10 19:07:56 +0100 (Tue, 10 Nov 2009)
New Revision: 29049

Modified:
   docs/Perl6/Spec/S04-control.pod
Log:
[S04] define "lexotic"

Modified: docs/Perl6/Spec/S04-control.pod
===================================================================
--- docs/Perl6/Spec/S04-control.pod     2009-11-10 17:15:21 UTC (rev 29048)
+++ docs/Perl6/Spec/S04-control.pod     2009-11-10 18:07:56 UTC (rev 29049)
@@ -13,16 +13,78 @@

     Created: 19 Aug 2004

-    Last Modified: 06 Nov 2009
-    Version: 85
+    Last Modified: 10 Nov 2009
+    Version: 86

 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.

+=head1 The Relationship of Lexical and Dynamic Scopes
+
+Control flow is a dynamic feature of all computer programming
+languages, but languages differ in the extent to which control flow is
+attached to declarative features of the language, which are often known
+as "static" or "lexical".  We use the phrase "lexical scoping" in its
+industry-standard meaning to indicate those blocks that surround the
+current textual location.  More abstractly, any declarations associated
+with those textual blocks are also considered to be part of the lexical
+scope, and this is where the term earns the "lexical" part of its name,
+in the sense that lexical scoping actually does define the "lexicon"
+for the current chunk of code, insofar as the definitions of variables
+and routines create a local domain-specific language.
+
+We also use the term "dynamic scoping" in the standard fashion to
+indicate the nested call frames that are created and destroyed every
+time a function or method is called.  In most interesting programs the
+dynamic scopes are nested quite differently from the lexical scopes,
+so it's important to distinguish carefully which kind of scoping
+we're talking about.
+
+Further compounding the difficulty is that every dynamic scope is
+associated with a lexical scope somewhere, so you can't just consider
+one kind of scoping or the other in isolation.  Many constructs define
+a particular interplay of lexical and dynamic features.  For instance,
+unlike normal lexically scope variables, contextual variables search
+up the dynamic call stack for a variable of a particular name, but at
+each "stop" along the way, they are actually looking in the lexical
+"pad" associated with that particular dynamic scope.
+
+In Perl 6, control flow is designed to do what the user expects most of
+the time, but this implies that we must consider the declarative nature
+of labels and blocks and combine those with the dynamic nature of the
+call stack.  For instance, a C<return> statement always returns from
+the lexically scoped subroutine that surrounds it.  But to do that,
+it may eventually have to peel back any number of layers of dynamic
+scoping internal to the subroutine.  The lexical scope supplies the
+declared target for the dynamic operation.  There does not seem to
+be a prevailing term in the industry for this, so we've coined the
+term I<lexotic> to refer to these strange operations that perform a
+dynamic operation with a lexical target in mind.  Lexotic operators
+in Perl 6 include:
+
+    return
+    next
+    last
+    redo
+    goto
+
+Some of these operators also fall back to a purely dynamic interpretation
+if the lexotic interpretation doesn't work.  For instance, C<next>
+will prefer to exit a loop lexotically, but if there is no loop with
+an appropriate label in the lexical context, it will then scan upward
+dynamically for any loop with the appropriate label, even though that
+loop will not be lexically visible.  Lexotic and dynamic control flow
+is implemented by a system of control exceptions.  For the lexotic
+return of C<next>, the control exception will contain the identity of
+the loop scope to be exited (since the label was already "used up" to
+discover that identity), but for the dynamic fallback, the exception
+will contain only the loop label to be matched dynamically.  See
+L</Control Exceptions> below.
+
 =head1 The Relationship of Blocks and Declarations

 Every block is a closure.  (That is, in the abstract, they're all
-anonymous subroutines that take a snapshot of their lexical scope.)
+anonymous subroutines that take a snapshot of their lexical environment.)
 How a block is invoked and how its results are used are matters of
 context, but closures all work the same on the inside.


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2009 Google