187
NAS ENTRANHAS DO WEBKIT E DO V8 ZAEDY SAYÃO @zaedysayao

Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

Embed Size (px)

DESCRIPTION

Cada vez mais ferramentas, softwares e devices possuem soluções baseadas no WebKit. Contudo, poucas pessoas sabem o que ele é de verdade, como ele funciona internamente, seu potencial e o que ele oferece. Veremos seus core, discutiremos como é possível usar o WebKit para fazer o seu browser ou usá-lo dentro de sua aplicação e entenderemos seu funcionamento e suas ferramentas disponiveis. Ainda, veremos como funciona a interpretação e run do JavaScript dentro da engine V8

Citation preview

Page 1: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

NAS ENTRANHAS DO

WEBKIT E DO V8ZAEDY SAYÃO @zaedysayao

Page 2: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

Zaedy Dantas Sayão@zaedysayao@javamanrj@javamanrj

@WORKS

http://about.me/zaedy

Page 3: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 4: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 5: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

BÁSICO

Page 6: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 7: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONCEITO

Page 8: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

O QUE É?

Page 9: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

BROWSER

Page 10: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 11: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

X

Page 12: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

USER INTERFACE

BROWSER ENGINE

RENDER ENGINE

NETWORK I/O

JAVASCRIPTENGINE

GRAPHICS STACK

Page 13: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

USER INTERFACE

BROWSER ENGINE

RENDER ENGINE

NETWORK I/O

JAVASCRIPTENGINE

GRAPHICS STACK

WEBKIT

Page 14: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKITNÃO É UM BROWSER

Page 15: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKIT

Page 16: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

BROWSERENGINE

Page 17: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RENDERENGINE

Page 18: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

ENGINE?

Page 19: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONJUNTO DE LIBS

CÓDIGO

Page 20: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

FAZ O QUE?

Page 21: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 22: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

Page 23: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

Page 24: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

Page 25: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

Page 26: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

42

Page 27: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

Page 28: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

HTMLCSSJS

SVG

Page 29: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

PAINT

HTMLCSSJS

SVG

Page 30: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CÓDIGO

PAINT

HTMLCSSJS

SVG

LAYOUT

Page 31: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 32: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 33: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PAST

Page 34: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

HISTÓRIA

Page 35: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

2001

Page 36: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

KHTML

Page 37: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

2005

Page 38: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 39: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONTRIBUTOR

Page 40: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONTRIBUTOR

Page 41: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONTRIBUTOR

COMMITER

Page 42: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONTRIBUTOR

COMMITER

Page 43: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONTRIBUTOR

COMMITER

REVIEWER

Page 44: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

APPLE ENVIA

CONTA SVN

Page 45: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

ONDE RODA?

Page 46: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 47: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

EVERYWHERE

Page 48: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 49: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 50: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

APPLEGOOGLENOKIA

BLACKBERRYIGALIA (GNOME)

Page 51: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

GETTING CODE

Page 52: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

svn checkout https://svn.webkit.org/repository/webkit/trunk

git clone git://git.webkit.org/WebKit.git

Page 53: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

svn checkout https://svn.webkit.org/repository/webkit/trunk

git clone git://git.webkit.org/WebKit.git

1.2GB

Page 54: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

svn checkout https://svn.webkit.org/repository/webkit/trunk

git clone git://git.webkit.org/WebKit.git

1.2GB

80% TESTES

Page 55: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

BUILD

Page 56: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WebKitTools/Scripts/build-webkit

--qt for Qt, --gtk for Gtk+ --debug for “Debug” mode

Page 57: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RUN

Page 58: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WebKitTools/Scripts/run-launcher

--qt for Qt, --gtk for Gtk+ --debug for “Debug” mode

Page 59: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 60: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PORTS

Page 61: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

SAFARIIOS ≠WINDOWS

Page 62: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

APPLEPORT DO

COREFOUNDATION PARA O WINDOWS

Page 63: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CHROMECHROMIUM

Page 64: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

ANDROID

Page 65: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

QTWEBKIT

Page 66: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKITGTK+

Page 67: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKIT NIGHTLY

MAC PORT -> SAFARI

Page 68: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PORTS

Page 69: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

INTERFACE

Page 70: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

IMPLEMENTAÇÃO

Page 71: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 72: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 73: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number”/>

Page 74: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number”/>WEBKIT

Page 75: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number” />

WebKit

Thursday, November 3, 2011

<input type=”number”/>WEBKIT

Page 76: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number” />

WebKit

Thursday, November 3, 2011

<input type=”number”/>

PINTA PARA MIM

WEBKIT

Page 77: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number” />

WebKit

Thursday, November 3, 2011

<input type=”number”/>

PINTA PARA MIM

WEBKIT

PORT

Page 78: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number” />

WebKit

Thursday, November 3, 2011

<input type=”number”/>

PINTA PARA MIM

<input type=”number” />

Port

Thursday, November 3, 2011

WEBKIT

