2025年10月7日のPython 3.14.0のリリースに向け、最後のRC(リリース候補版)となるPython 3.14.0rc3がリリースされた。この後は明らかなバグの修正のみが行われる。
Pythonの次期バージョン3.14のリリース候補版「rc3」が2025年9月18日に公開された。Python 3.14.0rc3は、正式版のリリースを間近に控えた最後のプレビューリリースである。
Python 3.14.0正式版のリリースは2025年10月7日が予定されており、行われるのはrc3のリリース以降は明らかなバグ修正のみとなる。また、サードパーティライブラリの開発者に向けては、Python 3.14に対応する準備をすることが推奨されている。
3.14.0rc2と同様、rc3ではバイトコードファイル(.pycファイル)に埋め込まれるマジックナンバーの変更を伴うバグフィックスが含まれているため、rc2までのバージョンで作成された.pycファイルはrc3では動作せず、.pycファイルのリコンパイルが必要になる。
このバグはモジュールレベルでの型アノテーション(型ヒント)とlambda式を含むリスト内包表記を組み合わせることで発生する。このバグを報告する「SIGSEGV in Python 3.14.0rc2+ with List Comprehension and Lambda Expression」では、このバグを発生させる例として以下のコードが挙げられている。
def report_error():
pass
try:
[0 for name_2 in unique_name_0 if (lambda: name_2)]
except:
pass
unique_name_1: 0
これは存在しないリストunique_name_0を使ってリスト内包表記で何らかの処理をしているコードであり、その直下ではunique_name_1に(「: 0」という不適切な)型ヒントが付与されている(変数は定義されていない)。このコードをcrash.pyなどのファイルに保存して、Python 3.13で実行するとunique_name_0がないためにNameError例外が発生し、except節が実行される。ただし、そのブロックはpass文しかないので、何も表示されずに実行が終了する。
しかし、Python 3.14.0rc2で、このコードを実行するとセグメンテーションフォールトが発生する。
このバグの修正に伴ってバイトコードのマジックナンバーが変更になっている。上記URLによれば、この問題はLinux環境で発生したと報告されているが、macOSでも同様な結果となった(一方、筆者の手元のWindows環境では再現できなかった。ただし、PythonバイトコードのマジックナンバーはWindows版のrc3でもmacOS版のrc3と同一のものに変更になっている)。
どうも。HPかわさきです。
いよいよ、Python 3.14.0のリリースが間近に迫ってきました。正式版がリリースされたら、その新機能について「なるはや」で記事をお届けする予定です。楽しみにしていてくださいね。
Copyright© Digital Advantage Corp. All Rights Reserved.