Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonを読む
Search
tera
August 27, 2017
Technology
0
220
Pythonを読む
第9回 HojiroLTで話したスライドです。
tera
August 27, 2017
Tweet
Share
More Decks by tera
See All by tera
ピッてやるとシュッてなるやつを作った話
tera
0
260
importを理解したかった
tera
0
660
RustでShell作ろう
tera
0
940
HTTPをしゃべろう~Firefoxになるために~
tera
0
250
Other Decks in Technology
See All in Technology
20260320_JaSST26_Tokyo_登壇資料.pdf
mura_shin
0
130
Navigation APIと見るSvelteKitのWeb標準志向
yamanoku
2
110
AIエージェント勉強会第3回 エージェンティックAIの時代がやってきた
ymiya55
0
130
GitHub Copilot CLI で Azure Portal to Bicep
tsubakimoto_s
0
200
BFCacheを活用して無限スクロールのUX を改善した話
apple_yagi
0
120
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
250
Phase02_AI座学_応用
overflowinc
0
3k
スピンアウト講座04_ルーティン処理
overflowinc
0
1.3k
スピンアウト講座06_認証系(API-OAuth-MCP)入門
overflowinc
0
1.2k
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
140
やさしいとこから始めるGitHubリポジトリのセキュリティ
tsubakimoto_s
2
1.6k
「お金で解決」が全てではない!大規模WebアプリのCI高速化 #phperkaigi
stefafafan
5
2.3k
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
[SF Ruby Conf 2025] Rails X
palkan
2
860
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
150
Code Reviewing Like a Champion
maltzj
528
40k
Amusing Abliteration
ianozsvald
0
140
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
470
So, you think you're a good person
axbom
PRO
2
2k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
420
Site-Speed That Sticks
csswizardry
13
1.1k
Transcript
Pythonを読む
自己紹介 https://tera3939.github.io/
お話の流れ • CPythonのソースに挑む • 一旦C拡張について眺めてみる • もう一回挑んでみる
CPythonのソースに挑む
CPythonとは • Pythonの処理系には様々な種類がある ◦ pypy ◦ IronPython ◦ etc... •
その中でも最も有名なのがCPython • C言語で実装されている • ”Python”とだけかかれている場合は概ねCPythonのことを指す
ソースコードを手に入れる • GitHubからcloneしてくる ◦ git clone https://github.com/python/cpython.git • ディレクトリ内はこんな感じ
方針を立てる • 今回はビルトインのintについて見にいきたい • でも、どこを読めばいい?
intの場所を探す • Python Developer’s Guide 24.1 ◦ https://docs.python.org/devguide/exploring.html • ここにCPythonのソースのレイアウトが書いてある
ソースを眺める • Object/intobject.cとかある? → 無い…… • とりあえずPython/bltinmodule.cを眺めてみる
None
それっぽいのはあるけど…… • よくわかんない
C拡張について眺めてみる
CによるPythonの拡張 • Pythonインタプリタの拡張と埋め込み ◦ https://docs.python.jp/3/extending/index.html • Python/C API リファレンスマニュアル ◦
https://docs.python.jp/3/c-api/index.html
モジュール作成に必要な関数・構造体 • PyMethodDefの配列 ◦ メソッドテーブル ◦ メソッド名とメソッドへの関数ポインタ • PyModuleDef ◦
モジュール名、ドキュメント、メソッドテーブルの参照を持つ • PyMODINIT_FUNC PyInit_<modulename> ◦ <modulename> == PyModuleDefで定義したメソッド名 ◦ 事実上の__init__.py
型作成に必要な構造体 • 型自体の構造体 ◦ フィールドを持つ • PyTypeObject ◦ 型名、__hoge__メソッドとなる関数のポインタを持つ •
PyModuleDef • PyInit_<modulename> ◦ このInitがいつ呼ばれるかは謎 (たすけて) ◦ たぶんインポートされるとき ……
これさえ分かればどうにかなる!(???)
もう一度CPythonのソースに挑む
読んだ!
結果 • intはObjects/longobject.cに書いてある • -5~256の範囲の整数はsmall_intsという配列にキャッシュされている • その範囲内の整数は対応するsmall_intsのポインタを返す • そのためis演算子でその範囲の整数を比較するとTrueを返す ◦
a = 1; b = 1; a is b # -> True ◦ a = 500; b = 500; a is b # False
おわり