PORT

Page 79: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number” />

WebKit

Thursday, November 3, 2011

<input type=”number”/>

PINTA PARA MIM

<input type=”number” />

Port

Thursday, November 3, 2011

EU SEI FAZER!

WEBKIT

PORT

Page 80: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number” />

WebKit

Thursday, November 3, 2011

<input type=”number”/>WEBKIT

123

Page 81: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number” />

WebKit

Thursday, November 3, 2011

<input type=”number”/>WEBKIT

123

AQUI

Page 82: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number”/><input type=”number” />

Port

Thursday, November 3, 2011

PORT123

Page 83: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number”/><input type=”number” />

Port

Thursday, November 3, 2011

PORT123

BLZ!

Page 84: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

<input type=”number”/><input type=”number” />

Port

Thursday, November 3, 2011

PORT123

BLZ!

Page 85: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKIT SABE COMO

DESENHAR

Page 86: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RESPONSABILIDADEÉ DO PORT

(COREGRAPHICS)

Page 87: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 88: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 89: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

QTWEBKITQNETWORKACESSMANAGER

Page 90: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

KDEWEBKITKDE NETWORK LAYER

Page 91: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

NETWORK INTERFACENADA DE HTTP, SSL...

MAS TEM CHAMADAS PARA ENVIO DE DADOS

Page 92: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

IMPLEMENTAÇÃOLIB DO SISTEMA

Page 93: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

SE QUISER FAZER UM PORT?

Page 94: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

IMPLEMENTE AS INTERFACES

Page 95: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

SE NÃO IMPLEMENTAR?

Page 96: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

fillRoundedRect()BOTÃO

QUADRADO

Page 97: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

SE WEBKIT ->

MENOS UM BROWSER PARA

TESTAR#1

Page 98: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 99: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

NOVA FEATURE ->

DISPONÍVEL EM TODO PORT#2

Page 100: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 101: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 102: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKIT TAMBÉM É UMA

API

Page 103: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKIT2MULTI-PROCESS

Page 104: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

JAVASCRIPTCOREENGINE

Page 105: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBCORECSS, HTML, DOM,

RENDER

Page 106: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WTFWEB TEMPLATE FRAMEWORK

Page 107: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 108: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 109: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PROPÓSITOS

Page 110: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 111: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBCORE

Page 112: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

LOADINGPARSINGLAYOUTPAINT

HTML EDITINGJS BINDINGS

Page 113: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

LOADINGPEGANDO DADOS

Page 114: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

COMPLICADA!!!

Page 115: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

WEBKITWEBCORE

WEBCORE/LOADERWEBCORE/PLATFORM/NETWORK

FRAMELOADERCLIENT

Page 116: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

2 PASSOSFRAMES E RESOURCES

Page 117: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

LOADING A FRAME

CLASSE FRAMELOADER

Page 118: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

1)POLICY STAGEBLOCK POP-UP

CROSS-PROCESS NAVIGATION

Page 119: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

2)PROVISIONAL STAGE

DOWNLOAD OU COMMITEX: LINK

Page 120: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

3)COMMITED STAGE

START PARSING

Page 121: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

LOADINGSUBRESOURCES

Page 122: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

DOCLOADERCACHE

Page 123: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

DOCLOADERPEGA UMA URL

VERIFICA NO CACHE OU LOADER

RETORNA UM CACHEDRESOURCE

Page 124: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CACHEDRESOURCERESPONDE CALLBACKPRODUZ UM OBJETO (IMAGEM, FONTE...)

Page 125: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PARSING

Page 126: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

HTML x XMLHTMLTOKENIZER E HTMLPARSER

XMLTOKENIZER

OUTRAS TASKS:PRE-LOAD SCANNING

(CARREGAMENTO DE CSS ANTES DO PARSE)

Page 127: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 128: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

DOM TREERENDEROBJECT TREERENDERSTYLE TREERENDERLAYER TREE

LINEBOX TREE

Page 129: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

LOADING -> SOURCE PARSING -> DOM TREE

attach() -> RENDEROBJECT TREE

STYLE RESOLUTION -> RENDERSTYLE TREE

LAYOUT -> RENDERLAYER TREE LINEBOX TREE

Page 130: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

DOM TREE

<html> <head> <title>

foo </title>

<head>

HTMLDocumentHTMLHTMLElementHTMLHeadElementHTMLTitleElement

Text(“foo”)

Page 131: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RENDER TREE

LAYOUTPAINTING

HIT TESTING

Page 132: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RENDER TREE

RENDEROBJECTSRENDERSTYLE

RENDERLAYERSINLINEBOXES

Page 133: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RENDEROBJECTclass RenderObject { virtual void layout() = 0; virtual void paint(PaintInfo) = 0; virtual IntRect repaintRect() = 0; Node* node(); RenderStyle* style() const; RenderLayer* containingLayer(); .....}

Page 134: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RENDEROBJECT

