ここ数ヶ月、Qt for Pythonのメンバーの多くは、Qt Bridgesプロジェクトの下でPythonとQtの連携を簡素化する作業に取り組んできたため、Qt for Pythonへの新機能追加よりも、そちらに注力してきました。
各リリースにおいて行うべき作業の大部分は、Qt/C++からのすべての更新内容を反映し、その機能をすべてのPySideユーザーに提供できるようにすることです。
Visual Studio Codeユーザーの皆様へお知らせですが、2月にプラグイン開発チームがQt for Python用の拡張機能をリリースしました。Qt Extension 1.12.0 for VS Code リリースをご覧ください。
以下は、今回のリリースに含まれるトピックと、現在開発中の事項の簡単なリストです。
6.11.0 リリースでは、Python バージョンを 3.10 に引き上げました。これは、3.9 を動作させるためだけに残されていた多くの要素を削除するためですが、より重要なのは、Python のリリースに含まれる新しい機能を利用するためです。内部的には、互換性のために残されていた多くのヘルパー関数を削除し、これらは Python C-API で置き換えられるようになりました。
Qt for Pythonアプリケーション向けのパフォーマンス向上に向けた研究を継続しています(Free Threaded Python)。現時点では、PythonスレッドのQtイベントループを妨げないよう、フレームワーク全体で独自のロックメカニズムを扱う複雑さのため、状況改善に向けた微調整を続けています。多くの人々が、パフォーマンス向上は自動的に得られるものだと想定してこれを求めてきましたが、その考えとは逆に、UI とのやり取りは最適化できるものではないことを念頭に置いてください。また、Python アプリケーションで発生しうるパフォーマンスのボトルネックのほとんどは、他のモジュールや、場合によっては特注の拡張機能を作成することで解決可能です。
また、サブインタプリタというアプローチについても調査しましたが、Qt for Python では実現不可能であると結論づけました。
型ヒントも長らく取り組んできたトピックの一つであり、報告されている問題の数を徐々に減らすことに成功しています。もし問題に遭遇した場合は、Python スタブをさらに改善できるよう、バグ報告を送信してご協力をお願いいたします!
Qt 6.11 リリース発表でもお伝えした通り、QtのRendering Hardware Interface (RHI) を基盤として構築された、命令型2Dグラフィックスレンダリング機能を備えた新モジュール「Qt Canvas Painter」のバインディングも提供しています。
また、pyproject.tomlへの対応も更新しました。これにより、pyside6-uicおよびpyside6-rccツールのオプションを適切に扱えるようになりました。これは、一部のプラットフォームで過度な圧縮が行われ、一部のリソースの使用に支障をきたすという報告を受けたためです。
同様に、pyside6-designerには、同じインターフェース内でPythonのヘルプドキュメントを表示する新機能が追加されました。
バインディングジェネレータであるShibokenにも多くの改善が加えられました。構造面での主な変更点として、主にクロスコンパイル機能の実現と、将来的なビルドシステムの改善を見据えて、ジェネレータとヘルパーモジュールをようやく分離しました。これにより、異なるプラットフォーム向けにPySideをパッケージ化する際の作業も容易になります。
Pythonが進化し続けるように、C++も進化しています。C++20の登場に伴い、比較演算子の合成機能のサポートに多くの時間を費やしました。例えば、不一致な比較演算子の修飾に関する警告が多発したため、非同種の逆フリー比較演算子を無視する必要がありました。
バインディング生成時に発生するエラーの発生源を特定しやすくするため、エラーメッセージに詳細情報を追加しました。また、nullスマートポインタをNoneに変換する機能の実装、多重継承時の基底クラスへのキーワード引数の渡しの改善、その他のマイナーな修正など、細かな課題の解決にも取り組んできました。
多くの方々がiOSサポートの実装を期待してくださっていることを忘れてはいません。そこで、Patrick Stinson氏の貢献のおかげで、このプロジェクトを最近再開しました!近いうちに良いニュースをお届けできることを心から願っています!
同様に、ここ数ヶ月間一時停止していたプロジェクトもいくつかあります。例えば、C++コード内での動的バインディングを可能にするQt Python Scriptingプロジェクト、ビルドインフラの改善、デプロイメントツールの更新、QtQuickとの統合強化などです。今後のリリースで進展があることを期待していますので、どうぞご期待ください!
新しい実験的なサポート、機能、Pythonモジュールの統合を引き続き試していきたいと考えています。次に何に取り組むべきでしょうか?メッセージを送るか、Qtバグトラッカーで提案を投稿してください。
今回のリリースをぜひお楽しみください。また、いつものようにコミュニティプラットフォームに立ち寄り、何か正常に動作しない場合はバグレポートを提出して教えてください。