カンファレンスDay 1

オープニング

カンファレンスのオープニングです。 カンファレンスのChairからあいさつなどがありました。 「初めてEuroPythonに参加した人?」という呼びかけには、半分くらいの人が手を上げていたようです。 多いですね。

../_images/opening.jpg

オープニング

プログラムチームからはキーノートなどの紹介がありました。 また、オープンスペースとライトニングトークの申し込みがWebフォームになったというアナウンスがありました。 PyCon US同様ここにも電子化の波が!

../_images/keynotes.jpg

5名のキーノートスピーカー

Keynote: Savannah Bailey

最初のキーノートはSavannah Bailey氏による「You don’t have to be a compiler engineer to work on Python」です。 日本語にすると「コンパイラのエンジニアじゃなくてもPythonに携わることができる」といった感じでしょうか。

../_images/savannah.jpg

Savannah Bailey氏

Savannah氏は2020年頃プロダクトマネージャーとして働いていました。自身の所属するチームがLanguage Serverなどをやっており、その頃にPythonの動作を学んだそうです。 また、チームとしてはtypeshed[1]に貢献していたそうです。

Pythonへの貢献としてはCPythonのインタプリターを開発する作業もありますが、それ以外にも以下のような細かい作業も大事だという話をしていました。

  • issueのトリアージ:重要な課題をとりあげたり、そうでもない課題や重複している課題を閉じたりする作業

  • 公式ドキュメントの更新:typoの修正や翻訳など

  • テストカバレッジの改善

  • 標準ライブラリへの貢献:Pythonで実装されているものが多く、Cの知識が不要

このように、CPythonのインタープリターがどのように動作しているかを知らなくても、Pythonに貢献できるということが語られました。 興味があれば、学びながら貢献ができます。 実際にSavannah氏もできるところからCPythonへの貢献をはじめたそうです。

地道な貢献が評価され、Savannah氏をCPythonのコア開発者チームのメンバーにする提案が2024年11月に行われ、賛成多数によりSavannah氏はコア開発者の一人となりました。

また、自身にDevOpsの経験があるため、CPythonのJITありバージョンのCI/CDやビルドについて貢献し、さらに、PEP 774の作者としてJITのビルドについて提案をしています。

また、Savannah氏はPython 3.16と3.17のリリースマネージャーとなるそうです。 すごい活躍です。

Savannah Bailey氏からは貢献をはじめるためのツールキットとして、以下が示されました。

  • github.com/python/cpython:CPythonのリポジトリ、issueの確認、PRの提出、コードの参照ができる

  • peps.python.org:Pythonの大きな変更を提案、説明するドキュメント

  • discuss.python.org:機能、ガバナンス(管理方法)、パッケージングやアイデアに関してハイレベルな議論が行われる場所

  • devguide.python.org:貢献をはじめるための必要なドキュメント一式。セットアップ、ツール、トリアージの手順、テストなど

まさに、コンパイラのエンジニアじゃなくてもCPythonの開発に携わって貢献できるということを、Savannah氏自身が体現していると感じました。 筆者自身もできるところから貢献をはじめられるかも知れないと感じる、とても印象的なキーノートでした。

Exploring the CPython JIT

スピーカーのDiego Russo氏はCPythonへ2年、CPython JITへ1年程貢献し、2025年5月からCPythonのコア開発者となったそうです。 トークの2カ月前とすごい最近ですね。

このトークでは、JITコンパイラとはどういうものか、CPythonのCopy and Patchとはどのように動作するかが説明されました。 CPythonのJITはバージョン3.13ではbuildオプションを指定する必要がありますが、3.14では実行時のオプションとなります。

CPythonのJITはインタープリターで生成されたSpecializedバイトコードを、μop(micro-op)トレース→最適化されたμopトレース→マシンコードと変換します。

../_images/diego.jpg

CPython JITでソースコードがどのようにマシンコードに変換されるか

ここからは以下のコードがどのようにバイトコード化され、JITで最適化されるかが説明されました。 また、Copy and Patchがどのようなコードで実装されているかの例も示されました。 とはいえ、めちゃくちゃ難しくて筆者は雰囲気を掴んだのみです。 興味のある方はぜひスライドや実際のCPythonのコードを参照してみてください。

def sum_squares(n):
	total = 0
	for i in range(n):
		total += i * i
	return total

今後の予定としてPython 3.15のJITではスタックの巻き戻しサポートスレッドセーフ化、パフォーマンス改善を行い、現在より40%高速化することを目標としているそうです。

JITが安定して動作して将来的にCPythonの標準となるのか、楽しみです。

会場にレトロゲーム

カンファレンスのロビーにはレトロゲーム機が多数展示されていました。 これはチェコのRetroHernaというプロジェクトの方々が持ち込んだもののようです。 全てのゲーム機は実際に遊ぶことが可能で、休憩時間などにゲームを楽しんでいる参加者がたくさんいました。 知っているゲーム機もありますが、まったく聞いたことがないゲーム機もたくさんありました。

