Sortie du langage de programmation Python 3.8

Après un an et demi de développement soumis version majeure du langage de programmation Python 3.8. Mises à jour correctives pour la branche Python 3.8 est prévu sortie dans les 18 mois. Les vulnérabilités critiques seront corrigées pendant 5 ans jusqu’en octobre 2024. Des mises à jour correctives pour la branche 3.8 seront publiées tous les deux mois, la première version corrective de Python 3.8.1 étant prévue pour décembre.

Parmi les ajoutés nouveautés:

  • support opérations d’affectation au sein d’expressions complexes. Avec le nouvel opérateur « :=", il est possible d'effectuer des opérations d'affectation de valeur à l'intérieur d'autres expressions, par exemple pour éviter les doubles appels de fonction dans les instructions conditionnelles et lors de la définition de boucles :

    si (n := len(a)) > 10 :
    ...

    while (block := f.read(256)) != " :
    ...

  • support nouvelle syntaxe pour spécifier les arguments de fonction. Lors de l'énumération des arguments lors de la définition d'une fonction, vous pouvez désormais spécifier un "/" pour séparer les arguments auxquels des valeurs ne peuvent être attribuées qu'en fonction de l'ordre dans lequel les valeurs sont énumérées lors de l'appel de fonction, des arguments pouvant être attribués. dans n'importe quel ordre (syntaxe variable=valeur) ). Côté pratique, la nouvelle fonctionnalité permet aux fonctions en Python d'émuler complètement le comportement des fonctions existantes en C, et aussi d'éviter de se lier à des noms spécifiques, par exemple si le nom du paramètre est prévu d'être modifié dans le futur.

    L'indicateur « / » complète l'indicateur « * » précédemment ajouté, séparant les variables pour lesquelles seule une affectation sous la forme « variable=valeur » est applicable. Par exemple, dans la fonction "def f(a, b, /, c, d, *, e, f):" les variables "a" et "b" ne peuvent être affectées que dans l'ordre dans lequel les valeurs sont listées ,
    les variables « e » et « f », uniquement via l'affectation « variable=valeur », et les variables « c » et « d » de l'une des manières suivantes :

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Добавлен nouvelle API C
    pour configurer les paramètres d'initialisation de Python, permettant un contrôle complet sur tous configuration et fournir des fonctionnalités avancées de gestion des erreurs. L'API proposée facilite l'intégration de la fonctionnalité de l'interpréteur Python dans d'autres applications C ;

  • Mis en œuvre nouveau protocole Vectorcall pour un accès plus rapide aux objets écrits en langage C. Dans CPython 3.8, l'accès à Vectorcall est encore limité à un usage interne, un transfert vers la catégorie des API accessibles au public est prévu dans CPython 3.9 ;
  • Ajoutée appels aux Runtime Audit Hooks, qui fournissent aux applications et frameworks en Python un accès à des informations de bas niveau sur la progression du script pour auditer les actions effectuées (par exemple, vous pouvez suivre l'importation de modules, l'ouverture de fichiers, à l'aide d'une trace, accéder aux sockets réseau, exécuter du code via exec, eval et run_mod);
  • Dans le module cornichon à condition prise en charge du protocole Pickle 5, utilisé pour sérialiser et désérialiser des objets. Pickle vous permet d'optimiser le transfert de grandes quantités de données entre les processus Python dans des configurations multicœurs et multi-nœuds en réduisant le nombre d'opérations de copie de mémoire et en appliquant des techniques d'optimisation supplémentaires telles que l'utilisation d'algorithmes de compression spécifiques aux données. La cinquième version du protocole se distingue par l'ajout d'un mode de transmission hors bande, dans lequel les données peuvent être transmises séparément du flux pickle principal.
  • Par défaut, la quatrième version du protocole Pickle est activée, ce qui, par rapport à la troisième version précédemment proposée par défaut, permet des performances supérieures et une réduction de la taille des données transmises ;
  • Dans le module dactylographie Plusieurs nouvelles fonctionnalités sont introduites :
    • classe TypéDict pour les tableaux associatifs dans lesquels les informations de type sont explicitement spécifiées pour les données associées aux clés (« TypedDict('Point2D', x=int, y=int, label=str) »).
    • type Littéral, qui permet de limiter un paramètre ou une valeur de retour à quelques valeurs prédéfinies (« Literal['connected', 'disconnected'] »).
    • Construction "Final", qui permet de définir les valeurs des variables, fonctions, méthodes et classes qui ne peuvent être ni modifiées ni réaffectées ("pi: Final[float] = 3.1415926536").
  • Ajout de la possibilité d'attribuer un cache pour les fichiers compilés avec bytecode, enregistrés dans une arborescence FS distincte et séparés des répertoires avec le code. Le chemin d'enregistrement des fichiers avec bytecode est défini via une variable PRÉFIXE PYTHONPYCACHE ou l'option "-X pycache_prefix" ;
  • Mis en œuvre la possibilité de créer des versions de débogage de Python qui utilisent un ABI identique à la version, ce qui vous permet de charger des extensions écrites en langage SI, compilées pour les versions stables, dans les versions de débogage ;
  • Les chaînes f (littéraux formatés préfixés par « f ») prennent en charge l'opérateur = (par exemple, « f'{expr=}' »), qui vous permet de convertir une expression en texte pour un débogage plus facile. Par exemple:

    ››› utilisateur = 'eric_idle'
    ››› membre_depuis = date (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Expression "continuer» autorisé à être utilisé à l'intérieur d'un bloc enfin;
  • Nouveau module ajouté multitraitement.shared_memory, permettant l'utilisation de segments de mémoire partagée dans des configurations multiprocessus ;
  • Sur la plateforme Windows, l'implémentation asyncio a été déplacée pour utiliser la classe ProactorEventLoop;
  • Les performances de l'instruction LOAD_GLOBAL ont été augmentées d'environ 40 % grâce à l'utilisation d'un nouveau mécanisme de mise en cache du code objet.

Source: opennet.ru

Ajouter un commentaire