2016年9月25日日曜日

Python コア開発スプリント 2016: 3.6 and beyond!




9月5日から9日にかけ、Python コア開発者の1グループがスプリントのために Instagram に集まりました。InstagramMicrosoft, そして Python ソフトウェア財団 がスポンサーとなりました。その目的は Python 3.6b1 リリースへ向けて1週間の作業を行うことであり、ちょうど次の月曜日の2016年9月12日は Python 3.6 の feature freeze でした。このスプリントのきっかけは10年前にアイスランドで開催された Need for Speed sprint に端を発し、そこでは Python 2.5 に多くのパフォーマンス改善が行われました。

当時のスプリントは、どこからみても大成功を収めました。参加者全員、彼らが行った作業と議論した内容の両方に達成感がありました。同じ部屋で様々な PEP に関する多くの議論と多くの設計に関する決定が行われました。そこには同じ部屋で一緒に作業をすることによる仲間意識もありました。通常、私たちの多くは年に1度の PyCon US でのみ顔を合わせています。そのときは単純に同じ時間を過ごせない他の催しなどがあります。(これは PyCon での Python 開発スプリントも含んでいます。それは Python に新たにコントリビュートしようとする人たちを助けることにより注力しているからです。よって、今回のスプリントを公けにしていない理由はそのためです。)

定量的な視点からみれば、このスプリントはこれまでにない Python にとって最も生産的な週でした。CPython の GitHub ミラーのグラフによると、9月4日の週の コミット数 はそれまでの7週間分のコミットを足したものよりも多いことが分かります。また 課題管理の視点からは 、62個のオープンされている課題が下回り、全部で166個の課題がクローズされました。

スプリント週間の大半は、様々な PEP のうち、まだ認可されていないものや、まだ完全に実装されていないものを中心とする作業に費やされました。最終的に Python 3.6 の16個の PEP のうち、12個の PEP について、スクラッチから実装されたり、その週の間に作業を完了しました。

  1. 関数の **kwargs の順番の保持 (PEP 468)
  2. dict 型にプライベートバージョンの追加 (PEP 509)
  3. 数値リテラルのアンダースコア (PEP 515)
  4. ファイルシステムパスプロトコルの追加 (PEP 519)
  5. クラス属性定義の順番の保持 (PEP 520)
  6. CPython にフレーム評価 API の追加 (PEP 523)
  7. (システムの起動中) Linux 上で os.urandom() をブロックさせる (PEP 524)
  8. 非同期ジェネレーター (PEP 525)
  9. 変数アノテーションの構文 (PEP 526)
  10. Windows のコンソールエンコーディングを UTF-8 に変更 (PEP 528)
  11. Windows のファイルシステムエンコーディングを UTF-8 に変更 (PEP 529)
  12. 非同期内包表記 (PEP 530)

大きなプロジェクトの中には PEP になっていないものもあります。例えば、いま Python 3.6 は DTrace と SystemTap をサポートします。これは Python を監視したり、イントロスペクションしたりするためのツールが増えることになります。新たな可能性を示す使い方やサンプルについては HOWTO を参照してください。

また CPython はこのスプリントでより省メモリなディクショナリ実装を得られました。新実装は速度を落とすことなく、ディクショナリのメモリ使用量を25%削減し、さらにディクショナリへ追加した順番を保持します。Raymond Hettinger 氏の 提案 に基づき、スプリントの前に INADA Naoki 氏によってパッチが書かれましたが、ディクショナリの内部実装を変えることは Python 自身に深い意味をもたらすとしてスプリント中にレビューされて多くの議論が行われました。最終的には、そのパッチは認可され、直接 PEP 468 を認可されたものとし、PEP 520 を単純化しました。

Gilectomy (そのプロジェクトの背景については PyCon US からそのトピックの プレゼンテーション をみてください) についての作業も行われました。進捗として参照カウントを有効にせずに Python を実行する (例えば、Python は巨大なメモリリークに陥る) といったことが行われました。次に参照カウントの有効にするように戻す方法、Python がいくつのスレッドや CPU コア数を使ったときにスケールできるかといったことについて最新の設計から始められました。そうとはいえ、Gilectomy がマージできる状態になるにはまだ長い道のりがあります。私たちは Python 4 の目玉としてブランディングしようと半ば冗談に考えていたりします。

