JavaScriptはコンパイラ型言語か?/Is JavaScript a compiled language?

Dcfa005284131fd4052e767962205f93?s=47 Akira Morikawa
September 18, 2018

JavaScriptはコンパイラ型言語か?/Is JavaScript a compiled language?

JavaScriptはコンパイラ型言語か?インタプリタ型言語か?を調べてみました

#roppongijs

Dcfa005284131fd4052e767962205f93?s=128

Akira Morikawa

September 18, 2018
Tweet

Transcript

  1. Sep 18, 2018 #roppongijs @ariaki4dev JavaScript a compiled language ?

    Is CC-BY-4.0
  2. [JavaScript] インタプリタですか? コンパイラですか?

  3. 自己紹介 ariaki @ariaki4dev #techdo #engineers_lt MEDIA DO Co.,Ltd.

  4. コンパイラ/インタプリタの概要を知る JavaScriptの言語体系を考える 本日の目標 初級者もわかるくらい易しい説明をしたい する #engineers_ltを宣伝する ネタLTなのでエモくやりきる

  5. プログラム言語体系 JavaScript動作の仕組み アジェンダ 1 2

  6. プログラム言語体系 How compiler / interpreter works

  7. コンパイラ型言語 インタプリタ型言語 プログラムをコンピュータが直接的 に実行できる機械語、又は、何らか の効率的な中間表現に変換して実行 する言語体系。 前提条件 プログラムを直接、又は、何らかの 効率的な中間表現に変換しながら実 行する言語体系。

    直接実行するかどうか
  8. 字句解析 構文解析 意味解析 最適化 コード生成 実行 中間コード オブジェクトプログラム ソースコード

  9. 字句解析 let x = “string”; let x = “string” Tokens

    構文解析 AST : Abstract Syntax Tree 構文木 (Lexical Analysis) (Syntax Analysis)
  10. https://astexplorer.net JavaScriptをASTに分割して、 グラフィカルに表示するサイト AST Explorer

  11. http://int3.github.io/metajs/ metajs JavaScriptをASTに分割して、 ステップ実行できるサイト

  12. 構文木 意味解析 中間コード IR : Intermediate Representation (Semantic Analysis) 最適化

    コード生成 (Code Optimization) (Code Generation)
  13. - ESTraverse - babel/traverse - estree-walker - Esrecurse - AST

    Types - Acorn - Esprima - babel/parser - espree parser traverseler AST 関連ツール - escodegen - babel/generator code generator - ESLint linter
  14. https://estools.github.io/escodegen/demo/ escodegen demo Esprima / escodegenを使って、 JavaScriptをパース+再生成する

  15. How JavaScript works JavaScript 動作の仕組み

  16. https://mathiasbynens.be/notes/shapes-ics インタプリタ? コンパイラ?

  17. 主要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
  18. V8

  19. JavaScriptCore

  20. SpiderMonkey

  21. Chakra

  22. - Just-In-Timeコンパイラの略 (対義語 → AOT : Ahead-Of-Time コンパイラ) - プログラムの実行時にコンパイル

    (中間コードからネイティブコードに変換) - Java / .NET 等が有名 JITコンパイラ
  23. - JavaScript エンジンは JIT コンパイラを持つ - インタプリタはバイトコードをすばやく生成 - あまり効率的ではない -

    コンパイラは効率の良いマシンコードを生成 - コンパイルに時間がかかる - 複数のコンパイラを使って最適化を制御している 結論
  24. なんか両方もってるし 今日は両者の境界が曖昧なので どっちでもいい という結論に至りました まじか やべー これでええんか

  25. あなたはどっち派?

  26. 告知 #engineers_lt / エンジニアの登壇を応援する会 https://engineers.connpass.com/event/100640/

  27. Build Something Amazing written by ariaki4dev