SlideShare une entreprise Scribd logo
1  sur  81
Implementing a
JavaScript Engine

Krystal Mok (@rednaxelafx)
2013-11-10
Implementing a
(Modern, High Performance?)
JavaScript Engine
About Me
• Programming language and virtual machine
enthusiast
• Worked on the HotSpot JVM at Taobao and
Oracle
• Also worked on a JavaScript engine project
• Twitter / Sina Weibo: @rednaxelafx
• Blog: English / Chinese
Agenda
•
•
•
•

Know the Heritage
JavaScript Engine Overview
Implementation Strategies and Tradeoffs
A bit about Nashorn
The roots of JavaScript language and modern JavaScript engines

KNOW THE HERITAGE
Heritage of the Language
Scheme
function closure

Self

prototype-based OO

C-like syntax,
built-in objects

Java
…

JavaScript
Language Comparison
Self
• Prototype-based OO
• Multiple Prototype
• Dynamically Typed
• Dynamically Extend Objects
• Mirror-based Reflection
• Block (closure)
• Support Non-local Return
• (pass a error handler to
methods that might one)

JavaScript (ECMAScript 5)
• Prototype-based OO
• Single Prototype
• Dynamically Typed
• Dynamically Extend Objects
• Reflection
• First-class Function (closure)
• (no non-local return)
• Exception Handling
Heritage of the Language
function MyPoint(x, y) {
this.x = x;
this.y = y;
}
MyPoint.prototype.distance = function (p) {
var xd = this.x - p.x,
yd = this.y - p.y;
return Math.sqrt(xd*xd + yd*yd);
}
var p = new Point(2013, 11);
Heritage of the Language
traits myPoint = (|
parent* = traits clonable.
initX: newX Y: newY = (x: newX. y: newY)
distance: p = (| xd. yd |
xd: x - p x.
yd: y - p y.
(xd squared + yd squared) squareRooted
).
|).
myPoint = (|
parent* = traits myPoint.
x <- 0.
y <- 0
|).
p: myPoint copy initX: 2013 Y: 11
Heritage of the Language

on Self 4.4 / Mac OS X 10.7.5
Heritage of the VM
CLDC-HI
(Java)

HotSpot VM
(Java)

Strongtalk VM
(Smalltalk)

Self VM

V8

(Self)

(JavaScript)
What’s in common?
• Lars Bak!
VM Comparison
Self VM (3rd Generation)

V8 (with Crankshaft)

• Fast Object w/Hidden Class
• Tiered Compilation

• Fast Object w/Hidden Class
• Tiered Compilation

– OSR and deoptimization
– support for full-speed
debugging

– OSR and deoptimization
– support for full-speed
debugging

• Type Feedback
– Polymorphic Inline Caching

•
•
•
•

Type Inference
Method/Block Inlining
Method Customization
Generational Scavenging
– Scavenging + Mark-Compact

• Type Feedback
– Polymorphic Inline Caching

• Type Inference
• Function Inlining
• Generational Scavenging
– Scavenging + MarkSweep/Mark-Compact
To Implement a High Performance
JavaScript Engine
• Learn from Self VM as a basis!
Themes
• Pay-as-you-go / Lazy
• Take advantage of runtime information
– Type feedback

• Take advantage of actual code stability
– Try to behave as static as possible
Outline of the main components

JAVASCRIPT ENGINE OVERVIEW
Components of a JavaScript Engine
•
•
•
•
•
•

Parser
Runtime
Execution Engine
Garbage Collector (GC)
Foreign Function Interface (FFI)
Debugger and Diagnostics
Components of a JavaScript Engine
Source
Code

Parser

F
F
I
host /
external
library

AST

Execution
Engine

Memory (Runtime Data Areas)

Call
Stack

JavaScript
Objects

GC
Components of a JavaScript Engine
•
•
•
•
•
•

Parser
Runtime
Execution Engine
Garbage Collector (GC)
Foreign Function Interface (FFI)
Debugger and Diagnostics
Parser
• Parse source code into internal representation
• Usually generates AST
VarDecl: z

var z = x + y

BinaryArith: +

x

y
Components of a JavaScript Engine
•
•
•
•
•
•

Parser
Runtime
Execution Engine
Garbage Collector (GC)
Foreign Function Interface (FFI)
Debugger and Diagnostics
Runtime
•
•
•
•

Value Representation
Object Model
Built-in Objects
Misc.
Object

Function
__proto__
prototype

__proto__

__proto__

constructor

prototype

…

__proto__

null

__proto__

x

2013

constructor

y

11

…

…

…
Components of a JavaScript Engine
•
•
•
•
•
•

Parser
Runtime
Execution Engine
Garbage Collector (GC)
Foreign Function Interface (FFI)
Debugger and Diagnostics
Execution Engine
• Execute JavaScript Code
VarDecl: z

