EuroPython3日目の様子をお伝えします。
この日のキーノートであったPythonの高速化についての深い話や,
キーノート:Python Performance: Past, Present and Future ―Victor Stinner
Victor Stinner氏はRed Hatで働いており,
過去
CPython
- 1997:Jython
- 1998:Stackless Python
- 2006:IronPython
- 2014:MicroPython
そしてPythonを高速化するプロジェクトとして,
- 2002-2012:psyco
(Armin Rigo) - 2007:PyPy
- 2009-2010:Unladen Swallow
(Google) - 2014-2017:Pyston
(Dropbox) - 2016-2017:Pyjion
(Microsoft)
Pythonを高速化するには,
ここからは,
- Unladen Swallow
(2011) - Googleのプロジェクト。多くのGoogleのPythonコードではパフォーマンスは重要な問題ではないため終了。
- Pyston
(2017) - Dropboxのプロジェクト。パフォーマンスに関するコードはGoのような他の言語に切り替えた。互換性の維持に多くの時間を割いた。
現在
PyPyはCPythonと置き換え可能で,
次に,
別の解決策としてCythonも紹介されていました。CythonはC拡張をPythonと似た言語で簡単に記述する方法です。複数のPythonバージョンで動作します。
NumbaはPythonとNumPyの一部処理をJITで高速化するツールです。GPUなどを使用して高速化が可能です。
また,
未来
今後のPythonのパフォーマンス向上についていくつか紹介されていました。
現在のC APIにはいくつか課題があるため,
CPythonのGCをTracing GCに変更するそうです。Tracing GCは多くのモダンなプログラミング言語やPyPyで採用されています。ただし,
サブインタープリタはPEP 554 -- Multiple Interpreters in the Stdlibで提案されたものです。1つのCPythonプロセスの中で複数のインタープリターを動作させることにより,
Pythonは遅いとよく言われますが,
The Story of Features Coming in Python 3. 8 and Beyond ―Andrey Vlasovskikh
Andrey Vlasovskikh氏
話のメインとなるPytnon 3.
まずはPEP 572 -- Assignment Expressionsです。PEP 572は以下のように:=
という演算子で代入式を実現します。
>>> if m := re.search('[abc]', 'spam'):
>>> print(m.group())
a
このPEP,x := expr
ではなく(expr as x)
という書き方で提案されていたそうです。全体を()
で囲んで変数がサブローカルスコープになるという複雑なものだったが,
また,
次に紹介したのはPEP 570 -- Python Positional-Only Parametersです。これは関数をdef pow(x, y, z=None, /):
のように定義すると/
の前の引数は位置指定しかできなくなります(``pow(x=10, y=20)と呼ぶとエラーになります)。なぜ区切り記号が/
なのかというと,
また,Protocol
,Literal
,Final
,TypedDict
が紹介されました。新しいTypeはGitHubの/python/
Python 3.
Python 3.
- 発表スライド:The Story of Features Coming in Python 3.
8 and Beyond この日の帰りにAndreyに声をかけたことろ,
私のことを覚えてくれていました。PyCon JP 2016のトートバッグがノートPC入れにちょうどいいらしく, 愛用しているそうです (この日も肩から下げていました)。 「またどこかのPyConで会いましょう」 と話して別れました。 A selfie with a @PyConJ organizer @takanory at #EuroPython. I enjoyed speaking at PyCon Japan 2016 and felt welcome there. Thank you my friends at Japan! Hope to see you one day at @PyConRU or @PyConBY :) pic.
— Andrey Vlasovskikh (@vlasovskikh) July 12, 2019twitter. com/ tug7O3m8Rp