スプリント期間中に行われた多くの作業は言語やライブラリの改善だけではなく、パフォーマンス改善にもつながりました。OS X 上の Python 3.5.2+ と 3.6b1+ での 簡単なパフォーマンス比較 は、2桁の速度改善が珍しくなく 3.6 が全般的に速いことを示しています。Windows 10 で計測した類似のベンチマークにおいても類似のパフォーマンス改善がみられたことが報告されました。

スプリントの参加者に深い感謝を述べます。以下に参加者をアルファベット順で一覧にします。彼らが参加できるように資金協力してくれた組織も併記しています。彼らの大半は参加するために旅行して、米国のレイバー・デー (Labor Day) の祝日を家族と過ごすことを諦めました。2つの大陸の3ヶ国から参加されていました。 (実際には他の大陸や他の国へもっと多くの人を招待しましたが、みんなが参加できたわけではありませんでした。)

  • Brett Cannon (Microsoft)
  • Ned Deily
  • Steve Dower (Microsoft)
  • Larry Hastings
  • Raymond Hettinger
  • Senthil Kumaran
  • Łukasz Langa (Instagram)
  • R. David Murray
  • Benjamin Peterson
  • Davin Potts
  • Lisa Roach (Cisco)
  • Guido van Rossum
  • Yury Selivanov (magic.io)
  • Gregory P. Smith (Google)
  • Eric Snow (Canonical)
  • Victor Stinner (Red Hat)
  • Zachary Ware

2016年9月13日火曜日

Python 3.6.0 ベータ 1 リリース

原文はこちら: Python 3.6.0 beta 1 is now available!

Python 3.6.0b1 は、次のメジャーバージョン Python 3.6 の4つのベータリリースの最初のリリースであり、3.6 へ向けての機能開発期間の最後にあたります。

Python 3.6 の主な新機能は以下になります。

* PEP 468 - 関数の **kwargs の順番の保持
* PEP 487 - クラス生成時のカスタマイズの簡潔化
* PEP 495 - ローカルタイムの曖昧性の解消
* PEP 498 - リテラル文字列書式指定
* PEP 506 - 標準ライブラリへの Secrets モジュールの追加
* PEP 509 - dict 型にプライベートバージョンの追加
* PEP 515 - 数値リテラルのアンダースコア
* PEP 519 - ファイルシステムパスプロトコルの追加
* PEP 520 - クラス属性定義の順番の保持
* PEP 523 - CPython にフレーム評価 API の追加
* PEP 524 - (システムの起動中) Linux 上で os.urandom() をブロックさせる
* PEP 525 - 非同期ジェネレーター (暫定)
* PEP 526 - 変数アノテーションの構文 (暫定)
* PEP 528 - Windows のコンソールエンコーディングを UTF-8 に変更 (暫定)
* PEP 529 - Windows のファイルシステムエンコーディングを UTF-8 に変更 (暫定)
* PEP 530 - 非同期内包表記

詳細は"What’s New In Python 3.6" を参照してください。


3.6.0b1 は以下からダウンロードできます。


ベータリリースは、広く様々なコミュニティへ向けて、新機能やバグ修正を検証したり、自分たちのプロジェクトで新機能リリースに備えるといった機会の提供を目的としています。サードパーティーの Python プロジェクトのメンテナーの方々は、ベータ期間中に 3.6 の検証を行い、できるだけ早く bugs.python.org に見つけたイシューを報告してもらうようにどうかお願いします。ベータ期間中のリリースは feature complete ではありますが、一部の機能は変更されるかもしれませんし、稀な場合では、リリース候補フェーズの前に削除されるということもあり得ます。私たちの目標は rc1 の後にいかなる変更も行わないことです。この目標を達成するには、3.6 へ向けてベータ期間中にできるだけ露出していくということがとても重要になります。これはプレビューリリースであり、本番環境での利用を推奨していないというのに注意してください。

Python 3.6 の次のベータリリースである 3.6.0b2 は 2016-10-03 に予定されています。リリーススケジュールの詳細は以下の PEP で確認してください。