SlideShare uma empresa Scribd logo
1 de 66
Baixar para ler offline
Design Principles for a High-Performance Smalltalk
Dave Mason
Toronto Metropolitan Universityi
©2022 Dave Mason
Design Principles
Large memories
64-bit and IEEE-768
Multi-core and threading
Fast execution
Design Principles
Large memories
64-bit and IEEE-768
Multi-core and threading
Fast execution
Design Principles
Large memories
64-bit and IEEE-768
Multi-core and threading
Fast execution
Design Principles
Large memories
64-bit and IEEE-768
Multi-core and threading
Fast execution
Zag Smalltalk
from-scratch implementation
low-level is implemented in Zig
goal is to support existing OpenSmalltalk systems
don’t want to rewrite userland!
Zag Smalltalk
from-scratch implementation
low-level is implemented in Zig
goal is to support existing OpenSmalltalk systems
don’t want to rewrite userland!
Zag Smalltalk
from-scratch implementation
low-level is implemented in Zig
goal is to support existing OpenSmalltalk systems
don’t want to rewrite userland!
Zag Smalltalk
from-scratch implementation
low-level is implemented in Zig
goal is to support existing OpenSmalltalk systems
don’t want to rewrite userland!
Immediate Values
64 bit
NaN-boxing
double-floats, 51-bit SmallInteger, Booleans, nil, Unicode
characters, Symbols
room for instances of any type with single 32-bit value
Immediate Values
64 bit
NaN-boxing
double-floats, 51-bit SmallInteger, Booleans, nil, Unicode
characters, Symbols
room for instances of any type with single 32-bit value
Immediate Values
64 bit
NaN-boxing
double-floats, 51-bit SmallInteger, Booleans, nil, Unicode
characters, Symbols
room for instances of any type with single 32-bit value
Immediate Values
64 bit
NaN-boxing
double-floats, 51-bit SmallInteger, Booleans, nil, Unicode
characters, Symbols
room for instances of any type with single 32-bit value
S+E F F F Type
0000 0000 0000 0000 double +0
0000-7FEF xxxx xxxx xxxx double (positive)
7FF0 0000 0000 0000 +inf
7FF0-F xxxx xxxx xxxx NaN (unused)
8000 0000 0000 0000 double -0
8000-FFEF xxxx xxxx xxxx double (negative)
FFF0 0000 0000 0000 -inf
FFF0-5 xxxx xxxx xxxx NaN (currently unused)
FFF6 xxxx xxxx xxxx heap object
FFF7 0001 xxxx xxxx reserved (tag = Object)
FFF7 0002 xxxx xxxx reserved (tag = SmallInteger)
FFF7 0003 xxxx xxxx reserved (tag = Double)
FFF7 0004 0001 0000 False
FFF7 0005 0010 0001 True
FFF7 0006 0100 0002 UndefinedObject
FFF7 0007 aaxx xxxx Symbol
FFF7 0008 00xx xxxx Character
FFF8-F xxxx xxxx xxxx SmallInteger
FFF8 0000 0000 0000 SmallInteger minVal
FFFC 0000 0000 0000 SmallInteger 0
FFFF FFFF FFFF FFFF SmallInteger maxVal
Multi-core support
only way to speed up applications
minimal blocking
computational/mutator threads - typically 1 per core
I/O threads - one per open “file”
global collector thread
Multi-core support
only way to speed up applications
minimal blocking
computational/mutator threads - typically 1 per core
I/O threads - one per open “file”
global collector thread
Multi-core support
only way to speed up applications
minimal blocking
computational/mutator threads - typically 1 per core
I/O threads - one per open “file”
global collector thread
Multi-core support
only way to speed up applications
minimal blocking
computational/mutator threads - typically 1 per core
I/O threads - one per open “file”
global collector thread
Multi-core support
only way to speed up applications
minimal blocking
computational/mutator threads - typically 1 per core
I/O threads - one per open “file”
global collector thread
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
Memory management
mutator threads
copying collector
private nursery (includes stack)
2 teen arenas - n copies before promotion
when prompted, finds next 100 refs to global stack, then blocks,
repeat
then can proceed
I/O threads
maintains list of current shared buffers while I/O blocked
global collector thread
non-moving mark/sweep arena
periodically does mark
marks known shared structures (class table, symbol table, dispatch
tables)
asks mutators for global roots
processes them until all roots have been found
then can proceed to sweep
...
... Memory management
global collector for non-moving mark-&-sweep
uses Fibonacci heap (similar to Mist)
large objects (e.g. 16Kib) have separately mapped pages (allows
mmap of large files) to minimize memory creep
... Memory management
global collector for non-moving mark-&-sweep
uses Fibonacci heap (similar to Mist)
large objects (e.g. 16Kib) have separately mapped pages (allows
mmap of large files) to minimize memory creep
... Memory management
global collector for non-moving mark-&-sweep
uses Fibonacci heap (similar to Mist)
large objects (e.g. 16Kib) have separately mapped pages (allows
mmap of large files) to minimize memory creep
Heap objects
header
Bits What Characteristics
12 length number of long-words beyond the header
4 age 0 - nursery, 1-7 teen, 8+ global
8 format
24 identityHash
16 classIndex LSB
recognize pointer-free instance variables and arrays separately
length of 4095 - forwarding pointer - copying, become:, promoted
format is somewhat similar to SPUR encoding - various-sized
non-object arrays
strings stored in UTF-8
Heap objects
header
Bits What Characteristics
12 length number of long-words beyond the header
4 age 0 - nursery, 1-7 teen, 8+ global
8 format
24 identityHash
16 classIndex LSB
recognize pointer-free instance variables and arrays separately
length of 4095 - forwarding pointer - copying, become:, promoted
format is somewhat similar to SPUR encoding - various-sized
non-object arrays
strings stored in UTF-8
Heap objects
header
Bits What Characteristics
12 length number of long-words beyond the header
4 age 0 - nursery, 1-7 teen, 8+ global
8 format
24 identityHash
16 classIndex LSB
recognize pointer-free instance variables and arrays separately
length of 4095 - forwarding pointer - copying, become:, promoted
format is somewhat similar to SPUR encoding - various-sized
non-object arrays
strings stored in UTF-8
Heap objects
header
Bits What Characteristics
12 length number of long-words beyond the header
4 age 0 - nursery, 1-7 teen, 8+ global
8 format
24 identityHash
16 classIndex LSB
recognize pointer-free instance variables and arrays separately
length of 4095 - forwarding pointer - copying, become:, promoted
format is somewhat similar to SPUR encoding - various-sized
non-object arrays
strings stored in UTF-8
Heap objects
header
Bits What Characteristics
12 length number of long-words beyond the header
4 age 0 - nursery, 1-7 teen, 8+ global
8 format
24 identityHash
16 classIndex LSB
recognize pointer-free instance variables and arrays separately
length of 4095 - forwarding pointer - copying, become:, promoted
format is somewhat similar to SPUR encoding - various-sized
non-object arrays
strings stored in UTF-8
Unified dispatch
single level of hashing for method dispatch
each class dispatch table has entry for every method it has been
sent - regardless of place in hierarchy
near-perfect hash using Φ hashing
standard SPUR/OpenVM optimizations don’t work well in
multi-core environments
Unified dispatch
single level of hashing for method dispatch
each class dispatch table has entry for every method it has been
sent - regardless of place in hierarchy
near-perfect hash using Φ hashing
standard SPUR/OpenVM optimizations don’t work well in
multi-core environments
Unified dispatch
single level of hashing for method dispatch
each class dispatch table has entry for every method it has been
sent - regardless of place in hierarchy
near-perfect hash using Φ hashing
standard SPUR/OpenVM optimizations don’t work well in
multi-core environments
Unified dispatch
single level of hashing for method dispatch
each class dispatch table has entry for every method it has been
sent - regardless of place in hierarchy
near-perfect hash using Φ hashing
standard SPUR/OpenVM optimizations don’t work well in
multi-core environments
High performance Inlining
references to self / super code are inlined
methods with small number of implementations are inlined - rather
than heuristic
prevents creation of many blocks
provides large compilation units for optimization
High performance Inlining
references to self / super code are inlined
methods with small number of implementations are inlined - rather
than heuristic
prevents creation of many blocks
provides large compilation units for optimization
High performance Inlining
references to self / super code are inlined
methods with small number of implementations are inlined - rather
than heuristic
prevents creation of many blocks
provides large compilation units for optimization
High performance Inlining
references to self / super code are inlined
methods with small number of implementations are inlined - rather
than heuristic
prevents creation of many blocks
provides large compilation units for optimization
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Code Generation
no interpreter, 3 code generation models
threaded-execution
method is sequence of Zig function addresses
uses Zig tail-call-elimination - passes pc, sp, hp, thread, context
primitives and control implementations
stand-alone generator
generates Zig code for methods
depends on Zig inlining and excellent code generation
JIT
future
LLVM jitter
Conclusions
while the intent of this paper is to provide design principles, also
described some implementation
this is preliminary work, so some open questions
many experiments to run to validate my intuitions
Conclusions
while the intent of this paper is to provide design principles, also
described some implementation
this is preliminary work, so some open questions
many experiments to run to validate my intuitions
Conclusions
while the intent of this paper is to provide design principles, also
described some implementation
this is preliminary work, so some open questions
many experiments to run to validate my intuitions
Questions?
@DrDaveMason dmason@ryerson.ca
https://github.com/dvmason/Zag-Smalltalk

