summaryrefslogtreecommitdiff
path: root/sys/src/cmd/python/Doc/lib/libfuture.tex
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
commit458120dd40db6b4df55a4e96b650e16798ef06a0 (patch)
tree8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Doc/lib/libfuture.tex
parent3a742c699f6806c1145aea5149bf15de15a0afd7 (diff)
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Doc/lib/libfuture.tex')
-rw-r--r--sys/src/cmd/python/Doc/lib/libfuture.tex69
1 files changed, 69 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Doc/lib/libfuture.tex b/sys/src/cmd/python/Doc/lib/libfuture.tex
new file mode 100644
index 000000000..f1ba064a3
--- /dev/null
+++ b/sys/src/cmd/python/Doc/lib/libfuture.tex
@@ -0,0 +1,69 @@
+\section{\module{__future__} ---
+ Future statement definitions}
+
+\declaremodule[future]{standard}{__future__}
+\modulesynopsis{Future statement definitions}
+
+\module{__future__} is a real module, and serves three purposes:
+
+\begin{itemize}
+
+\item To avoid confusing existing tools that analyze import statements
+ and expect to find the modules they're importing.
+
+\item To ensure that future_statements run under releases prior to 2.1
+ at least yield runtime exceptions (the import of
+ \module{__future__} will fail, because there was no module of
+ that name prior to 2.1).
+
+\item To document when incompatible changes were introduced, and when they
+ will be --- or were --- made mandatory. This is a form of executable
+ documentation, and can be inspected programatically via importing
+ \module{__future__} and examining its contents.
+
+\end{itemize}
+
+Each statement in \file{__future__.py} is of the form:
+
+\begin{alltt}
+FeatureName = "_Feature(" \var{OptionalRelease} "," \var{MandatoryRelease} ","
+ \var{CompilerFlag} ")"
+\end{alltt}
+
+where, normally, \var{OptionalRelease} is less than
+\var{MandatoryRelease}, and both are 5-tuples of the same form as
+\code{sys.version_info}:
+
+\begin{verbatim}
+ (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
+ PY_MINOR_VERSION, # the 1; an int
+ PY_MICRO_VERSION, # the 0; an int
+ PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
+ PY_RELEASE_SERIAL # the 3; an int
+ )
+\end{verbatim}
+
+\var{OptionalRelease} records the first release in which the feature
+was accepted.
+
+In the case of a \var{MandatoryRelease} that has not yet occurred,
+\var{MandatoryRelease} predicts the release in which the feature will
+become part of the language.
+
+Else \var{MandatoryRelease} records when the feature became part of
+the language; in releases at or after that, modules no longer need a
+future statement to use the feature in question, but may continue to
+use such imports.
+
+\var{MandatoryRelease} may also be \code{None}, meaning that a planned
+feature got dropped.
+
+Instances of class \class{_Feature} have two corresponding methods,
+\method{getOptionalRelease()} and \method{getMandatoryRelease()}.
+
+\var{CompilerFlag} is the (bitfield) flag that should be passed in the
+fourth argument to the builtin function \function{compile()} to enable
+the feature in dynamically compiled code. This flag is stored in the
+\member{compiler_flag} attribute on \class{_Feature} instances.
+
+No feature description will ever be deleted from \module{__future__}.