addl %rcx, %rax

BinaryArith: +

x

y
Components of a JavaScript Engine
•
•
•
•
•
•

Parser
Runtime
Execution Engine
Garbage Collector (GC)
Foreign Function Interface (FFI)
Debugger and Diagnostics
Garbage Collector
• Collect memory from unused objects
Components of a JavaScript Engine
•
•
•
•
•
•

Parser
Runtime
Execution Engine
Garbage Collector (GC)
Foreign Function Interface (FFI)
Debugger and Diagnostics
Foreign Function Interface
• Handle interaction between JavaScript and
“the outside world”
• JavaScript call out to native function
• Native function call into JavaScript function, or
access JavaScript object
Components of a JavaScript Engine
•
•
•
•
•
•

Parser
Runtime
Execution Engine
Garbage Collector (GC)
Foreign Function Interface (FFI)
Debugger and Diagnostics
Debugger and Diagnostics
IMPLEMENTATION STRATEGIES AND
TRADEOFFS
Parser
•
•
•
•
•

LR
LL
Recursive Descent
Operator Precedence
Lazy Parsing / Deferred Parsing
Value Representation
• Pointers, and all values allocated on heap
• Discriminated Union
• Tagged Value / Tagged Pointer
Value Representation
• Pointers, and all values allocated on heap
• Discriminated Union
• Tagged Value / Tagged Pointer

Tag_Int
2013

typedef Object* JSValue;
Value Representation
• Pointers, and all values allocated on heap
• Discriminated Union
• Tagged Value / Tagged Pointer

Tag_Int
2013

class JSValue {
ObjectType ot;
union {
double n;
bool
b;
Object* o;
// …
} u;
}
Tagged
• Tagged Pointer

small integer

00

pointer

01

– Non-zero tag on pointer
– Favor small integer arithmetics

• Tagged Value
– Non-zero tag on non-pointer
– Favor pointer access

• NaN-boxing
– use special NaN value as box
Tagged
• Tagged Pointer
– Non-zero tag on pointer
– Favor small integer arithmetics

• Tagged Value
– Non-zero tag on non-pointer
– Favor pointer access

• NaN-boxing
– use special NaN value as box

small integer

01

pointer

00
Tagged
• Tagged Pointer
– Non-zero tag on pointer
– Favor small integer arithmetics

• Tagged Value
– Non-zero tag on non-pointer
00000000
– Favor pointer access

• NaN-boxing

pointer

xxxxxxxx
11111111

double
00000000

– use special QNaN value as box

integer
Value Representation in Self
Numeric Tower
•
•
•
•

Internal Numeric Tower
Smi -> HeapDouble
int -> long -> double
unboxed number
Object Model
• Hash based
– “Dictionary Mode”

• Hidden Class based
– “Fast Object”
Object Model
Example: behind Groovy’s “object literal”-ish syntax
Groovy code:

Equivalent Java code:

obj = [
x: 2013,
y: 42
];

obj =
new LinkedHashMap(2);
obj.put("x", 2013);
obj.put("y", 42);

i = obj.x;

i = obj.get("x");
key

“y”

value
keySet

null

0

next

null

values

null

1

hash

126

before

table
size
threshold

1

loadFactor
modCount

after

2

entrySet

header
42

key

null

0.75

value

null

key

2

next

null

value

null

hash

-1

next

null

before

hash

127

after

before

header
accessOrder

x

false

after

“x”

header
y

2013
Nashorn Object Model
Key

Setter

“x”

x getter

x setter

“y”
map

Getter
y getter

y setter

map

__proto__
context

…

flags

0

spill

__proto__

null

…

arrayData
EMPTY_ARRAY

L0

x

L1

y

L2

(unused)

2013

L3

(unused)

42
Let’s ignore
some fields
for now

Getter

Setter

“x”

x getter

x setter

“y”
map

Key

y getter

y setter

map

__proto__
context

…

flags

0

spill

__proto__

null

…

arrayData
EMPTY_ARRAY

L0

x

L1

y

L2

(unused)

2013

L3

(unused)

42
… and we’ll
get this

Key

Getter

Setter

“x”

x getter

x setter

“y”

y getter

y setter

map
L0

x

L1

y

2013
42
looks just
like a Java
object

Key

Offset

“x”

+12

“y”

+16

metadata
x

class Point {
Object x;
Object y;
}

y

2013

… with
boxed fields

42
would be
even better
if …

Key

Offset

“x”

+12

“y”

+16

metadata
x

2013

y

42

class Point {
int x;
int y;
}

but Nashorn
doesn’t go
this far yet
Key

Setter

“x”

x getter

x setter

“y”

y getter

y setter

“z”

z getter

z setter

“a”

a getter

a setter

“b”

map

Getter

b getter

b setter

__proto__
context

…

flags

0

map
__proto__
…