Mais conteúdo relacionado

Mais procurados

Towards Object-centric Time-traveling Debuggers
 Towards Object-centric Time-traveling Debuggers Towards Object-centric Time-traveling Debuggers
Towards Object-centric Time-traveling DebuggersESUG
 
Improving Pharo Snapshots
Improving Pharo SnapshotsImproving Pharo Snapshots
Improving Pharo SnapshotsESUG
 
PharoJS: Pharo-Based TDD for Javascript Applications
PharoJS: Pharo-Based TDD for Javascript ApplicationsPharoJS: Pharo-Based TDD for Javascript Applications
PharoJS: Pharo-Based TDD for Javascript ApplicationsESUG
 
PharoJS: Hijack the JavaScript Ecosystem
PharoJS: Hijack the JavaScript EcosystemPharoJS: Hijack the JavaScript Ecosystem
PharoJS: Hijack the JavaScript EcosystemESUG
 
Case Study: Migration to GitLab (from Bitbucket) at AppsFlyer
Case Study: Migration to GitLab (from Bitbucket) at AppsFlyerCase Study: Migration to GitLab (from Bitbucket) at AppsFlyer
Case Study: Migration to GitLab (from Bitbucket) at AppsFlyerNoa Harel
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3Angel Boy
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)Angel Boy
 
