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で爆速でHello, World!する
Search
AnaTofuZ
May 24, 2025
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonで爆速でHello, World!する
https://shingenpy.connpass.com/event/353887/
でのLTです
AnaTofuZ
May 24, 2025
More Decks by AnaTofuZ
See All by AnaTofuZ
Perl GraphQL 高速化バトル 2026年5月版
anatofuz
0
42
k1LoW/deckのすすめ
anatofuz
2
700
Perl1.0 Deep Drive 0.01
anatofuz
0
210
Rubyの国のPerlMonger
anatofuz
3
1.7k
思いつきで推しの誕生日記念コンテンツを2日で作る技術
anatofuz
0
190
AWSで雰囲気でつくる! VRChatの写真変換ピタゴラスイッチ
anatofuz
0
510
令和最新版 Perlコーディングガイド
anatofuz
5
11k
rakulangで実装する! RubyVM
anatofuz
6
5.3k
沖縄の大学で育った学生がエンジニアになるまで
anatofuz
2
6.9k
Other Decks in Technology
See All in Technology
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
120
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
110
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
2.2k
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
720
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
720
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
270
EventBridge Connection
_kensh
5
690
Microsoft Build Keynoteふりかえり
tomokusaba
0
120
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
720
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
580
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
370
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
3
600
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Building Adaptive Systems
keathley
44
3k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
170
ラッコキーワード サービス紹介資料
rakko
1
3.6M
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
How STYLIGHT went responsive
nonsquared
100
6.2k
Chasing Engaging Ingredients in Design
codingconduct
0
220
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Marketing to machines
jonoalderson
1
5.4k
Transcript
Python で爆速でHello, World! する 八雲アナグラ(@AnaTofuZ) 2025/05/24 [Shingen.py] Python で学ぶKeycloak を用いた
ユーザー管理ハンズオン 1
pprint(self) 八雲アナグラ(@AnaTofuZ) 普段はRuby 、趣味でPerl 、たまにPython 使って ます 甲府でエンジニアっぽいイベント開催しようと してます Houtou.pm
( なんでも) Kofu.rb (Ruby) 好きなモジュールはBeautifulSoup4 です 2
Houtou.pm 来週のこの時間!! きてくれ!! サーバーレス使わずにVPS とCDN でアプリ組んだ場合のモダンな 構成について話します “ “ #houtoupm
では、純粋関数とワークフローオートメーションの蜜 月についてトークする予定です “ “ 3
️: Python でHello, World! したことあ るひと 4
Python でHello, World! 何かしらのエディタで開いて print("Hello, World!") 5
Python でHello, World! 完 6
Python で爆速でHello, World! する 7
Hello, World まで print("Hello,World") をpython が処理するまでにはいくつかのステ ップがある 字句解析 構⽂解析 VMが実⾏
Hello, World! 8
Hello, World まで 字句解析 print , Hello,World などのトークンに分解 構文解析 トークンの並びをPython
で意味があるデータに変換 実行 PythonVM が構文解析のデータを元に命令を実行 字句解析 構⽂解析 VMが実⾏ Hello, World! 9
Python の内部処理 print("Hello, World") は実際はこんな感じのPythonVM の命令にな る ❯ python -m
dis hello.py 0 0 RESUME 0 1 2 PUSH_NULL 4 LOAD_NAME 0 (print) 6 LOAD_CONST 0 ('Hello, world!') 8 CALL 1 16 POP_TOP 18 RETURN_CONST 1 (None) 10
改めて処理を確認すると いわゆる python のCPython は全部分がC で書かれている つまりPython のコードは実際はC で書ける Hello,
World! するだけなら別に構文解析とかする必要もない オブジェクトを作ってprint すればいいだけなので、PythonVM の 命令も短縮できるのでは 11
CPython をいじる CPython のメインルーチンで最初からC でPython の print("Hello,World!") を書く ️ 爆速
字句解析 構⽂解析 VMが実⾏ Hello, World! 12
爆速Hello, World! 専用Python を作る 1. https://github.com/python/cpython を git clone 2.
パッチを書く 3. ./configure デバッグしたいなら ./configure CFLAGS="-O0 -g" あたり 4. make -j 5. ./python して Hello, World! が出れば勝ち 13
起動時の状態で処理を切り分けている箇所にパッチをいれる static void pymain_run_python(int *exitcode) { ... pymain_header(config); _PyInterpreterState_SetRunningMain(interp); assert(!PyErr_Occurred());
if (config->run_command) { *exitcode = pymain_run_command(config->run_command); } else if (config->run_module) { *exitcode = pymain_run_module(config->run_module, 1); } else if (main_importer_path != NULL) { *exitcode = pymain_run_module(L"__main__", 0); } else if (config->run_filename != NULL) { *exitcode = pymain_run_file(config); } else { *exitcode = pymain_run_stdin(config); } pymain_repl(config, exitcode); goto done; 14
Hello, World! を用意する PyUnicode_FromString で文字列からPython のオブジェクトを作れる 今回は簡単のために文字列に直接改行文字をいれておく PyObject *py_str =
PyUnicode_FromString("Hello, World!\n"); if (py_str == NULL) { PyErr_Print(); Py_Finalize(); goto error; } 15
PyObject を書き込む PyObject_Print でC のファイルポインタにオブジェクトの内容を書 き込める stdout を指定してあげると print っぽくなる
int res = PyObject_Print(py_str, stdout, Py_PRINT_RAW); if (res < 0) { PyErr_Print(); goto error; } Py_DECREF(py_str); Py_Finalize(); 16
Python のI/O システムを使わずにstdout に書き込んでいる print 関数を厳密にエミュレートする場合は PyFile_WriteObject などのAPI でstdout に書き込むとよい
PyObject *sys_module = PyImport_ImportModule("sys"); if (sys_module == NULL) { goto error; } PyObject *stdout_obj = PyObject_GetAttrString(sys_module, "stdout"); if (stdout_obj == NULL) { ... goto error; } PyFile_WriteObject(py_str, stdout_obj, Py_PRINT_RAW); 17
ビルドすると... ❯ ./python Python 3.15.0a0 (heads/shingenpy-dirty:557ea496425, Jan 1 1980, 00:00:00)
[GCC 14.2.1 20250322] on linux Type "help", "copyright", "credits" or "license" for more information. Hello, World! 無事Hello,World! がでた!!! 18
まとめ python で Hello, World! した CPython のAPI 意外と怖くない 19