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
モンテカルロ法(3) 発展的アルゴリズム / Simulation 04
kaityo256
PRO
8
1.4k
UMAPをざっくりと理解 / Overview of UMAP
kaityo256
PRO
5
2.4k
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
6
550
論文紹介のやり方 / How to review
kaityo256
PRO
16
85k
デバッグの話 / Debugging for Beginners
kaityo256
PRO
13
1.6k
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
8
590
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
15
5.4k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
3
1.3k
論文の読み方 / How to survey
kaityo256
PRO
224
180k
Other Decks in Education
See All in Education
人になにかを教えるときに考えていること(2025-05版 / VRC-LT #18)
sksat
5
1.1k
Data Management and Analytics Specialisation
signer
PRO
0
1.4k
2025年度春学期 統計学 第13回 不確かな測定の不確かさを測る ー 不偏分散とt分布 (2025. 7. 3)
akiraasano
PRO
0
120
Pydantic(AI)とJSONの詳細解説
mickey_kubo
0
180
新卒研修に仕掛ける 学びのサイクル / Implementing Learning Cycles in New Graduate Training
takashi_toyosaki
1
220
OJTに夢を見すぎていませんか? ロールプレイ研修の試行錯誤/tryanderror-in-roleplaying-training
takipone
1
220
ARアプリを活用した防災まち歩きデータ作成ハンズオン
nro2daisuke
0
160
RSJ2025 ランチョンセミナー 一歩ずつ世界へ:学生・若手研究者のための等身大の国際化の始め方
t_inamura
0
210
American Airlines® USA Contact Numbers: The Ultimate 2025 Guide
lievliev
0
250
核燃料政策を問う─英国の決断と日本
hide2kano
0
180
(2025) L'origami, mieux que la règle et le compas
mansuy
0
130
Case Studies and Course Review - Lecture 12 - Information Visualisation (4019538FNR)
signer
PRO
1
2.1k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
How to Ace a Technical Interview
jacobian
279
23k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Making Projects Easy
brettharned
117
6.4k
Navigating Team Friction
lara
189
15k
GitHub's CSS Performance
jonrohan
1032
460k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
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 * +