spill
arrayData

b

L0

x

L1

y

L2

z

L3

a

0

6

1

7
1

2
3
4

5
Inline Cache
• Facilitated by use of hidden class
• Improve property access efficiency
• Collect type information for type feedback
– later fed to JIT compilers for better optimization

• Works with both interpreted and compiled
code
String
•
•
•
•
•

Flat string
Rope / ConsString / ConcatString
Substring / Span
Symbol / Atom
External String
RegExp
•
•
•
•

NFA
Optimize to DFA where profitable
Interpreted
JIT Compiled
Call Stack
• Native or separate?
• Native
– fast
– easier transition between execution modes
– harder to implement

• Separate (aka “stack-less”)
– easy to implement
– slow
– overhead when transitioning between exec modes
Execution Engine
• Interpreter
• Compiler
– Ahead-of-Time Compiler
– Just-in-Time Compiler
– Dynamic / Adaptive Compiler

• Mixed-mode
• Tiered
Execution Engine in Self
Interpreter
•
•
•
•

Line Interpreter
AST Interpreter
Stack-based Bytecode Interpreter
Register-based Bytecode Interpreter
Interpreter
• Written in
– C/C++
– Assembler
– others?
Compiler Concurrency
• Foreground/Blocking Compilation
• Background Compilation
• Parallel Compilation
Baseline Compiler
• Fast compilation, little optimization
• Should generate type-stable code
Optimizing Compiler
• Type Feedback
• Type Inference
• Function Inlining
On-stack Replacement
Garbage Collection
• Reference Counting?
– not really used by any mainstream impl

• Tracing GC
– mark-sweep
– mark-compact
– copying
GC Advances
•
•
•
•

Generational GC
Incremental GC
Concurrent GC
Parallel GC
GC Concurrency
Mark-Sweep

Application Thread
JavaScript
GC

mark

sweep
GC Concurrency
Mark-Compact

Application Thread
JavaScript
GC

mark

compact
GC Concurrency
Scavenging

Application Thread
JavaScript
GC

scavenge
GC Concurrency
Incremental Mark

Application Thread
JavaScript
GC

incremental mark

sweep
GC Concurrency
Lazy Sweep

Application Thread
JavaScript
GC

mark

lazy sweep
GC Concurrency
Incremental Mark + Lazy Sweep

Application Thread
JavaScript
GC

incremental mark

lazy sweep
GC Concurrency
Generational:
Scavenging + (Incremental Mark + Lazy Sweep)
Application Thread
JavaScript
GC

incremental mark
and scavenge

lazy sweep
GC Concurrency
(Mostly) Concurrent Mark-Sweep
Application Thread
JavaScript

GC Thread

GC
reset
initial mark
remark
concurrent mark concurrent sweep
A new high performance JavaScript on top of the JVM

A BIT ABOUT NASHORN
What is Nashorn?
Overview

• Oracle’s ECMAScript 5.1 implementation, on
the JVM
• Clean code base, 100% Java
– started from scratch; no code from Rhino

• An OpenJDK project
• GPLv2 licensed
What is Nashorn?
Origins of the “Nashorn” name: the Rhino book
What is Nashorn?
Origins of the “Nashorn” name: Mozilla Rhino
What is Nashorn?
Origins of the “Nashorn” name: the unofficial Nashorn logo
What is Nashorn?
Origins of the “Nashorn” name: my impression
Dynamic Languages on the JVM
Can easily get to a sports-car-ish level
Dynamic Languages on the JVM
Takes some effort to get to a decent sports car level
Dynamic Languages on the JVM
Hard to achieve extremely good performance
Nashorn Execution Model
JavaScript Source Code

Compiler Backend
Constant Folding

Parser (Compiler Frontend)

Control-flow Lowering

Lexical Analysis

Type Annotating

Syntax Analysis

Range Analysis (*)

Code Splitting
AST

Type Hardening
Bytecode Generation

* Not complete yet

Java Bytecode

Contenu connexe

Tendances

TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practicesfelixbillon
 
RxJS Evolved
RxJS EvolvedRxJS Evolved
RxJS Evolvedtrxcllnt
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJSBrainhub
 
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンクCODE BLUE
 
Java Performance Analysis on Linux with Flame Graphs
Java Performance Analysis on Linux with Flame GraphsJava Performance Analysis on Linux with Flame Graphs
Java Performance Analysis on Linux with Flame GraphsBrendan Gregg
 
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
わしわし的おすすめ  .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会わしわし的おすすめ  .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会Yukinori KITADAI
 
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013Vladimir Ivanov
 
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...François-Guillaume Ribreau
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
Low latency microservices in java QCon New York 2016
Low latency microservices in java   QCon New York 2016Low latency microservices in java   QCon New York 2016
Low latency microservices in java QCon New York 2016Peter Lawrey
 
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 sasezaki
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesCharles Nutter
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기OnGameServer
 

