Python 3.11の安定版がリリースされる、3.10よりも1.25倍高速に
![](https://i.gzn.jp/img/2022/10/26/python-3-11-released/00_m.png)
2022年10月25日に、Python 3.11の安定版がリリースされました。Python 3.11ではFaster CPythonの導入によって、3.10よりも平均で1.25倍高速になっています。
Python 3.11.0 final is now available - Committers - Discussions on Python.org
https://discuss.python.org/t/python-3-11-0-final-is-now-available/20291
3.11.0 Documentation
https://docs.python.org/3.11/
Faster CPythonは2020年にマーク・シャノン氏が立ち上げたPythonの高速化プロジェクトで、「Pythonを4年間で5倍高速化する」ことを目標にしています。このFaster CPythonが導入されたことで、Python 3.11はPython 3.10から10%~60%の高速化が図られており、平均で1.25倍の高速化が実現できているとのこと。
Mailman 3 [Python-Dev] Speeding up CPython - Python-Dev - python.org
https://mail.python.org/archives/list/[email protected]/message/RDXLCH22T2EZDRCBM6ZYYIUTBWQVVVWH/
他の改善点は以下の通り。
PEP-657:Tracebackでエラー位置の詳細が追加される
Cpythonインタープリターが表示するTracebackで、各バイトコード命令から、それらを生成した行の開始列オフセットと終了列オフセット、および終了行番号へのマッピングが追加されます。例えば以下のように、エラー箇所が「~~~~」「^^^^」で強調されます。
Today Python 3.11 is officially released.
— Rugg (@rd_rugg) October 24, 2022
Here are the main improvements you need to know:
1. Fine-grained Error Locations in Tracebacks
Python now tries to show you exactly where the problem is. It will show symbols ~~~~^^^^ where ^ brings attention to the issue. pic.twitter.com/qfrM43i68d
PEP-654:例外グループとexcept*
例外型「ExceptionGroup」が導入され、無関係な複数の例外を同時に発生させて処理できるようになりました。また、ExceptionGroupを処理する新しい構文として「except*」も導入されています。さらにBaseExceptionにメモを追加するadd_note()メソッドが追加されました。追加されたメモはTracebackで表示されるようになります。
PEP-680:標準ライブラリでのTOML解析のサポート
標準ライブラリにtomllibモジュールが追加され、TOML(Tom’s Obvious Minimal Language)を解析できるようになります。
gh-90908:「asyncio」にタスクグループを導入
非同期I/Oで並行処理を実現する公式ライブラリのasyncioに、複数のタスクをまとめて同時に処理することができるasyncio.TaskGroupというクラスが追加され、同時に発生した例外を捕捉したり、例外発生時にタスクをキャンセルしたりできるようになります。
gh-34627:アトミックグループと量指定子の正規表現が追加
新しい正規表現として「(?>...)」「*+」「++」「?+」「{m,n}+」が追加されました。
PEP-673:Self型の追加
typing.Selfを使うことで、自分自身を動的に定義できるようになり、定義ししたいメソッドの属するクラスを取得することが簡単になります。
PEP-646:可変長ジェネリックス
Python 3.11では「TypeVarTuple」が導入され、任意の数の型を変数とすることができるようになりました。特に、NumPyやTensorFlowなどの数値計算ライブラリにおける配列のような構造の型を変数化できるようになり、これらのライブラリを使用するコードのバグを静的型チェッカーで検出できるようになります。
PEP-675:任意の文字列定数
これまで型ヒントでは、任意の文字列定数を型アノテーションで指定する方法がなく、Literal["foo"]のように指定する必要がありました。Python 3.11では、文字列定数のLiteralStringという型が追加され、Literal["hoge"]やLiteral["foo"] といった任意のリテラル文字列を関数で受け入れることができるようになります。
PEP-655:TypedDictで要素の省略可・不可を個別に設定できるように
TypedDictで特定の要素を必須であるとマークする「Required[]」と、特定の要素を潜在的に見つからないものとする「NotRequired[]」という2つの記法が導入されます。Python 3.10までは、TypedDictですべての要素を必須とするか、あるいはすべての要素を省略可能とするかしか選べませんでした。しかし、Python 3.11からは個々の要素に応じて必須かどうかを定めることができます。
PEP-681:dataclass変換
dataclass仕様のpythonの型チェッカーではエラーとなっていたサードパーティのクラスでも、dataclass_transformでデコレートすることによってdataclassと同様の仕様の型チェックが行えるようになります。
・関連記事
Googleがオープンソース脆弱性のデータベースをPythonやGoにまで拡大 - GIGAZINE
Pythonの15年間見過ごされてきた脆弱性が30万件以上のオープンソースリポジトリに影響を与える可能性 - GIGAZINE
Pythonがプログラミング言語の人気ランキング「TIOBE Index」で20年の歴史上初めて1位を獲得 - GIGAZINE
Pythonと同じ文法でマイコンを操作できる「MicroPython」、エミュレーターもあり気軽に遊べる - GIGAZINE
・関連コンテンツ