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はどうやって動くのか / Python How to Work
Search
kaityo256
PRO
December 13, 2022
Education
6
9.3k
Pythonはどうやって動くのか / Python How to Work
プログラミング基礎同演習10
kaityo256
PRO
December 13, 2022
Tweet
Share
More Decks by kaityo256
See All by kaityo256
生成AIとの付き合い方 / Generative AI and us
kaityo256
PRO
11
3.7k
モンテカルロ法(3) 発展的アルゴリズム / Simulation 04
kaityo256
PRO
9
1.5k
UMAPをざっくりと理解 / Overview of UMAP
kaityo256
PRO
9
3.1k
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
7
630
論文紹介のやり方 / How to review
kaityo256
PRO
17
87k
デバッグの話 / Debugging for Beginners
kaityo256
PRO
16
1.8k
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
8
640
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.4k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
4
1.4k
Other Decks in Education
See All in Education
Introdución ás redes
irocho
0
420
20250830_本社にみんなの公園を作ってみた
yoneyan
0
150
データで見る赤ちゃんの成長
syuchimu
0
340
Портфолио - Шынар Ауелбекова
shynar
0
130
とある長岡高専卒のおっさんがIT企業のマネージャーになるまで / journey-from-nagaoka-kosen-grad-to-it-manager
masaru_b_cl
0
150
Sanapilvet opetuksessa
matleenalaakso
0
34k
Présentation_1ère_Spé_2025.pdf
bernhardsvt
0
430
尊敬語「くださる」と謙譲語「いただく」の使い分け
hysmrk
0
120
自分だけの、誰も想像できないキャリアの育て方 〜偶然から始めるキャリアプラン〜 / Career planning starting by luckly v2
vtryo
1
270
Avoin jakaminen ja Creative Commons -lisenssit
matleenalaakso
0
2k
IKIGAI World Fes:program
tsutsumi
1
2.4k
Master of Applied Science & Engineering: Computer Science & Master of Science in Applied Informatics: Artificial Intelligence and Data Science
signer
PRO
0
850
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Mobile First: as difficult as doing things right
swwweet
225
10k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
Producing Creativity
orderedlist
PRO
348
40k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
310
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Thoughts on Productivity
jonyablonski
73
4.9k
Transcript
1 24 Pythonはどうやって動くのか プログラミング基礎同演習 慶應義塾大学理工学部物理情報工学科 渡辺
2 24 Pythonが動く仕組み 抽象構文木 仮想マシンとバイトコード
3 24 Pythonが動く仕組みを知らなくてもPythonは使える ではなぜ学ぶか?→それが教養だから 電子レンジも冷蔵庫も、仕組みを知らなくても問題なく使えるが、 我々はなんとなく仕組みを知っているし、知っているべき
4 24 コンピュータは 1. メモリから命令とデータを取ってくる 2. 命令に従って演算器にデータを投げる 3. 演算器から返ってきた結果をメモリに書き戻す という処理を繰り返す
メモリ CPU 演算器 発注 製造依頼 製品 納品
5 24 整数を二つ受け取って四則演算をして返す計算機を考える 「3+4」や「8-5」という式を数字で表現 演算方法を数字で表現する 0 + 1 - 2
× 3 ÷ 命令表(オペコード) 例えば「3+4」は「0,3,4」、「8-5」は「1,8,5」で表す 0 3 4 opcode operand 何をするか データ
6 24 0 3 4 1 8 5 メモリ メモリから命令とデータを取ってくる
0 3 4 opcode operand 命令表を見て、どの演算 器に投げるか決める 加算器 減算器 乗算器 除算器 3 4 0 + 1 - 2 × 3 ÷ 命令表(オペコード) 0
7 24 機械語は数字の羅列 コンピュータは機械語しか理解できない 「3+4」は「0,3,4」という数字列で表現 機械語 (Machine Language) アセンブリ言語 (Assembly
Language) 「0,3,4」が「3+4」というのは分かりづらい 機械語と一対一対応する形でわかりやすく 0 3 4 opcode operand ADD 3,4 アセンブラ ※ 実行バイナリ作成にはリンカも必要
8 24 ADD 3,4 アセンブリ言語 (Assembly Language) ではまだわかりづらい 機械語はCPUによって異なる →
アセンブリ言語もCPUによって異なる → 人間にわかりやすい形、かつ共通な書き方をしたい プログラム言語 (Programming Language) 3+4 人間がわかりやすい形で書く ADD 3,4 アセンブリに変換 機械語に変換 0,3,4 ここの変換を行うのがコンパイラ アセンブラ
9 24 「3+4」を「ADD 3, 4」に変換したい・・・どうやって? 字句解析 "3 + 4" プログラムを意味のある最小単位(トークン)にバラす
3 + 4 数 加算記号 数 構文解析 トークンの関係を解析する 3 + 4 3 + 4 抽象構文木(Abstract Syntax Tree, AST)
10 24 プログラム 抽象構文木 Abstract Syntax Tree, AST アセンブリ言語 Assembly
Language 機械語 Machine Language 人間が読める 計算機が読める コンパイラ 0 3 4 opcode operand 字句解析 構文解析 意味解析 etc. "3 + 4" 3 + 4 ADD 3,4 Programming Language
11 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST
3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 人間が読める パーサ 仮想マシン Virtual Machine, VM インタプリタ 計算機が読める 3 + 4 "3 + 4"
12 24 "3 + 4" LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD
プログラム バイトコード 仮想マシン バイトコード 仮想マシン 仮想的なコンピュータの動作をエミュレートするもの スタックマシンの形を取ることが多い 仮想マシンのためのアセンブリ言語 プログラムの中間表現
13 24 荷物置き場が一つだけあり ・一番上に積む(push) ・一番上から取り出す(pop) ことしかできないデータ構造 push pop 途中にデータを挿入する ことはできない
途中のデータを 取り出すこともできない ※荷物は重いので一度に一つしか持てない
14 24 メモリとしてスタックを使う仮想マシン "3 + 4" LOAD_CONST 3 LOAD_CONST 4
BINARY_ADD プログラム バイトコード スタックに3を積む スタックに4を積む スタックの上二つを足す スタックマシンでの動作
15 24 LOAD_CONST 3 3 push LOAD_CONST 4 4 push
3 3 4 3 4 BINARY_ADD 3 4 pop 4 3 + = 7 7 push 7 3 4 pop
16 24 "3 + 4" LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD
プログラム (中置記法) バイトコード 逆ポーランド記法 (後置記法) 3 4 + 演算子を、被演算子の後ろに置く記法
17 24 演算子でないものはスタックに積む (二項)演算子が来たら、スタックの上から二つ取り出し、演算結果を積む 逆ポーランド記法の読み方 3 4 + 3をスタックに積む 4をスタックに積む
+ スタックから二つ取り出して加算 LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD スタックマシンのバイトコードは逆ポーランド記法で記述されている
18 24 a b * c + a * b
+ c 中置記法 逆ポーランド記法 a push b push a a b ab ab c push ab c a b ab c ab+c ab+c BINARY_MULTIPLY BINARY_ADD
19 24 a b c * + a + b
* c 中置記法 逆ポーランド記法 a push b push a a b c push a b c b c a a bc a bc a+bc a+bc BINARY_MULTIPL Y BINARY_AD D
20 24 なくて良い 別に ・Pythonではプログラムを抽象構文木に、さらに バイトコードに変換し、仮想マシン上で実行する ・バイトコードは仮想的なコンピュータのアセンブリ ・Pythonの仮想マシンはスタックマシン ・スタックマシンと逆ポーランド記法は相性が良い
21 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST
3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 3 + 4 "3 + 4" ここを確認する
22 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST
3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 3 + 4 "3 + 4" ここを確認する
23 24 スタックマシンで計算機を実装する プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード
LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 仮想マシン Virtual Machine, VM 計算機が読める 3 + 4 "3 + 4" ここを作る
24 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST
3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 仮想マシン Virtual Machine, VM 計算機が読める 3 + 4 "3 + 4" ここを作る 中置記法 逆ポーランド記法 3 + 4 3 4 + a + b x c a b c * +