Tendances (20)

TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practices
 
RxJS Evolved
RxJS EvolvedRxJS Evolved
RxJS Evolved
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
 
JS Event Loop
JS Event LoopJS Event Loop
JS Event Loop
 
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク
 
Java Performance Analysis on Linux with Flame Graphs
Java Performance Analysis on Linux with Flame GraphsJava Performance Analysis on Linux with Flame Graphs
Java Performance Analysis on Linux with Flame Graphs
 
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
わしわし的おすすめ  .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会わしわし的おすすめ  .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
 
Vert.x vs akka
Vert.x vs akkaVert.x vs akka
Vert.x vs akka
 
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
 
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
 
The basics of fluentd
The basics of fluentdThe basics of fluentd
The basics of fluentd
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
Low latency microservices in java QCon New York 2016
Low latency microservices in java   QCon New York 2016Low latency microservices in java   QCon New York 2016
Low latency microservices in java QCon New York 2016
 
Powershell training material
Powershell training materialPowershell training material
Powershell training material
 
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
 

Similaire à Implementing a JavaScript Engine

How to crack java script certification
How to crack java script certificationHow to crack java script certification
How to crack java script certificationKadharBashaJ
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updatesVinay H G
 
Dmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script TechnologiesDmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script TechnologiesLogeekNightUkraine
 
A Deep Dive into Javascript
A Deep Dive into JavascriptA Deep Dive into Javascript
A Deep Dive into JavascriptTiang Cheng
 
Doctrine 2.0 Enterprise Persistence Layer for PHP
Doctrine 2.0 Enterprise Persistence Layer for PHPDoctrine 2.0 Enterprise Persistence Layer for PHP
Doctrine 2.0 Enterprise Persistence Layer for PHPGuilherme Blanco
 
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayLuka Zakrajšek
 
Java day2016 "Reinventing design patterns with java 8"
Java day2016 "Reinventing design patterns with java 8"Java day2016 "Reinventing design patterns with java 8"
Java day2016 "Reinventing design patterns with java 8"Alexander Pashynskiy
 
MathWorks Interview Lecture
MathWorks Interview LectureMathWorks Interview Lecture
MathWorks Interview LectureJohn Yates
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and ActivatorKevin Webber
 
Triton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON ChinaTriton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON ChinaWei-Bo Chen
 
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"JSLab.Руслан Шевченко."JavaScript как платформа компиляции"
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"GeeksLab Odessa
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platformRuslan Shevchenko
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...Malin Weiss
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...Speedment, Inc.
 

Similaire à Implementing a JavaScript Engine (20)

How to crack java script certification
How to crack java script certificationHow to crack java script certification
How to crack java script certification
 
JS Essence
JS EssenceJS Essence
JS Essence
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
 
Dmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script TechnologiesDmytro Kochergin Angular 2 and New Java Script Technologies
Dmytro Kochergin Angular 2 and New Java Script Technologies
 
A Deep Dive into Javascript
A Deep Dive into JavascriptA Deep Dive into Javascript
A Deep Dive into Javascript
 
Naver_alternative_to_jpa
Naver_alternative_to_jpaNaver_alternative_to_jpa
Naver_alternative_to_jpa
 
Doctrine 2.0 Enterprise Persistence Layer for PHP
Doctrine 2.0 Enterprise Persistence Layer for PHPDoctrine 2.0 Enterprise Persistence Layer for PHP
Doctrine 2.0 Enterprise Persistence Layer for PHP
 
Java script basics
Java script basicsJava script basics
Java script basics
 
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and Play
 
Scala Introduction
Scala IntroductionScala Introduction
Scala Introduction
 
Java day2016 "Reinventing design patterns with java 8"
Java day2016 "Reinventing design patterns with java 8"Java day2016 "Reinventing design patterns with java 8"
Java day2016 "Reinventing design patterns with java 8"
 
MathWorks Interview Lecture
MathWorks Interview LectureMathWorks Interview Lecture
MathWorks Interview Lecture
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
Triton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON ChinaTriton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON China
 
06.1 .Net memory management
06.1 .Net memory management06.1 .Net memory management
06.1 .Net memory management
 
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"JSLab.Руслан Шевченко."JavaScript как платформа компиляции"
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platform
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
 

Dernier

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 

Dernier (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 

Implementing a JavaScript Engine

Notes de l'éditeur

  1. Self 4.0 cannot run a block after its enclosing method has returned.
  2. http://blogs.msdn.com/b/ie/archive/2012/06/13/advances-in-javascript-performance-in-ie10-and-windows-8.aspxChakra employs a conservative, quasi-generational, mark and sweep, garbage collector that does most of its work concurrently on a dedicated thread to minimize script execution pauses that would interrupt the user experience.