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
JavaScriptはコンパイラ型言語か?/Is JavaScript a compiled ...
Search
Akira Morikawa
September 18, 2018
Technology
2
3.1k
JavaScriptはコンパイラ型言語か?/Is JavaScript a compiled language?
JavaScriptはコンパイラ型言語か?インタプリタ型言語か?を調べてみました
#roppongijs
Akira Morikawa
September 18, 2018
Tweet
Share
More Decks by Akira Morikawa
See All by Akira Morikawa
コロナ禍だからこそ考えるオフラインコミュニティの意義 / significance of community
ariaki
0
1.8k
アウトプットの始め方/start output 20230121
ariaki
0
260
web-secure-phpcon2020
ariaki
3
3.3k
オブジェクトライフサイクルとメモリ管理を学ぼう / OOC 2020
ariaki
8
3.5k
エンジニアはアウトプットによって成長できるのか? / Grow with your output
ariaki
24
6.3k
アウトプットを始めよう / How to begin output jawsug-bgnr
ariaki
2
3.7k
参加者の安全を守れていますか? / Protecting community safety
ariaki
1
6.7k
タピオカに学ぶ二段階認証 / tapioca-mfa
ariaki
5
1.2k
古に学ぶ個人開発のススメ / My recommendation of personal development
ariaki
1
1.4k
Other Decks in Technology
See All in Technology
Autonomous Database Serverless 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
17
45k
あなたが人生で成功するための5つの普遍的法則 #jawsug #jawsdays2025 / 20250301 HEROZ
yoshidashingo
2
310
IAMのマニアックな話2025
nrinetcom
PRO
6
1.2k
事業モメンタムを生み出すプロダクト開発
macchiitaka
0
100
クラウド食堂とは?
hiyanger
0
120
AIエージェント入門
minorun365
PRO
32
19k
データエンジニアリング領域におけるDuckDBのユースケース
chanyou0311
9
2.3k
"TEAM"を導入したら最高のエンジニア"Team"を実現できた / Deploying "TEAM" and Building the Best Engineering "Team"
yuj1osm
1
210
4th place solution Eedi - Mining Misconceptions in Mathematics
rist
0
150
自分だけの仮想クラスタを高速かつ効率的に作る kubefork
donkomura
0
110
IAMポリシーのAllow/Denyについて、改めて理解する
smt7174
2
210
Exadata Database Service on Cloud@Customer セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
2
1.5k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Gamification - CAS2011
davidbonilla
80
5.2k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
The Invisible Side of Design
smashingmag
299
50k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
We Have a Design System, Now What?
morganepeng
51
7.4k
Code Reviewing Like a Champion
maltzj
521
39k
Transcript
Sep 18, 2018 #roppongijs @ariaki4dev JavaScript a compiled language ?
Is CC-BY-4.0
[JavaScript] インタプリタですか? コンパイラですか?
自己紹介 ariaki @ariaki4dev #techdo #engineers_lt MEDIA DO Co.,Ltd.
コンパイラ/インタプリタの概要を知る JavaScriptの言語体系を考える 本日の目標 初級者もわかるくらい易しい説明をしたい する #engineers_ltを宣伝する ネタLTなのでエモくやりきる
プログラム言語体系 JavaScript動作の仕組み アジェンダ 1 2
プログラム言語体系 How compiler / interpreter works
コンパイラ型言語 インタプリタ型言語 プログラムをコンピュータが直接的 に実行できる機械語、又は、何らか の効率的な中間表現に変換して実行 する言語体系。 前提条件 プログラムを直接、又は、何らかの 効率的な中間表現に変換しながら実 行する言語体系。
直接実行するかどうか
字句解析 構文解析 意味解析 最適化 コード生成 実行 中間コード オブジェクトプログラム ソースコード
字句解析 let x = “string”; let x = “string” Tokens
構文解析 AST : Abstract Syntax Tree 構文木 (Lexical Analysis) (Syntax Analysis)
https://astexplorer.net JavaScriptをASTに分割して、 グラフィカルに表示するサイト AST Explorer
http://int3.github.io/metajs/ metajs JavaScriptをASTに分割して、 ステップ実行できるサイト
構文木 意味解析 中間コード IR : Intermediate Representation (Semantic Analysis) 最適化
コード生成 (Code Optimization) (Code Generation)
- ESTraverse - babel/traverse - estree-walker - Esrecurse - AST
Types - Acorn - Esprima - babel/parser - espree parser traverseler AST 関連ツール - escodegen - babel/generator code generator - ESLint linter
https://estools.github.io/escodegen/demo/ escodegen demo Esprima / escodegenを使って、 JavaScriptをパース+再生成する
How JavaScript works JavaScript 動作の仕組み
https://mathiasbynens.be/notes/shapes-ics インタプリタ? コンパイラ?
主要JSエンジン # Browser JS Engine 1 Google Chrome V8 2
Apple Safari JavaScriptCore 3 Mozilla Firefox SpiderMonkey 4 Microsoft Edge Chakra 5 KDE Konqueror KJS 6 Mozilla (JVM) Rhino
V8
JavaScriptCore
SpiderMonkey
Chakra
- Just-In-Timeコンパイラの略 (対義語 → AOT : Ahead-Of-Time コンパイラ) - プログラムの実行時にコンパイル
(中間コードからネイティブコードに変換) - Java / .NET 等が有名 JITコンパイラ
- JavaScript エンジンは JIT コンパイラを持つ - インタプリタはバイトコードをすばやく生成 - あまり効率的ではない -
コンパイラは効率の良いマシンコードを生成 - コンパイルに時間がかかる - 複数のコンパイラを使って最適化を制御している 結論
なんか両方もってるし 今日は両者の境界が曖昧なので どっちでもいい という結論に至りました まじか やべー これでええんか
あなたはどっち派?
告知 #engineers_lt / エンジニアの登壇を応援する会 https://engineers.connpass.com/event/100640/
Build Something Amazing written by ariaki4dev