"__future__" --- Ορισμοί δηλώσεων μελλοντικών χαρακτηριστικών (Future statements)
*********************************************************************************

**Πηγαίος κώδικας:** Lib/__future__.py

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

Οι εισαγωγές της μορφής "from __future__ import feature" ονομάζονται
δηλώσεις μελλοντικών χαρακτηριστικών (future statements). Αυτές
αποτελούν ειδικές περιπτώσεις για τον μεταγλωττιστή (compiler) της
Python ώστε να επιτρέπεται η χρήση νέων χαρακτηριστικών της Python σε
ενότητες (modules) που περιέχουν τη δήλωση πριν από την έκδοση στην
οποία το χαρακτηριστικό γίνεται πρότυπο.

While these future statements are given additional special meaning by
the Python compiler, they are still executed like any other import
statement and the "__future__" exists and is handled by the import
system the same way any other Python module would be. This design
serves three purposes:

* Για την αποφυγή σύγχυσης υπαρχόντων εργαλείων που αναλύουν δηλώσεις
  εισαγωγής και αναμένουν να βρουν τις ενότητες που εισάγουν.

* 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 programmatically via
  importing "__future__" and examining its contents.

* To ensure that future statements run under releases prior to Python
  2.1 at least yield runtime exceptions (the import of "__future__"
  will fail, because there was no module of that name prior to 2.1).


Περιεχόμενα Ενότητας
====================

No feature description will ever be deleted from "__future__". Since
its introduction in Python 2.1 the following features have found their
way into the language using this mechanism:

+---------------------------+---------------------------+---------------------------+---------------------------+
| χαρακτηριστικό            | προαιρετικό στην          | υποχρεωτικό στην          | αποτέλεσμα                |
|===========================|===========================|===========================|===========================|
| __future__.nested_scopes  | 2.1.0b1                   | 2.2                       | **PEP 227**: *Στατικά     |
|                           |                           |                           | Εμφωλευμένα Πεδία*        |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.generators     | 2.2.0a1                   | 2.3                       | **PEP 255**: *Απλές       |
|                           |                           |                           | Γεννήτριες*               |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.division       | 2.2.0a2                   | 3.0                       | **PEP 238**: *Αλλαγή του  |
|                           |                           |                           | Τελεστή Διαίρεσης*        |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.absolute_impo  | 2.5.0a1                   | 3.0                       | **PEP 328**: *Εισαγωγές:  |
| rt                        |                           |                           | Πολλαπλών Γραμμών και     |
|                           |                           |                           | Απόλυτες/Σχετικές*        |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.with_statement | 2.5.0a1                   | 2.6                       | **PEP 343**: *Η Δήλωση    |
|                           |                           |                           | “with”*                   |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.print_function | 2.6.0a2                   | 3.0                       | **PEP 3105**: *Μετατροπή  |
|                           |                           |                           | της print σε συνάρτηση*   |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.unicode_liter  | 2.6.0a2                   | 3.0                       | **PEP 3112**: *Λεκτικές   |
| als                       |                           |                           | Σταθερές Bytes στην       |
|                           |                           |                           | Python 3000*              |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.generator_stop | 3.5.0b1                   | 3.7                       | **PEP 479**: *Χειρισμός   |
|                           |                           |                           | του StopIteration μέσα σε |
|                           |                           |                           | γεννήτριες*               |
+---------------------------+---------------------------+---------------------------+---------------------------+
| __future__.annotations    | 3.7.0b1                   | Never [1]                 | **PEP 563**:              |
|                           |                           |                           | *Αναβαλλόμενη αξιολόγηση  |
|                           |                           |                           | σχολιασμών *, :pep:`649`: |
|                           |                           |                           | *Καθυστερημένη αξιολόγηση |
|                           |                           |                           | σχολιασμών με χρήση       |
|                           |                           |                           | περιγραφέων*              |
+---------------------------+---------------------------+---------------------------+---------------------------+

class __future__._Feature

   Κάθε δήλωση στο αρχείο "__future__.py" έχει τη μορφή:

      FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                             CompilerFlag)

   όπου, κανονικά, το *OptionalRelease* είναι μικρότερο από το
   *MandatoryRelease*, και τα δύο είναι πλειάδες 5 στοιχείων
   (5-tuples) της ίδιας μορφής με το "sys.version_info":

      (PY_MAJOR_VERSION, # το 2 στο 2.1.0a3· ένας ακέραιος (int)
       PY_MINOR_VERSION, # το 1· ένας ακέραιος (int)
       PY_MICRO_VERSION, # το 0· ένας ακέραιος (int)
       PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" ή "final"· συμβολοσειρά (string)
       PY_RELEASE_SERIAL # το 3· ένας ακέραιος (int)
      )

_Feature.getOptionalRelease()

   Το *OptionalRelease* καταγράφει την πρώτη έκδοση στην οποία έγινε
   δεκτό το χαρακτηριστικό.

_Feature.getMandatoryRelease()

   Στην περίπτωση ενός *MandatoryRelease* που δεν έχει συμβεί ακόμα,
   το *MandatoryRelease* προβλέπει την έκδοση στην οποία το
   χαρακτηριστικό θα γίνει μέρος της γλώσσας.

   Ειδάλλως, το *MandatoryRelease* καταγράφει πότε το χαρακτηριστικό
   έγινε μέρος της γλώσσας· σε εκδόσεις κατά ή μετά από αυτήν, οι
   ενότητες δεν χρειάζονται πλέον μια δήλωση μελλοντικού
   χαρακτηριστικού για να χρησιμοποιήσουν το εν λόγω χαρακτηριστικό,
   αλλά μπορούν να συνεχίσουν να χρησιμοποιούν τέτοιες εισαγωγές.

   Το *MandatoryRelease* μπορεί επίσης να είναι "None", που σημαίνει
   ότι ένα προγραμματισμένο χαρακτηριστικό απορρίφθηκε ή ότι δεν έχει
   αποφασιστεί ακόμη.

_Feature.compiler_flag

   Το *CompilerFlag* είναι το flag (bitfield) που πρέπει να
   μεταβιβαστεί στο τέταρτο όρισμα της ενσωματωμένης συνάρτησης
   "compile()" για να ενεργοποιηθεί το χαρακτηριστικό σε δυναμικά
   μεταγλωττισμένο κώδικα. Αυτή η σημαία αποθηκεύεται στο γνώρισμα
   (attribute) "_Feature.compiler_flag" των στιγμιότυπων (instances)
   της κλάσης "_Feature".

[1] Η δήλωση "from __future__ import annotations" είχε αρχικά
    προγραμματιστεί να γίνει υποχρεωτική στην Python 3.10, αλλά η
    αλλαγή καθυστέρησε και τελικά ακυρώθηκε. Αυτό το χαρακτηριστικό θα
    καταργηθεί σταδιακά και θα αφαιρεθεί στο μέλλον. Δείτε τα **PEP
    649** και **PEP 749**.

Δείτε επίσης:

  Μελλοντικές δηλώσεις
     Πώς ο μεταγλωττιστής χειρίζεται τις μελλοντικές εισαγωγές (future
     imports).

  **PEP 236** - Επιστροφή στο __future__
     Η αρχική πρόταση για τον μηχανισμό του __future__.
