モバイルプラットフォームのサポート[3.13]
Python 3.13では、iOSとAndroid OSという二大モバイルプラットフォームがサポートの対象となりました。
iOSでは、arm64-apple-ios、arm64-apple-ios-simulatorという2つのターゲットがティア3でサポートされます。これは、2013年以降のiPhone/iPadといったネイティブ実行環境と、そのエミュレータ(Appleシリコン搭載ハードウェア)が相当します。古い、x86_64-apple-ios-simulator(Intelチップ搭載ハードウェア)はティア3におけるサポートではなく、Best Effort(最大限の努力)になるとされています。
なお、ティアとはPEP11で規定されるプラットフォームのサポート階層です。ティア1~ティア3があり、最も基本となるのがティア1です。macOS、Windows、Linuxといったベーシックなプラットフォームが含まれます。ティアごとに求められるサポート要件が異なっており、それを満たさないプラットフォームは上位のティアに昇格できません。
Android OSでは、aarch64-linux-android、x86_64-linux-androidという2つのターゲットがティア3でサポートされます。これは、AppleシリコンとIntelチップの64ビット環境が相当します。32ビット環境であるarm-linux-androideabi、i686-linux-androidはティア3におけるサポートではなく、Best Effort(最大限の努力)になるとされています。
この他、モバイルプラットフォームではありませんが、WebAssemblyの動作基盤の規格であるWASI(WebAssembly System Interface)もティア2でサポートされます。
ティアのサポート要件
ティアごとのサポート要件は、以下のようになっています。
ティア1は、コア開発者の全員がリリースを持つ最も優先度が高いプラットフォームです。macOS(x86_64、aarch64)、Windows(x86_64)、Linux(x86_64)がここに設定されています。ティア2は、コア開発者の2名以上がサポートするプラットフォーム、ティア3は、コア開発者の1名以上がサポートするプラットフォームです。
ティア1とティア2では、ビルドが失敗した場合にはリリースそのものが中止されます。ティア3ではビルドが失敗してもリリースは中止されません。
その他の変更[3.13]
最後に、その他の変更としていくつかの改良点を紹介します。
ドキュメント文字列のインデント除去
Pythonにおける文字列の表現方法として、シングルクォート(')、ダブルクォート(")が一般的に使われますが、トリプルクォート("""、''')は改行などを含む文字列を表現したいときに使われます。このトリプルクォート文字列の性質を生かして、Pythonではドキュメント文字列(docstring)という、ソースコードに簡易的なドキュメントを埋め込む機能を利用できます。
ドキュメント文字列は、改行や空白文字をそのまま保持するので、関数やメソッドの内部に記述してもインデントが不要です。しかしながら、見た目の観点からは適切なインデントが望ましいのですが、インデントするとそれがそのまま見えてしまうという問題がありました。そこで、Python 3.13ではコンパイル時にドキュメント文字列からインデントレベルの共通部分を削除し、余計な空白が出力されないようになりました。
以下のリストのコードは、Python 3.12では行頭に空白を伴いますが、Python 3.13では空白が除去されてすっきり出力されます。
def func(): """ これは、先頭に空白を含んだdocstringです。 複数の段落に渡ってもOKです。 """ print(func.__doc__)
locals関数の挙動の統一
実装ごとに異なっていたlocals関数の挙動が、Python 3.13で標準化されました。locals関数は、呼び出されたスコープにおけるローカル変数、ローカルオブジェクトを辞書形式で取得します。現在のスコープで有効な変数を取得できるので、デバッグなどの開発者用途で有用な関数です。辞書形式なので、名前で値を参照できます。
>>> def func(): ... a = 1 ... b = 2 ... c = 3 ... local = locals() ... print(local) ... print(local['c']) ... >>> func() {'a': 1, 'b': 2, 'c': 3} 3
locals関数の挙動の差異は、主に辞書の書き換えがおおもとのローカル変数に反映されるかという点に表れます。初期のlocals関数の戻り値は、それを書き換えることで変更を変数に反映できましたが、その後にさまざまなスコープが登場するにつれ、スコープごとの挙動に一貫性がない状況になりました。
Python 3.13では、最適化されたスコープ(関数、ジェネレータ、コルーチン、内包表記およびジェネレータ式)においてはlocals関数は変数のスナップショットを返すものとして、スナップショットの変更がおおもとの変数に影響しないというように取り決められました。
なお、最適化されたスコープとは、コンパイル時にコンパイラがターゲットのローカル変数名を確実に認識できて、これらへの読み取りおよび書き込みを最適化できるスコープのことを言います。
まとめ
今回は、対話型インタプリタの機能強化や高速化といった実行環境の改良、エラーメッセージの改良や新しい型関連機能、そしてモバイルプラットフォームのサポートを中心に紹介しました。Pythonでは、こういった魅力的な機能強化や改良が各バージョンで施されています。より高速で使い勝手のよい言語として成長し続けるPythonを、今後も追っていきたいものです。