[pypy-svn] r34681 - pypy/dist/pypy/doc

arigo at codespeak.net arigo at codespeak.net
Thu Nov 16 17:23:56 CET 2006


Author: arigo
Date: Thu Nov 16 17:23:55 2006
New Revision: 34681

Modified:
   pypy/dist/pypy/doc/stackless.txt
Log:
Finish the Composability section.


Modified: pypy/dist/pypy/doc/stackless.txt
==============================================================================
--- pypy/dist/pypy/doc/stackless.txt	(original)
+++ pypy/dist/pypy/doc/stackless.txt	Thu Nov 16 17:23:55 2006
@@ -136,7 +136,7 @@
             # Process the available values in a batch, but at most 3
             batch = lst[:3]
             del lst[:3]
-            ... process batch ...
+            ...process batch...
 
     # Initialize two coroutines with a shared list as argument
     exchangelst = []
@@ -585,9 +585,34 @@
 
             ...generators_view.getcurrent()...
 
-Then the composition ``grab_values()`` works as expected.
-
-XXX a few words about how
+Then the composition ``grab_values()`` works as expected, because the
+two views are independent.  The coroutine captured as ``self.caller`` in
+the ``generator_iterator.next()`` method is the main coroutine of the
+``generators_view``.  It is no longer the same object as the main
+coroutine of the ``producer_view``, so when ``data_producer()`` issues
+the following command::
+
+    main_coro.switch()
+
+the control flow cannot accidentally jump back to
+``generator_iterator.next()``.  In other words, from the point of view
+of ``producer_view``, the function ``grab_next_value()`` always runs in
+its main coroutine ``main_coro`` and the function ``data_producer`` in
+its coroutine ``producer_coro``.  This is the case independently of
+which ``generators_view``-based coroutine is the current one when
+``grab_next_value()`` is called.
+
+Only code that has explicit access to the ``producer_view`` or its
+coroutine objects can perform switches that are relevant for the
+generator code.  If the view object and the coroutine objects that share
+this view are all properly encapsulated inside the generator logic, no
+external code can accidentally temper with the expected control flow any
+longer.
+
+In conclusion: we will probably change the app-level interface of PyPy's
+stackless module in the future to not expose coroutines and greenlets at
+all, but only views.  They are not much more difficult to use, and they
+scale automatically to larger programs.
 
 
 .. _`Stackless Python`: http://www.stackless.com



More information about the Pypy-commit mailing list