Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Preferred Networks
15,525 views
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
PFIセミナー 2016/04/28
Technology
◦
Read more
14
Save
Share
Embed
Embed presentation
Download
Downloaded 49 times
1
/ 30
2
/ 30
3
/ 30
4
/ 30
5
/ 30
6
/ 30
7
/ 30
8
/ 30
9
/ 30
10
/ 30
Most read
11
/ 30
12
/ 30
13
/ 30
14
/ 30
Most read
15
/ 30
16
/ 30
Most read
17
/ 30
18
/ 30
19
/ 30
20
/ 30
21
/ 30
22
/ 30
23
/ 30
24
/ 30
25
/ 30
26
/ 30
27
/ 30
28
/ 30
29
/ 30
30
/ 30
More Related Content
PDF
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
PPTX
DockerコンテナでGitを使う
by
Kazuhiro Suga
PDF
例外設計における大罪
by
Takuto Wada
PDF
Marp Tutorial
by
Rui Watanabe
PDF
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
PDF
SAT/SMTソルバの仕組み
by
Masahiro Sakai
PDF
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
DockerコンテナでGitを使う
by
Kazuhiro Suga
例外設計における大罪
by
Takuto Wada
Marp Tutorial
by
Rui Watanabe
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
SAT/SMTソルバの仕組み
by
Masahiro Sakai
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
マイクロにしすぎた結果がこれだよ!
by
mosa siru
What's hot
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
PDF
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
by
Yahoo!デベロッパーネットワーク
PDF
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
by
MITSUNARI Shigeo
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
PDF
すごい constexpr たのしくレイトレ!
by
Genya Murakami
PDF
最適化超入門
by
Takami Sato
PDF
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
by
naoki koyama
PDF
Twitterのsnowflakeについて
by
moai kids
PDF
マイクロサービスバックエンドAPIのためのRESTとgRPC
by
disc99_
PDF
Pythonによる黒魔術入門
by
大樹 小倉
PDF
こわくない Git
by
Kota Saito
PPTX
冬のLock free祭り safe
by
Kumazaki Hiroki
PDF
Java8でRDBMS作ったよ
by
なおき きしだ
PDF
組合せ最適化入門:線形計画から整数計画まで
by
Shunji Umetani
PDF
Linux女子部 systemd徹底入門
by
Etsuji Nakai
PPTX
Tensor コアを使った PyTorch の高速化
by
Yusuke Fujimoto
PDF
明日使えないすごいビット演算
by
京大 マイコンクラブ
PPTX
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
by
Shota Imai
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
オブジェクト指向できていますか?
by
Moriharu Ohzu
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
by
Yahoo!デベロッパーネットワーク
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
by
MITSUNARI Shigeo
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
すごい constexpr たのしくレイトレ!
by
Genya Murakami
最適化超入門
by
Takami Sato
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
by
naoki koyama
Twitterのsnowflakeについて
by
moai kids
マイクロサービスバックエンドAPIのためのRESTとgRPC
by
disc99_
Pythonによる黒魔術入門
by
大樹 小倉
こわくない Git
by
Kota Saito
冬のLock free祭り safe
by
Kumazaki Hiroki
Java8でRDBMS作ったよ
by
なおき きしだ
組合せ最適化入門:線形計画から整数計画まで
by
Shunji Umetani
Linux女子部 systemd徹底入門
by
Etsuji Nakai
Tensor コアを使った PyTorch の高速化
by
Yusuke Fujimoto
明日使えないすごいビット演算
by
京大 マイコンクラブ
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
by
Shota Imai
Similar to Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
by
shoma h
PPTX
Polyphony の行く末(2018/3/3)
by
ryos36
PDF
Pythonによる機械学習の最前線
by
Kimikazu Kato
PDF
Wrapping a C++ library with Cython
by
fuzzysphere
PPTX
Django_Fukuoka
by
Shuya Motouchi
PPTX
天気予報ガジェットを作りな がら、Pythonを勉強しよう
by
Hiroki Yato
PDF
Pynq祭り資料
by
一路 川染
PDF
Python physicalcomputing
by
Noboru Irieda
PDF
PyPy 紹介
by
shoma h
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
by
Takanori Suzuki
PDF
「Python言語」はじめの一歩 / First step of Python
by
Takanori Suzuki
PDF
Pyconjp2014_implementations
by
masahitojp
PDF
Django_fukuoka
by
ShuyaMotouchi1
PPT
Python languageupdate (2004)
by
泰 増田
PPTX
Wacode5thでのpython講義資料
by
丈 宮本
PDF
Python Kyoto study
by
Naoya Inada
PDF
LLdeade Python Language Update
by
Atsushi Shibata
PDF
DATUM STUDIO PyCon2016 Turorial
by
Tatsuya Tojima
ODP
Introduction of Python
by
Tomoya Nakayama
PPTX
数値計算のための Python + FPGA
by
ryos36
次世代言語 Python による PyPy を使った次世代の処理系開発
by
shoma h
Polyphony の行く末(2018/3/3)
by
ryos36
Pythonによる機械学習の最前線
by
Kimikazu Kato
Wrapping a C++ library with Cython
by
fuzzysphere
Django_Fukuoka
by
Shuya Motouchi
天気予報ガジェットを作りな がら、Pythonを勉強しよう
by
Hiroki Yato
Pynq祭り資料
by
一路 川染
Python physicalcomputing
by
Noboru Irieda
PyPy 紹介
by
shoma h
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
by
Takanori Suzuki
「Python言語」はじめの一歩 / First step of Python
by
Takanori Suzuki
Pyconjp2014_implementations
by
masahitojp
Django_fukuoka
by
ShuyaMotouchi1
Python languageupdate (2004)
by
泰 増田
Wacode5thでのpython講義資料
by
丈 宮本
Python Kyoto study
by
Naoya Inada
LLdeade Python Language Update
by
Atsushi Shibata
DATUM STUDIO PyCon2016 Turorial
by
Tatsuya Tojima
Introduction of Python
by
Tomoya Nakayama
数値計算のための Python + FPGA
by
ryos36
More from Preferred Networks
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
PPTX
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
by
Preferred Networks
PDF
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
by
Preferred Networks
PDF
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
by
Preferred Networks
PDF
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
by
Preferred Networks
PDF
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
by
Preferred Networks
PDF
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
by
Preferred Networks
PDF
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
by
Preferred Networks
PPTX
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
by
Preferred Networks
PDF
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
by
Preferred Networks
PDF
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
by
Preferred Networks
PDF
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
by
Preferred Networks
PDF
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
by
Preferred Networks
PDF
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
by
Preferred Networks
PDF
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
by
Preferred Networks
PDF
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
by
Preferred Networks
PDF
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
by
Preferred Networks
PDF
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
by
Preferred Networks
PDF
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
by
Preferred Networks
PDF
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
by
Preferred Networks
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
by
Preferred Networks
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
by
Preferred Networks
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
by
Preferred Networks
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
by
Preferred Networks
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
by
Preferred Networks
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
by
Preferred Networks
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
by
Preferred Networks
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
by
Preferred Networks
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
by
Preferred Networks
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
by
Preferred Networks
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
by
Preferred Networks
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
by
Preferred Networks
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
by
Preferred Networks
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
by
Preferred Networks
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
by
Preferred Networks
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
by
Preferred Networks
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
by
Preferred Networks
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
by
Preferred Networks
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
by
Preferred Networks
Recently uploaded
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
PDF
PMBOK 7th Edition Project Management Process Scrum
by
akipii ogaoga
PDF
PMBOK 7th Edition_Project Management Context Diagram
by
akipii ogaoga
PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
PDF
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
PDF
FY2025 IT Strategist Afternoon I Question-1 Balanced Scorecard
by
akipii ogaoga
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
PDF
PMBOK 7th Edition_Project Management Process_WF Type Development
by
akipii ogaoga
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
PMBOK 7th Edition Project Management Process Scrum
by
akipii ogaoga
PMBOK 7th Edition_Project Management Context Diagram
by
akipii ogaoga
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
FY2025 IT Strategist Afternoon I Question-1 Balanced Scorecard
by
akipii ogaoga
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
PMBOK 7th Edition_Project Management Process_WF Type Development
by
akipii ogaoga
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
1.
Pythonの理理解を試みる 〜~バイトコードインタプリタ を作成する〜~ 柏原秀蔵 Preferred Networks, Inc. 2016/04/28
2.
⾃自⼰己紹介 l 柏原秀蔵 (@suma90h)
(Preferred Networks) l 最近:Dockerfileは友達 l 最近の活動 – お菓⼦子作り(前回の発表と同じ写真ですが、たまに焼いてます) – 年年1回くらいバイクでツーリング&キャンプに⾏行行ってます 2
3.
去年年は佐渡島へ キャンプしたり 3
4.
去年年は佐渡島へ 登⼭山したり 4
5.
Pythonについて、実世界で役に⽴立立ちづらい話をします l 今⽇日のネタはPython – Python⾖豆知識識 –
CPythonを理理解するためにバイトコードインタプリタを作る話(本題) l ここ最近の私のセミナー発表は何かの紹介が多かった – 2015/07/09 先取り Go 1.5 – 2014/12/18 systemdを始めよう 5
6.
なぜPython? l 10年年以上使われている(メンテされ続けている)プログラミング⾔言語 l 個⼈人的に注⽬目したいソフトウェアがPythonを利利⽤用している –
Chainer (PFI/PFNによる開発) – Ansible (最近2.0出ました) u マシンの構成管理理ツール l 息が⻑⾧長い話し – Python 3が出ていても、いまだにPython 2.7も台頭している – Ubuntu 16.04ではPython 3標準であるとか 6
7.
Pythonの⾖豆知識識:クイズ l 以前、⼈人前で話したことがあるので知っている⼈人も多いかもしれません l Q:Pythonは何の⽬目的で作られたでしょう? l
解答候補 – A:テキスト処理理の⽬目的で作られた – B:分散OSのプラットフォームで使う⽬目的で作られた – C:業務時間にほかにやることがないから作られた 7
8.
Pythonの起源クイズ: クイズの答え l 正解はB:分散OSのプラットフォームで使う⽬目的で作られた l
Amoebaプロジェクト(分散OS:アンドリュー・タネンバウム先⽣生)のプラ ットフォーム向けに作られた – WikipediaやPython公式FAQにも載ってます l ちなみに他の解答の⾔言語は? – A:テキスト処理理の⽬目的で作られた – Perl。awkだと⼒力力不不⾜足だったらしい – C:業務時間にほかにやることがないから作られた – Ruby。割と有名な話し 8
9.
CPythonを理理解するために バイトコードインタプリタを 作成する 9
10.
モチベーション l プログラミング⾔言語の、コンパイラかインタプリタを作りたかった – ⾞車車輪輪の再発明でも構わない。⾃自分の学習のため l
⾔言語⾃自作は考えない。⽂文法(Syntax)考えるのが⼤大変なため l ⾔言語VM(Virtual Machine)を作って⾒見見たい気持ちもあった – コンパイラの書籍では中々解説されない部分で、知らないことが多い – Java VMやCLR(.NET Framework) → タスクとして重たすぎる – JavaScript も上と同様、また⾼高速化⾯面で重たそうな印象 – Ruby → 内部実装よく知らない、中間コードのファイル⽣生成しない – Python → バイトコード(中間コード)⽣生成するため、丁度度良良いかもしれない! u 参考にできるプログラムを発⾒見見できた(GoやPython製のインタプリタ) 10
11.
注意 l CPythonの理理解を試みた – のですが、バイトコードインタプリタの理理解が深まるばかりで、Pythonインタプ リタ(全体)の理理解については浅い気がします 11
12.
Pythonバイトコードインタプリタを作る! l バイトコードとは – 実⾏行行可能なプログラムバイナリ –
狭義にはJavaのように1バイト(8ビット)単位が命令令コード(Operation Code)だ ったためバイトコードと呼ばれる – Pythonの中間コードも1バイト単位 – 1バイト → 256通りまでの命令令を表現できる l コードリーディング – Python-‐‑‒2.7.10/Include/opcode.h では147までを定義 – Python-‐‑‒3.5.1/Include/opcode.h では154までを定義 12
13.
Pythonのフロー(いわゆるインタプリタ処理理系のフロー) l 通常は字句句解析などが必要 l フロントエンドの処理理(字句句・構⽂文解析)からバイトコード⽣生成までは CPythonに任せる作戦 –
バイトコードインタプリタ開発の場合 – バイトコードのファイル読み込み → 実⾏行行 となる 13 source (test.py) lexical analyzer 字句句解析 parser 構⽂文解析 etc execute Pythonや一般的な処理系のフロー result
14.
バイトコードインタプリタ作成の流流れ l 公式情報から作る場合、CPython本家を調査する努⼒力力が必要 – CPythonのCソースコードを読み、バイトコードインタプリタを解読する –
公式ドキュメントを読み、バイトコードの意味を把握する u http://docs.python.jp/2.7/library/dis.html l 今回はGo製のインタプリタGoPyをD⾔言語で再実装(移植)することにした – ⼀一部の命令令が実装されている l GoPyの⾏行行数 – wc -‐‑‒l *.go → 1643 ⾏行行 – 短い? 1000⾏行行くらいなら、気合いで1週間程度度で動くものが作れると判断 14
15.
なぜD⾔言語か? l バイナリファイルの扱いや、ビット演算などが簡単に書けると思った l better
C++として、C++よりも簡単にVMの実装を書けると期待した l D⾔言語初⼼心者なので、D⾔言語で1000⾏行行程度度書いてみたかった – (感想)Goと⽐比較しても、⾔言語⾃自体は書きやすく悪くない感じ – Goから移ると、公式の標準ライブラリや周辺ツールの少なさが⽬目⽴立立つ l 書籍「The D Programming Language」はわかりやすい – ただし2010年年の本なので、古い箇所がある – ライブラリ名など、修正が必要なサンプルコードもある 15
16.
Pythonバイトコード.pyc概要 l .pyc がバイトコード(中間コード)の拡張⼦子。Pythonによって⽣生成される l
file.pyとfile.pycがあったとき、file.pyc を優先して実⾏行行する – pycはタイムスタンプを持っており、.pyと⽐比較して新しい⽅方を読み込む – 参考: python -‐‑‒ When are .pyc files refreshed? -‐‑‒ Stack Overflow u http://stackoverflow.com/questions/15839555/when-‐‑‒are-‐‑‒pyc-‐‑‒files-‐‑‒ refreshed l pycはいつ⽣生成されるのか – importで他のファイルの.pyを読み込んだとき – pythonで –m compileall もしくは –m py_̲compile オプションで実⾏行行されたとき l pycの効果 – ファイル読み込みのキャッシュの効果 – プログラム実⾏行行が⾼高速になるわけではない! 16
17.
Pythonバイトコード.pyc内容 l ローカル変数の数、スタックのサイズ、フラグ、命令令コード…など l Python-‐‑‒2.7.10/Include/code.h
の PyCodeObject構造体が実体 – https://hg.python.org/cpython/file/2.7/Include/code.h#l10 l pycファイルのバイナリ読み込みにあたって – 数値はリトルエンディアンで格納されている – 16/32ビット数値、⽂文字列列(もしくはバイナリ) – ※ バイナリのパースについては複雑なので⾶飛ばします l このデータをもとにVM(バイトコードインタプリタ)が⾛走ることになる – Pythonのバイトコードインタプリタはスタックマシン型 – Opode: https://hg.python.org/cpython/file/2.7/Include/opcode.h 17
18.
スタックマシン型のVM、Pythonのインタプリタとは? l ⼀一般的なスタックマシンの解説(省省略略します) – https://ja.wikipedia.org/wiki/スタックマシン –
https://en.wikipedia.org/wiki/Stack_̲machine – 例例: Java VMやCLR(.NET Framework)のVMでもスタックマシンが採⽤用 l Pythonでは(例例) – BINARY_̲ADD: スタック上のトップ2つの値をPopして加算し、スタックにPushする – LOAD_̲NAME: 指定された名前の変数の値をスタックにPushする – STORE_̲NAME: スタック上のトップ1つの値をPopし、指定した名前の変数へ格納する – http://docs.python.jp/2.7/library/dis.html 18
19.
バイトコードインタプリタ開発の記録 l ⽇日記と⾏行行数の記録を書いていた – ⽇日記はそのままコピペします l
数⾏行行のコメントと、twitterで⾏行行数(進捗)をつぶやく 19
20.
バイトコードインタプリタ開発の記録 l 2016/04/20 –
D⾔言語まともに書き始めた 20
21.
バイトコードインタプリタ開発の記録 l 2016/04/21 – pycのパーサ書いた、途中で4バイト読み込みするのが抜けたバグではまった。
– printfデバッグして⽐比較最中、⾜足りない箇所が発覚して無事解決。 – PyTupleとか基本データ型を実装。attributeとかは⾶飛ばした。後で実装する。 – Bytecodeのopcodeのswitchを書くところまで進んだ。 21
22.
バイトコードインタプリタ開発の記録 l 2016/04/21 アクシデントも – D⾔言語の標準ライブラリにStackがない! –
→ kinabaさんのウェブサイトにあったコードを借りてしのいだ 22
23.
バイトコードインタプリタ開発の記録 l 2016/04/22 – Opcodeのインタプリタを作成中
– 加減乗算あたりの基礎を実装 23
24.
バイトコードインタプリタ開発の記録 l 2016/04/24 – STORE_̲NAMEの名前取得がバグってた 24
25.
バイトコードインタプリタ開発の記録 l 2016/04/25 – 関数定義と関数呼び出し(引数有り・無し)ができるようになった 25
26.
デモ l GoPy付属のテスト⽤用スクリプト – 組み込みモジュールtimeのtime.time()から、Unix
timeを取得する – 同⼀一ファイル内の関数を呼び出す l 今回作成したテスト⽤用のスクリプト – 数値の演算(加減算)をして、printする 26
27.
Pythonを理理解できたであろうか? l Pythonの理理解は深まったのか? という問い – ⼀一部機能などに関して個⼈人的に深まったと⾔言える。しかし、広く伝えるのは難しい –
pycの16進数/ASCIIダンプやopcodeを⾒見見て⼀一部の命令令が解読できるようになった l バイトコードインタプリタ作成を通じて得られたもの – Pythonのような⾔言語のバイトコードインタプリタの実装⽅方法の知⾒見見 – D⾔言語でのちょっとしたスタックマシン型VMの開発経験(D⾔言語良良かった) – Pythonのfunctionなどがどんな実体で管理理されてるか知る機会となった – Pythonで `̀type(funcname)`̀ とすると関数はオブジェクトだとわかる l 注意: インタプリタが作れるからといって、Python⾔言語そのものに 詳しくなれるとは限らない! 27
28.
よりPythonを知るには(実装という意味で) l CPythonをはじめとし、⾔言語の実装の各⽅方⾯面からアプローチすると良良さそう – ⾔言語の⽂文法を知る・使い⽅方を知る –
組み込みの標準機能(標準のデータ型)や構⽂文(ifやforなど)の実装を知る – 標準のランタイムライブラリを知る – 処理理系(CPythonならバイトコードインタプリタ)にあわせた実⾏行行⽅方法を知る l よりディープな所に触れる – マルチスレッドの実装 – GIL(Global Interpreter Lock) – GC(Garbage Collection) – CPythonのC拡張 28
29.
参考 l https://github.com/flosch/GoPy l https://github.com/nedbat/byterun l
http://akaptur.com/blog/2013/11/15/introduction-‐‑‒to-‐‑‒the-‐‑‒python-‐‑‒ interpreter/ 29
30.
Copyright © 2016 Preferred
Networks All Right Reserved.
Download