Deep dark-side of git: How git works internally
Deep dark-side of git: How git works internallyDeep dark-side of git: How git works internally
Deep dark-side of git: How git works internallySeongJae Park
 
Performance of Microservice frameworks on different JVMs
Performance of Microservice frameworks on different JVMsPerformance of Microservice frameworks on different JVMs
Performance of Microservice frameworks on different JVMsMaarten Smeets
 
Git and GitFlow branching model
Git and GitFlow branching modelGit and GitFlow branching model
Git and GitFlow branching modelPavlo Hodysh
 
Git and GitHub | Concept about Git and GitHub Process | Git Process overview
Git and GitHub | Concept about Git and GitHub Process | Git Process overviewGit and GitHub | Concept about Git and GitHub Process | Git Process overview
Git and GitHub | Concept about Git and GitHub Process | Git Process overviewRueful Robin
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow soloviniciusban
 
Git workflows
Git workflowsGit workflows
Git workflowsXpand IT
 
Top 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applicationsTop 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applicationshadooparchbook
 
Building Modern Data Streaming Apps with Python
Building Modern Data Streaming Apps with PythonBuilding Modern Data Streaming Apps with Python
Building Modern Data Streaming Apps with PythonTimothy Spann
 
Git branching strategies
Git branching strategiesGit branching strategies
Git branching strategiesjstack
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machineAlexei Starovoitov
 
The state of passwordless auth on the web
The state of passwordless auth on the web The state of passwordless auth on the web
The state of passwordless auth on the web Phil Nash
 

Mais procurados (20)

Towards Object-centric Time-traveling Debuggers
 Towards Object-centric Time-traveling Debuggers Towards Object-centric Time-traveling Debuggers
Towards Object-centric Time-traveling Debuggers
 
Improving Pharo Snapshots
Improving Pharo SnapshotsImproving Pharo Snapshots
Improving Pharo Snapshots
 
PharoJS: Pharo-Based TDD for Javascript Applications
PharoJS: Pharo-Based TDD for Javascript ApplicationsPharoJS: Pharo-Based TDD for Javascript Applications
PharoJS: Pharo-Based TDD for Javascript Applications
 
