"__future__" --- future 文の定義
********************************

**ソースコード:** Lib/__future__.py

======================================================================

"from __future__ import feature" の形式でのインポートは future 文 の定
義と呼ばれています。これらは特殊なケースで、 Python の新機能が標準にな
るリリースの前に Python コンパイラーが future 文を含むモジュールで
Python の新機能を使用できるようにします。

Python コンパイラはこれらの future 文に特別な意味を与えますが、文自体
は他の import 文と同じように実行されます。 "__future__" も実在するモジ
ュールで、インポートシステムは他の Python モジュールと同じように扱いま
す。 この設計には三つの目的があります。

* import 文を解析する既存のツールを混乱させることを避け、インポートし
  ようとしているモジュールを見つけられるようにするため。

* 互換性のない変更がいつ導入され、いつ必須になる予定か、またはいつ必須
  になったかを記録するため。 これは実行可能なドキュメントの一種で、
  "__future__" をインポートして内容を調べることで、プログラムから確認
  できます。

* Python 2.1 より前のリリースで future 文 を実行した場合に、少なくとも
  実行時例外が発生するようにするため。 (2.1 より前にはその名前のモジュ
  ールがないため、"__future__" のインポートは失敗します。)


モジュールコンテンツ
====================

"__future__" から機能の説明が削除されることはありません。 Python 2.1
での導入以来、次の機能がこの仕組みを通して言語に取り入れられました。

+---------------------------+---------------------------+---------------------------+---------------------------+
| 機能                      | 選択可能になったリリース  | 必須になったリリース      | 内容                      |
|===========================|===========================|===========================|===========================|
| __future__.nested_scopes  | 2.1.0b1                   | 2.2                       | **PEP 227**: *Statically  |
|                           |                           |                           | Nested Scopes*            |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.generators     | 2.2.0a1                   | 2.3                       | **PEP 255**: *Simple      |
|                           |                           |                           | Generators*               |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.division       | 2.2.0a2                   | 3.0                       | **PEP 238**: *Changing    |
|                           |                           |                           | the Division Operator*    |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.absolute_impo  | 2.5.0a1                   | 3.0                       | **PEP 328**: *Imports:    |
| rt                        |                           |                           | Multi-Line and            |
|                           |                           |                           | Absolute/Relative*        |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.with_statement | 2.5.0a1                   | 2.6                       | **PEP 343**: *「with」文* |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.print_function | 2.6.0a2                   | 3.0                       | **PEP 3105**: *Make print |
|                           |                           |                           | a function*               |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.unicode_liter  | 2.6.0a2                   | 3.0                       | **PEP 3112**: *Bytes      |
| als                       |                           |                           | literals in Python 3000*  |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.generator_stop | 3.5.0b1                   | 3.7                       | **PEP 479**:              |
|                           |                           |                           | *StopIteration handling   |
|                           |                           |                           | inside generators*        |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.annotations    | 3.7.0b1                   | 予定なし [1]              | **PEP 563**: *アノテーシ  |
|                           |                           |                           | ョンの評価の延期*、**PEP  |
|                           |                           |                           | 649**: *デスクリプタ を使 |
|                           |                           |                           | ったアノテーションの遅延  |
|                           |                           |                           | 評価*                     |
+---------------------------+---------------------------+---------------------------+---------------------------+

class __future__._Feature

   "__future__.py" のそれぞれの文は次のような形式をしています:

      FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                             CompilerFlag)

   通常、*OptionalRelease* は *MandatoryRelease* より小さく、どちらも
   "sys.version_info" と同じ形式の 5 要素のタプルです。

      (PY_MAJOR_VERSION, # 2.1.0a3 の 2。整数
       PY_MINOR_VERSION, # 1。整数
       PY_MICRO_VERSION, # 0。整数
       PY_RELEASE_LEVEL, # "alpha", "beta", "candidate", "final" のいずれか。文字列
       PY_RELEASE_SERIAL # 3。整数
      )

_Feature.getOptionalRelease()

   *OptionalRelease* はその機能が導入された最初のリリースを記録します
   。

_Feature.getMandatoryRelease()

   まだ時期が来ていない *MandatoryRelease* の場合、*MandatoryRelease*
   はその機能が言語の一部となるリリースを記します。

   その他の場合、*MandatoryRelease* はその機能がいつ言語の一部になった
   のかを記録します。そのリリースから、あるいはそれ以降のリリースでは
   、この機能を使う際に future 文は必要ではありませんが、future 文を使
   い続けても構いません。

   *MandatoryRelease* は "None" になるかもしれません。つまり、予定され
   た機能が破棄されたか、まだ決定されていないということです。

_Feature.compiler_flag

   *CompilerFlag* は、動的にコンパイルされるコードでその機能を有効にす
   るために、組み込み関数 "compile()" の第4引数に渡す(ビットフィールド
   )フラグです。このフラグは "_Feature" インスタンスの
   "_Feature.compiler_flag" 属性に保存されています。

[1] "from __future__ import annotations" は、以前は Python 3.10 で必須
    になる予定でしたが、延期された後、最終的に取りやめになりました。
    この機能はいずれ非推奨となり、削除される予定です。 **PEP 649** と
    **PEP 749** を参照してください。

参考:

  future 文 (future statement)
     コンパイラがどのように future インポートを扱うか。

  **PEP 236** - Back to the __future__
     __future__ 機構の原案
