SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Asynchronous javascript
 Asynchronous javascript Asynchronous javascript
Asynchronous javascript
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
 
Concurrency With Go
Concurrency With GoConcurrency With Go
Concurrency With Go
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
 
Preparing for Scala 3
Preparing for Scala 3Preparing for Scala 3
Preparing for Scala 3
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
The redux saga begins
The redux saga beginsThe redux saga begins
The redux saga begins
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with ThymeleafSpring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
JPA Best Practices
JPA Best PracticesJPA Best Practices
JPA Best Practices
 
NGINX Back to Basics Part 3: Security (Japanese Version)
NGINX Back to Basics Part 3: Security (Japanese Version)NGINX Back to Basics Part 3: Security (Japanese Version)
NGINX Back to Basics Part 3: Security (Japanese Version)
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
 
GraalVm and Quarkus
GraalVm and QuarkusGraalVm and Quarkus
GraalVm and Quarkus
 
jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events
 
Callback Function
Callback FunctionCallback Function
Callback Function
 
Javascript best practices
Javascript best practicesJavascript best practices
Javascript best practices
 
Introducing Async/Await
Introducing Async/AwaitIntroducing Async/Await
Introducing Async/Await
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScript
 
JavaScript Engines and Event Loop
JavaScript Engines and Event Loop JavaScript Engines and Event Loop
JavaScript Engines and Event Loop
 

Ähnlich wie Implementing a JavaScript Engine

Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
Vinay H G
 
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and Play
Luka Zakrajšek
 
MathWorks Interview Lecture
MathWorks Interview LectureMathWorks Interview Lecture
MathWorks Interview Lecture
John Yates
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platform
Ruslan Shevchenko
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
Avi Kedar
 

Ähnlich wie 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...
 

Mehr von Kris Mok

Mehr von Kris Mok (7)

Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
 
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VMIntrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
 
JVM: A Platform for Multiple Languages
JVM: A Platform for Multiple LanguagesJVM: A Platform for Multiple Languages
JVM: A Platform for Multiple Languages
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011
 

Kürzlich hochgeladen

Kürzlich hochgeladen (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
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
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
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
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Implementing a JavaScript Engine

Hinweis der Redaktion

  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.