PharoJS: Hijack the JavaScript Ecosystem
PharoJS: Hijack the JavaScript EcosystemPharoJS: Hijack the JavaScript Ecosystem
PharoJS: Hijack the JavaScript Ecosystem
 
Case Study: Migration to GitLab (from Bitbucket) at AppsFlyer
Case Study: Migration to GitLab (from Bitbucket) at AppsFlyerCase Study: Migration to GitLab (from Bitbucket) at AppsFlyer
Case Study: Migration to GitLab (from Bitbucket) at AppsFlyer
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
 
Deep dark-side of git: How git works internally
Deep dark-side of git: How git works internallyDeep dark-side of git: How git works internally
Deep dark-side of git: How git works internally
 
Performance of Microservice frameworks on different JVMs
Performance of Microservice frameworks on different JVMsPerformance of Microservice frameworks on different JVMs
Performance of Microservice frameworks on different JVMs
 
Git and GitFlow branching model
Git and GitFlow branching modelGit and GitFlow branching model
Git and GitFlow branching model
 
Git and GitHub | Concept about Git and GitHub Process | Git Process overview
Git and GitHub | Concept about Git and GitHub Process | Git Process overviewGit and GitHub | Concept about Git and GitHub Process | Git Process overview
Git and GitHub | Concept about Git and GitHub Process | Git Process overview
 
Klee and angr
Klee and angrKlee and angr
Klee and angr
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow solo
 
Git internals
Git internalsGit internals
Git internals
 
Git workflows
Git workflowsGit workflows
Git workflows
 
Top 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applicationsTop 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applications
 
Building Modern Data Streaming Apps with Python
Building Modern Data Streaming Apps with PythonBuilding Modern Data Streaming Apps with Python
Building Modern Data Streaming Apps with Python
 
Git branching strategies
Git branching strategiesGit branching strategies
Git branching strategies
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machine
 
The state of passwordless auth on the web
The state of passwordless auth on the web The state of passwordless auth on the web
The state of passwordless auth on the web
 

Semelhante a Design Principles for a High-Performance Smalltalk

[HITB Malaysia 2011] Exploit Automation
[HITB Malaysia 2011] Exploit Automation[HITB Malaysia 2011] Exploit Automation
[HITB Malaysia 2011] Exploit AutomationMoabi.com
 
Low Level Exploits
Low Level ExploitsLow Level Exploits
Low Level Exploitshughpearse
 
[Kiwicon 2011] Post Memory Corruption Memory Analysis
[Kiwicon 2011] Post Memory Corruption Memory Analysis[Kiwicon 2011] Post Memory Corruption Memory Analysis
[Kiwicon 2011] Post Memory Corruption Memory AnalysisMoabi.com
 
[Ruxcon 2011] Post Memory Corruption Memory Analysis
[Ruxcon 2011] Post Memory Corruption Memory Analysis[Ruxcon 2011] Post Memory Corruption Memory Analysis
[Ruxcon 2011] Post Memory Corruption Memory AnalysisMoabi.com
 
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast EnoughScylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast EnoughScyllaDB
 