../_images/virtual-boy.jpg

任天堂のバーチャルボーイ

../_images/colecovision.jpg

ColecoVision

Uncovering the magic of implementing a new Python syntax feature

このトークでは最初にPython 3.14の新しい機能、言語仕様としてt-stringが紹介されました。 t-stringはt"hello {value}"のように書きます。f-stringと似ていますが、文字列の前にtを付けます。 t-stringを記述すると、以下のようなTemplateオブジェクトが生成されます。

>>> value = "prague"
>>> t"hello {value}"
Template(
    strings=('hello ', ''),
    interpolations=(
        Interpolation('prague', 'value', None, ''),
    )
)

また、最近のPythonで追加された言語仕様として以下が紹介されました。 詳細はリンク先の公式ドキュメントやPEPを参照してください。

../_images/lysandros.jpg

Lysandros Nikolaou氏

ここからはt-stringを題材に、どのように言語仕様が追加されていくかが解説されました。 Tokenizer、Parser、Bytecode compiler、Interpreterの4段階で解説していきます。

Tokenizerはソースコード(一連の文字列)を受け取り、それを意味のある単位に分解して、トークンとして出力します。 たとえば先ほどのt"hello {value}"は以下の6つのトークンに分解されます。 Python 3.14のTokenizerではt-stringに対応するため、t"TSTRING_STARTと認識する処理などが追加されたことがわかります。

トークン[2]

内容

TSTRING_START

t"

TSTRING_MIDDLE

hello

LBRACE

{

NAME

value

RBRACE

}

TSTRING_END

"

次にParserは一連のトークンを受け取り、Python文法の規則に適合しているかを検証し、AST(Abstract Syntax Tree:抽象構文木)を構築して出力します。 t-stringの文法仕様は10. 完全な文法仕様から抜粋すると以下のように書かれています。 先ほどのトークンが以下の仕様と適合しているかを順番に見ていきます。

tstring_replacement_field:
    | '{' annotated_rhs '='? [fstring_conversion] [tstring_full_format_spec] '}' 
tstring_middle:
    | tstring_replacement_field
    | TSTRING_MIDDLE 
tstring:
    | TSTRING_START tstring_middle* TSTRING_END 

適合している場合は以下のようなASTを構築します。

../_images/ast.png

t-stringsのAST

Bytecode compilerは受け取ったASTをコンパイルし、Python VMが解釈できるバイトコードを生成します。 t-stringの例では以下のようなバイトコードが生成され、その後バイトコードの最適化が行われます。

バイトコード[3]

LOAD_CONST

“hello”

LOAD_CONST

“”

BUILD_ TUPLE

2

LOAD_NAME

value

LOAD_CONST

“value”

BUILD_INTERPOLATION

2

BUILD_TUPLE

1

BUILD_TEMPLATE

最後のInterpreterでは受け取ったバイトコードを評価します。 その結果として最初のt-stringのコード例にあったTemplate(...)が出力されます。

なんとなく聞いていたCPythonのコードが実行されるまでの流れを、段階を践んで説明してくれたので、とても解像度が上がりました。 JITの場合は、このバイトコードを生成したあとにJITの処理が入るんだなと、全体的なつながりも見えてる内容でした。

コラム:EuroPythonトーク

トークが発表2日前にアクセプトされた話

橘祐一郎(@whitphx)です。EuroPython 2025に参加し、トークもしてきました。

当初はプロポーザルを出したものの不採択で、一般参加者として参加する予定でした。 しかしカンファレンス2日前に、キャンセル待ちリストから繰り上がりでアクセプトされたのでした。 かなりバタバタしてしまいましたが、スピーカーになったおかげで、よりEuroPythonを楽しめました。

不採択通知およびキャンセル待ちリスト(Waiting List)入りの連絡は2ヶ月ほど前に来ていました。 直前にアクセプトされて困る場合は事前に取り下げておいてほしいという注意が度々ありましたが、私は取り下げずにキャンセル待ちを継続していました。

一方で、他所での発表予定はなかったため、仮に資料を作ってもEuroPythonで繰り上がらなければ無駄になってしまう状況でした。繰り上がりの可能性と資料作成のコストをざっと天秤にかけ、あまり深く考えずに資料は作らずに放置していました。 アクセプトを若干期待しつつも資料は作らないというこの矛盾した行動のせいで、後々苦しむことになりました…

現地にはカンファレンスの2日前に到着し、その日の夕方に「トークのキャンセルがあった。もしあなたのプロポーザルをアクセプトしたらトークできるか」というメールを受け取りました。 上述の通り、うっすら期待しつつも資料は作っていなかったので若干の逡巡がありつつも、取り下げずにいた責任もある上、何よりせっかくの貴重なチャンスなので、はいと返事をしました。

../_images/whitphx_badge.jpg

スピーカーになったので Speaker シールを貼る権利を獲得

