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
9.5k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonはどうやって動くのか / Python How to Work
プログラミング基礎同演習10
kaityo256
PRO
December 13, 2022
More Decks by kaityo256
See All by kaityo256
勾配ブースティングと決定木の話 / gradient boosting and decision trees
kaityo256
PRO
6
1.3k
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.7k
この講義について / 00-setup
kaityo256
PRO
2
400
GitHubによるWebアプリケーションのデプロイ / 07-github-deploy
kaityo256
PRO
2
320
演習:Gitの基本操作 / 04-git-basic
kaityo256
PRO
1
540
演習:Gitの応用操作 / 05-git-advanced
kaityo256
PRO
1
310
演習:GitHubの基本操作 / 06-github-basic
kaityo256
PRO
1
380
バージョン管理とは / 01-a-vcs
kaityo256
PRO
1
360
Gitの仕組みと用語 / 01-b-term
kaityo256
PRO
1
430
Other Decks in Education
See All in Education
JAWS-UG初心者支部#81 GWにEduJAWSと何か作ろうもくもく会!
otsuki
0
130
Why the humanities may be your best career bet
figarospeech
0
200
Virtual and Augmented Reality - Lecture 8 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
2.3k
Visionary Initiative: Materials-Positive Society 「モノの進化をポジティブな社会の原動力に」|Science Tokyo(東京科学大学)
sciencetokyo
PRO
0
380
教育現場から見た Ruby on Rails
yasslab
PRO
0
170
0513
cbtlibrary
0
190
2026年度春学期 統計学 第5回 分布をまとめるー記述統計量(平均・分散など) (2026. 5. 7)
akiraasano
PRO
0
140
良い塩梅を実現する、AWSネットワーク3分クッキング
masakiokuda
1
260
現場最前線から教えるデータサイエンス1 -ITベンダーにおけるデータサイエンティスト-
hidetoshikawaguchi
0
110
輻射安全管理系統2.0暨輻防e++學園平台說明會
aecrp
0
240
Visionary Initiative: Future Intelligence 「未来の知性と社会の礎を築く」|Science Tokyo(東京科学大学)
sciencetokyo
PRO
0
300
モブ社員がモブエンジニアを名乗って得られたこと_20260413
masakiokuda
4
520
Featured
See All Featured
New Earth Scene 8
popppiees
3
2.3k
Designing for Performance
lara
611
70k
Paper Plane (Part 1)
katiecoart
PRO
0
8.8k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
770
Designing for Timeless Needs
cassininazir
1
250
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
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 * +