[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory Analysis[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory AnalysisMoabi.com
 
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)Erik Hatcher
 
Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...
Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...
Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...RootedCON
 
AOS Lab 10: File system -- Inodes and beyond
AOS Lab 10: File system -- Inodes and beyondAOS Lab 10: File system -- Inodes and beyond
AOS Lab 10: File system -- Inodes and beyondZubair Nabi
 
Sangam 18 - Database Development: Return of the SQL Jedi
Sangam 18 - Database Development: Return of the SQL JediSangam 18 - Database Development: Return of the SQL Jedi
Sangam 18 - Database Development: Return of the SQL JediConnor McDonald
 
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...DefconRussia
 
Preventing cpu side channel attacks with kernel tracking
Preventing cpu side channel attacks with kernel trackingPreventing cpu side channel attacks with kernel tracking
Preventing cpu side channel attacks with kernel trackingMarian Marinov
 
Slackware Demystified [SELF 2011]
Slackware Demystified [SELF 2011]Slackware Demystified [SELF 2011]
Slackware Demystified [SELF 2011]Vincent Batts
 
“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage CollectionHaim Yadid
 
AOS Lab 9: File system -- Of buffers, logs, and blocks
AOS Lab 9: File system -- Of buffers, logs, and blocksAOS Lab 9: File system -- Of buffers, logs, and blocks
AOS Lab 9: File system -- Of buffers, logs, and blocksZubair Nabi
 
The Computer Science Behind a modern Distributed Database
The Computer Science Behind a modern Distributed DatabaseThe Computer Science Behind a modern Distributed Database
The Computer Science Behind a modern Distributed DatabaseArangoDB Database
 
Root file system
Root file systemRoot file system
Root file systemBindu U
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 

Semelhante a Design Principles for a High-Performance Smalltalk (20)

[HITB Malaysia 2011] Exploit Automation
[HITB Malaysia 2011] Exploit Automation[HITB Malaysia 2011] Exploit Automation
[HITB Malaysia 2011] Exploit Automation
 
Low Level Exploits
Low Level ExploitsLow Level Exploits
Low Level Exploits
 
[Kiwicon 2011] Post Memory Corruption Memory Analysis
[Kiwicon 2011] Post Memory Corruption Memory Analysis[Kiwicon 2011] Post Memory Corruption Memory Analysis
[Kiwicon 2011] Post Memory Corruption Memory Analysis
 
[Ruxcon 2011] Post Memory Corruption Memory Analysis
[Ruxcon 2011] Post Memory Corruption Memory Analysis[Ruxcon 2011] Post Memory Corruption Memory Analysis
[Ruxcon 2011] Post Memory Corruption Memory Analysis
 
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast EnoughScylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
 
[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory Analysis[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory Analysis
 
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
 
Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...
Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...
Sergi Álvarez + Roi Martín - radare2: From forensics to bindiffing [RootedCON...
 
AOS Lab 10: File system -- Inodes and beyond
AOS Lab 10: File system -- Inodes and beyondAOS Lab 10: File system -- Inodes and beyond
AOS Lab 10: File system -- Inodes and beyond
 
Sangam 18 - Database Development: Return of the SQL Jedi
Sangam 18 - Database Development: Return of the SQL JediSangam 18 - Database Development: Return of the SQL Jedi
Sangam 18 - Database Development: Return of the SQL Jedi
 
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
 
Preventing cpu side channel attacks with kernel tracking
Preventing cpu side channel attacks with kernel trackingPreventing cpu side channel attacks with kernel tracking
Preventing cpu side channel attacks with kernel tracking
 
Slackware Demystified [SELF 2011]
Slackware Demystified [SELF 2011]Slackware Demystified [SELF 2011]
Slackware Demystified [SELF 2011]
 
“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection
 
AOS Lab 9: File system -- Of buffers, logs, and blocks
AOS Lab 9: File system -- Of buffers, logs, and blocksAOS Lab 9: File system -- Of buffers, logs, and blocks
AOS Lab 9: File system -- Of buffers, logs, and blocks
 
55 New Features in Java 7
55 New Features in Java 755 New Features in Java 7
55 New Features in Java 7
 
The Computer Science Behind a modern Distributed Database
The Computer Science Behind a modern Distributed DatabaseThe Computer Science Behind a modern Distributed Database
The Computer Science Behind a modern Distributed Database
 
Root file system
Root file systemRoot file system
Root file system
 
Unixfs
UnixfsUnixfs
Unixfs
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 

Mais de ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

Mais de ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Último

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 

Último (20)

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 

Design Principles for a High-Performance Smalltalk

  • 1. Design Principles for a High-Performance Smalltalk Dave Mason Toronto Metropolitan Universityi ©2022 Dave Mason
  • 2. Design Principles Large memories 64-bit and IEEE-768 Multi-core and threading Fast execution
  • 3. Design Principles Large memories 64-bit and IEEE-768 Multi-core and threading Fast execution
  • 4. Design Principles Large memories 64-bit and IEEE-768 Multi-core and threading Fast execution
  • 5. Design Principles Large memories 64-bit and IEEE-768 Multi-core and threading Fast execution
  • 6. Zag Smalltalk from-scratch implementation low-level is implemented in Zig goal is to support existing OpenSmalltalk systems don’t want to rewrite userland!
  • 7. Zag Smalltalk from-scratch implementation low-level is implemented in Zig goal is to support existing OpenSmalltalk systems don’t want to rewrite userland!
  • 8. Zag Smalltalk from-scratch implementation low-level is implemented in Zig goal is to support existing OpenSmalltalk systems don’t want to rewrite userland!
  • 9. Zag Smalltalk from-scratch implementation low-level is implemented in Zig goal is to support existing OpenSmalltalk systems don’t want to rewrite userland!
  • 10. Immediate Values 64 bit NaN-boxing double-floats, 51-bit SmallInteger, Booleans, nil, Unicode characters, Symbols room for instances of any type with single 32-bit value
  • 11. Immediate Values 64 bit NaN-boxing double-floats, 51-bit SmallInteger, Booleans, nil, Unicode characters, Symbols room for instances of any type with single 32-bit value
  • 12. Immediate Values 64 bit NaN-boxing double-floats, 51-bit SmallInteger, Booleans, nil, Unicode characters, Symbols room for instances of any type with single 32-bit value
  • 13. Immediate Values 64 bit NaN-boxing double-floats, 51-bit SmallInteger, Booleans, nil, Unicode characters, Symbols room for instances of any type with single 32-bit value
  • 14. S+E F F F Type 0000 0000 0000 0000 double +0 0000-7FEF xxxx xxxx xxxx double (positive) 7FF0 0000 0000 0000 +inf 7FF0-F xxxx xxxx xxxx NaN (unused) 8000 0000 0000 0000 double -0 8000-FFEF xxxx xxxx xxxx double (negative) FFF0 0000 0000 0000 -inf FFF0-5 xxxx xxxx xxxx NaN (currently unused) FFF6 xxxx xxxx xxxx heap object FFF7 0001 xxxx xxxx reserved (tag = Object) FFF7 0002 xxxx xxxx reserved (tag = SmallInteger) FFF7 0003 xxxx xxxx reserved (tag = Double) FFF7 0004 0001 0000 False FFF7 0005 0010 0001 True FFF7 0006 0100 0002 UndefinedObject FFF7 0007 aaxx xxxx Symbol FFF7 0008 00xx xxxx Character FFF8-F xxxx xxxx xxxx SmallInteger FFF8 0000 0000 0000 SmallInteger minVal FFFC 0000 0000 0000 SmallInteger 0 FFFF FFFF FFFF FFFF SmallInteger maxVal
  • 15. Multi-core support only way to speed up applications minimal blocking computational/mutator threads - typically 1 per core I/O threads - one per open “file” global collector thread
  • 16. Multi-core support only way to speed up applications minimal blocking computational/mutator threads - typically 1 per core I/O threads - one per open “file” global collector thread
  • 17. Multi-core support only way to speed up applications minimal blocking computational/mutator threads - typically 1 per core I/O threads - one per open “file” global collector thread
  • 18. Multi-core support only way to speed up applications minimal blocking computational/mutator threads - typically 1 per core I/O threads - one per open “file” global collector thread
  • 19. Multi-core support only way to speed up applications minimal blocking computational/mutator threads - typically 1 per core I/O threads - one per open “file” global collector thread
  • 20. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 21. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 22. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 23. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 24. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 25. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 26. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 27. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 28. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 29. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 30. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 31. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 32. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 33. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 34. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 35. Memory management mutator threads copying collector private nursery (includes stack) 2 teen arenas - n copies before promotion when prompted, finds next 100 refs to global stack, then blocks, repeat then can proceed I/O threads maintains list of current shared buffers while I/O blocked global collector thread non-moving mark/sweep arena periodically does mark marks known shared structures (class table, symbol table, dispatch tables) asks mutators for global roots processes them until all roots have been found then can proceed to sweep ...
  • 36. ... Memory management global collector for non-moving mark-&-sweep uses Fibonacci heap (similar to Mist) large objects (e.g. 16Kib) have separately mapped pages (allows mmap of large files) to minimize memory creep
  • 37. ... Memory management global collector for non-moving mark-&-sweep uses Fibonacci heap (similar to Mist) large objects (e.g. 16Kib) have separately mapped pages (allows mmap of large files) to minimize memory creep
  • 38. ... Memory management global collector for non-moving mark-&-sweep uses Fibonacci heap (similar to Mist) large objects (e.g. 16Kib) have separately mapped pages (allows mmap of large files) to minimize memory creep
  • 39. Heap objects header Bits What Characteristics 12 length number of long-words beyond the header 4 age 0 - nursery, 1-7 teen, 8+ global 8 format 24 identityHash 16 classIndex LSB recognize pointer-free instance variables and arrays separately length of 4095 - forwarding pointer - copying, become:, promoted format is somewhat similar to SPUR encoding - various-sized non-object arrays strings stored in UTF-8
  • 40. Heap objects header Bits What Characteristics 12 length number of long-words beyond the header 4 age 0 - nursery, 1-7 teen, 8+ global 8 format 24 identityHash 16 classIndex LSB recognize pointer-free instance variables and arrays separately length of 4095 - forwarding pointer - copying, become:, promoted format is somewhat similar to SPUR encoding - various-sized non-object arrays strings stored in UTF-8
  • 41. Heap objects header Bits What Characteristics 12 length number of long-words beyond the header 4 age 0 - nursery, 1-7 teen, 8+ global 8 format 24 identityHash 16 classIndex LSB recognize pointer-free instance variables and arrays separately length of 4095 - forwarding pointer - copying, become:, promoted format is somewhat similar to SPUR encoding - various-sized non-object arrays strings stored in UTF-8
  • 42. Heap objects header Bits What Characteristics 12 length number of long-words beyond the header 4 age 0 - nursery, 1-7 teen, 8+ global 8 format 24 identityHash 16 classIndex LSB recognize pointer-free instance variables and arrays separately length of 4095 - forwarding pointer - copying, become:, promoted format is somewhat similar to SPUR encoding - various-sized non-object arrays strings stored in UTF-8
  • 43. Heap objects header Bits What Characteristics 12 length number of long-words beyond the header 4 age 0 - nursery, 1-7 teen, 8+ global 8 format 24 identityHash 16 classIndex LSB recognize pointer-free instance variables and arrays separately length of 4095 - forwarding pointer - copying, become:, promoted format is somewhat similar to SPUR encoding - various-sized non-object arrays strings stored in UTF-8
  • 44. Unified dispatch single level of hashing for method dispatch each class dispatch table has entry for every method it has been sent - regardless of place in hierarchy near-perfect hash using Φ hashing standard SPUR/OpenVM optimizations don’t work well in multi-core environments
  • 45. Unified dispatch single level of hashing for method dispatch each class dispatch table has entry for every method it has been sent - regardless of place in hierarchy near-perfect hash using Φ hashing standard SPUR/OpenVM optimizations don’t work well in multi-core environments
  • 46. Unified dispatch single level of hashing for method dispatch each class dispatch table has entry for every method it has been sent - regardless of place in hierarchy near-perfect hash using Φ hashing standard SPUR/OpenVM optimizations don’t work well in multi-core environments
  • 47. Unified dispatch single level of hashing for method dispatch each class dispatch table has entry for every method it has been sent - regardless of place in hierarchy near-perfect hash using Φ hashing standard SPUR/OpenVM optimizations don’t work well in multi-core environments
  • 48. High performance Inlining references to self / super code are inlined methods with small number of implementations are inlined - rather than heuristic prevents creation of many blocks provides large compilation units for optimization
  • 49. High performance Inlining references to self / super code are inlined methods with small number of implementations are inlined - rather than heuristic prevents creation of many blocks provides large compilation units for optimization
  • 50. High performance Inlining references to self / super code are inlined methods with small number of implementations are inlined - rather than heuristic prevents creation of many blocks provides large compilation units for optimization
  • 51. High performance Inlining references to self / super code are inlined methods with small number of implementations are inlined - rather than heuristic prevents creation of many blocks provides large compilation units for optimization
  • 52. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 53. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 54. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 55. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 56. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 57. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 58. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 59. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 60. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 61. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 62. Code Generation no interpreter, 3 code generation models threaded-execution method is sequence of Zig function addresses uses Zig tail-call-elimination - passes pc, sp, hp, thread, context primitives and control implementations stand-alone generator generates Zig code for methods depends on Zig inlining and excellent code generation JIT future LLVM jitter
  • 63. Conclusions while the intent of this paper is to provide design principles, also described some implementation this is preliminary work, so some open questions many experiments to run to validate my intuitions
  • 64. Conclusions while the intent of this paper is to provide design principles, also described some implementation this is preliminary work, so some open questions many experiments to run to validate my intuitions
  • 65. Conclusions while the intent of this paper is to provide design principles, also described some implementation this is preliminary work, so some open questions many experiments to run to validate my intuitions