ここからが大変です。 私のトークは1日目の午後で、準備期間はおよそ1日半です。 翌日(カンファレンス前日)は会場に行き、隅のソファで一日中発表の準備をしていました。 さらにその日の夜にはスピーカーを集めたディナーイベントがありました。 私も晴れてスピーカーになったので、参加できるようになったのです。 準備が数時間削られる不安はありつつも、こんな楽しそうなイベントに行かない手はありません。 スピーカーディナーを楽しみと同時に締切だと思って、日中はひたすら資料作成に集中しました。

../_images/whitphx_speakers_dinner.jpg

スピーカーディナーで他のスピーカーと飲むのも楽しみの一つ

当日(カンファレンス1日目)も発表までずっと準備をしていました。 昼休みにやっと資料が完成し、隅の方で喋りの練習を始めました。 どのパートをどの時間までに終わらせる必要があるかを確かめ、 重要な部分(特に伝えたい情報や、ストーリーの接続部分など)で大事になる言い回しを重点的に洗練させて、頭に入れていきます。

結局リハーサルは2、3回しかできずに本番を迎えましたが、なんとか時間内にやり切ることができました。 準備不足で詰め込み気味の発表でしたが、伝えたいことは伝えきれたと思います。 発表後の質疑応答では何人か手を挙げてくれ、終了後も多くの方が質問や議論をしに来てくれました。

発表自体をやりきれば、あとはカンファレンスを楽しむだけです。 やはりスピーカーになると、他の参加者との交流の機会は増えます。 前日のスピーカーディナーもそうですし、会期中はトークテーマが自分の名刺代わりになって、発表後や休み時間の雑談で話しかけてもらうネタができます。 最初の1日半だけ大変でしたが、EuroPythonを大いに楽しめました。

最後に、1日半で30分のトーク資料を作るのは本当にお勧めしません。 みなさんはもしキャンセル待ちリストに入ったら、完璧なものでなくともある程度の資料は作っておきましょう。

このときの発表資料はこちらです:Democratize serverless web AI apps for Python devs

Pythonクイズ

1日目のライトニングトークの前にPython Quizがありました。 これは各参加者がスマートフォンやPCから指定されたサイトにアクセスして、クイズに同時に挑戦するというものです。 Mentimeterというサービスを使っているようです。

../_images/quiz1.jpg

クイズに532名が参加!

素早く回答した方が高得点になるのですが、後半に進むに従ってクイズの内容がめちゃくちゃ難しくなります。 筆者の結果は236位と全然だめでした… ただ、とても楽しかったです。

ライトニングトーク

ライトニングトークは今年からWebフォームからの申し込みで、採択された人には午後に連絡が来ます。 筆者も申し込みましたが返事が来ないため落選したようです。

最初の発表では「Lessons for a Lightning Talk」と題して、ライトニングトークそのものについて話していました。 ライトニングトークをすると自分のことを知ってもらえる、一回で700名に対して自己紹介できるのでやるべきだ、という話をしていました。 私も全く同意です。

../_images/lt1.jpg

Lessons for a Lightning Talk

Pyvo

この日の夜は、チェコのローカルコミュニティ主催でPyvoというカジュアルなパーティーが行われました。 この名前はチェコ語でビールのことを”Pivo”というのにかけています。

カンファレンス会場から歩いて10分くらいにある、Na Hradbáchという屋外のビアガーデンに適当に集まってビールを飲みます。 ただ、別に貸し切りというわけではないので、誰がEuroPython参加者なのかよくわかりません。

../_images/pyvo1.jpg

Pyvoの会場の様子

PyvecとEuroPythonのサポートによりフードも多少は提供されるのですが、参加人数が多いため私も小さいハンバーガーを1つ確保するのが精一杯でした。 また、イベントの途中でDjangoのコミュニティからDjango 20周年を記念したケーキの差し入れがありました。 とてもかわいらしいケーキです。

../_images/django-cake.jpg

Django 20周年ケーキ

夜も更けると楽器を持ってきた参加者が演奏を始めてみんなで歌っていました。 なかなかカオスです。 Pyvo自体は19時くらいから始まっていて、このときは22時半頃です。 私は全種類のビールを一通り飲んだので会場を後にし、カンファレンス1日目を終えました。

../_images/pyvo.mp4

カオスなPyvo

「EuroPython & PHPers Day 2025 参加報告会」のお知らせ

EuroPython 2025に日本からの参加したメンバー4名と、ポーランドで開催されたPHPers Dayに参加したことみん氏が、それぞれの体験を語る「EuroPython & PHPers Day 2025 参加報告会」というイベントを8月26日(火)に開催します[4]。 渋谷の現地会場とオンラインのハイブリッド開催です。

海外イベントってどんな感じなんだろう、自分も挑戦してみたいなど、興味のある方はぜひ以下のページからご参加ください。 現地参加の方は終了後に懇親会もあるので、交流しましょう。