RenderBlock(<div>, <p>)RenderInline(<span>, <b>, <i>)RenderImage(<image>)RenderText(#text)RenderTableCell (<td>)

Page 135: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

OBJETOS DA ENGINE JSString

ArrayNumberPrototypes.__proto__.callee__defineGetter__.toString()

Page 136: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 137: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 138: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

ABERTASFECHADAS

Page 139: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

SPIDER MONKEYJAVASCRIPTCORE (JSC, NITRO)

V8

Page 140: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

V8

Page 141: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PARSER RUNTIME

INTERPRETER

Page 142: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PARSER

Page 143: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

TOKENIZE

var answer = 42;

Page 144: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

TOKENIZE

var answer = 42;keyword

Page 145: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

TOKENIZE

var answer = 42;keyword identifier

Page 146: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

TOKENIZE

var answer = 42;keyword identifier

sinal igual

Page 147: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

TOKENIZE

var answer = 42;keyword identifier

sinal igual

número

Page 148: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

TOKENIZE

var answer = 42;keyword identifier

sinal igual

número

ponto e vírgula

Page 149: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

TOKENIZERNO V8

src/scanner.*

Page 150: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

KEYWORDX

IDENTIFIER

Page 151: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

#1PERGUNTA 1

Page 152: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

instanceof - instanceComponent

#1PERGUNTA 1

Page 153: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

instanceof - instanceComponent

#1PERGUNTA 1

Page 154: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

instanceof - instanceComponent

#1PERGUNTA 1

Page 155: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

#2PERGUNTA 2

Page 156: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

A G H J K L M O P Q X Y Z

#2PERGUNTA 2

Page 157: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

GRAMÁTICA

Page 158: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

SouceElement :: (Statement)*

FunctionDeclaration :: ‘function’ Identifier ‘(‘FormalParameters’)’ ‘{‘FunctionBody’}’

Page 159: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

SYNTAX TREE

Page 160: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

IDENTIFIER LITERAL CONSTANT

VARIABLE DECLARATION

answer 42

Page 161: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CONSEQUÊNCIAALTERNATIVA

BRANCH

VELHONOVO

CONDIÇÃO

idade > 60

Page 162: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

PARSER NO V8src/parser.*

Page 163: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

CODE TRACE (EVAL)

SCRIPT :: COMPILE

SCRIPT :: NEW

INTERNAL :: COMPILER :: COMPILE

INTERNAL :: MAKEFUNCIONINFO

INTERNAL :: PARSEAPI :: PARSE

Page 164: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

INTERPRETER

Page 165: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

var answer = 42;

Page 166: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

var answer = 42;

Declare um objeto localChame esse objeto de “answer”

Crie um número 42De “assign” do número ao objeto

Page 167: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

IDENTIFIER LITERAL CONSTANT

VARIABLE DECLARATION

answer 42

Page 168: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

VELOCIDADE

Page 169: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

BYTECODE

SERIALIZA EM UMA LISTA DE “AÇÕES”

Page 170: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

COMPILA O BYTECODE

PARA ASSEMBLY

JIT (=JUST-IN-TIME) COMPILE

Page 171: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

shell --print-code

shell --expose-debug-as deb

Page 172: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

shell --print-code

shell --expose-debug-as deb

deb.Debug.disassemble(f)

Page 173: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

LAZY

Page 174: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 175: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

foobar = function(x, y, z) { ...}

foobar(x, y, z);

Page 176: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

foobar = function(x, y, z) { ...}

foobar(x, y, z);

Analiza sintaxe

Guarda posição da função

Page 177: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

foobar = function(x, y, z) { ...}

foobar(x, y, z);

Analiza sintaxe

Guarda posição da função

Compila e roda

Page 178: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

foobar = function(x, y, z) { ...}

foobar(x, y, z);

Analiza sintaxe

Guarda posição da função

foobar = function(x, y, z, run) { ...}

foobar(x, y, z, false);

Compila e roda

Page 179: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

foobar = function(x, y, z) { ...}

foobar(x, y, z);

Analiza sintaxe

Guarda posição da função

foobar = function(x, y, z, run) { ...}

foobar(x, y, z, false);

HACK

Compila e roda

Page 180: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

RUNTIME

Page 181: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

Date.now()

código nativo

código JavaScript

Page 182: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

BRIDGEBRIDGING

Page 183: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

C++Primitive

DateObjectArray

FunctionExternal

Page 184: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

Handle<FunctionTemplate> systemObject = FunctionTemplate::New();systemObject->Set(String::New(“exit”)), FunctionTemplate::New(system_exit)->GetFunction());

static Handle<value> system_exit(const Arguments& args){ int status = args[0]->Int32Value(); ::exit(status); return Undefined();}

EXPONDO FUNÇÃO

Page 185: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

JSLINTJSBEAUTIFY

YUI COMPRESSOR

Page 186: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013
Page 187: Nas entranhas do WebKit e do V8 - The Developers Conference 2013 SP - TDC2013

OBRIGADO!

@zaedysayao