SlideShare a Scribd company logo
1 of 27
Download to read offline
The road to the remote
debugger
Remote debugger behind the scenes
Seamless
Basys
ObjectTravel ObjectStatistics
TostSerializer
GT Extensions
GTInspector
GTDebugger
The road to the remote debugger
Debugger picture to
show separate views
StackView
SourceCodeView
VariablesView
Process suspendedContext
Stack
Sender context 1
Sender context 2
…
Each context
receiver
classselector
arguments
temps
method methodClass
temp names
instVarNames
source code
arg names
Exception signalerContext
Sender context 3
Root context
Each object
printString
Demo for slow remote
debugger
Seamless
• New Remote Smalltalk implementation
• Started at 2012 by Nikolaos Papoulias
• Redesigned this year
• http://smalltalkhub.com/#!/~Pharo/Seamless
Asynchronous network
• Simultaneous sending and receiving data
• Data sending not depends on data receiving
• Asynchronous processing of received data
• Data processing not blocks new incoming data
• Every received data is processed in separate
thread
Basys
• Bidirectional asynchronous network
• Client can send data to server
• Server can send data to client
• Both directions are equivalent
• But usually server can’t establish new
connections
• Asynchronous data transfer
Peer B
Peer A
Peer C
Basys models network as
connected peers
Network peer structure
BasysNetwork
BasysRemotePeer B
BasysLocalPeer
BasysRemotePeer C
localPeer
remotePeers
Peers interact by connection pool
Peer B
RemotePeer A
Peer A
RemotePeer B
Connection 1
Connection 2
Connection 3
Connection 1
Connection 2
Connection 3
Connection pool Connection pool
• Users not work directly with connections
• Users ask peer to send data to remote side
peer := network remotePeerAt: tcpAddress.
peer sendDataPacket: dataObject
• Connections are established by demand
• Established connections are reused
Peers interact by connection pool
Seamless implements Basys network
• What is data?
• aSeamlessRequest (MessageSendRequest, DeliveryResultRequest)
• What to do with data?
• aSeamlessRequest executeFor: senderPeer
Seamless implements Basys network
• What is data?
• aSeamlessRequest (MessageSendRequest, DeliveryResultRequest)
• What to do with data?
• aSeamlessRequest executeFor: senderPeer
• How to send data?
• objects are serialized on connection stream by serialization library.
• transfer strategies are applied to each node of given object graph to decide how to transfer
them:
• by value
• by reference
• others
• strategies are object specific and could be redefined for application
• How to receive data?
• objects are materialized from connection stream by serialization library.
• on receiver side they could be represented by specific objects (proxies, local globals)
Seamless
• First class strategies to transfer objects
• by value
• by reference
• by reference with cached properties
• properties can be transferred by reference too
• by referenced copy
• by deep copy
• by global name (to transfer well known globals)
• other specific strategies
Remote debugger tuning
network transferByReference: (Kind of: CompiledMethod) withCacheFor: #(selector
methodClass isTestMethod argumentNames).
network transferByReference: (Kind of: Context) withCacheFor: #(receiver method
methodClass methodSelector isBlockContext home tempNames isDead selector sender
debuggerMap outerContext outerMostContext closure).
network transferByValue: (Kind of: Slot).
network transferByReference: (Kind of: ClassDescription) withCacheFor: #(name
allInstVarNames allSlots).
network transferByValue: (Kind of: OrderedCollection).
network transferByValue: (Kind of: Set).
network transferByValue: (Kind of: Interval).
network transferByValue: (Kind of: Array).
Real debugger demo
• On server side:
• RemoteUIManager registerOnPort: 40423
• On client side:
• RemoteDebugger connectTo: anAddress
GT extensions
• GTInspetor on proxies:
• Raw tab for remote state
• Proxy tab for internal proxy state
• DoIt by SeamlessRemoteClassCompiler
• all variables and globals are bound to proxies
• self is bound to proxy
• #doIt method is compiled locally but executed on remote side
• remote side could not have compiler
TostSerializer
• Transient objects transport
• not for persistence
• serialize on sender and materialize on receiver
• No meta information for objects
• no versioning
• no migration support
• Objects are stream of references
• which directly written on output stream in same order
• which directly read from input stream in same order
• Support objects with cyclic references
• duplicated objects are encoded by stream position of original object
• Support for object substitutions
• substitutions are just injected into object stream
• Compact encoding for well known objects and classes
• one byte for encoding
TostSerializer in Seamless
• One pass object traversal
• With Fuel it was two:
• Fuel itself analyses object graph
• Seamless traverse object graph to build substitution map
• Very compact for small objects
• Smallest communication unit (integer return):
• 21 bytes for Tost versus 400 bytes for Fuel
• Many possibilities for new features and optimizations:
• references should not send cache back to server
• objects state synchronization between client and server
• cache should be updated when reference is received again from server
ObjectTravel
• Main part of TostSerializer
ObjectTravel
• Tool to stream objects
• traversal stream of inst vars and indexed fields
traveler := ObjectTravel on: (1@2 corner: 3@4).
traveler nextReference. “ => 1@2”
traveler nextReferece; nextReference. “=> 1”
“or”
traveler referencesDo: [:each | ].
• Support cyclic object graphs
• Allow inject external objects
traveler referencesDo: [:each |
each = 2 ifTrue: [traveler atNextStepVisit: 5@6]].
• Allow replace references
traveler referencesDo: [:each |
each = 2 ifTrue: [traveler replaceCurrentReferenceWith: 5]].
ObjectTravel
• Useful methods:
traveler := ObjectTravel on: (1@2 corner: 3@4).
• traveler countReferences “=> 6”
• traveler collectReferences “=> {1@2. 3@4. 1. 2. 3. 4}”
• traveler copyObject “=> deep copy of rectangle”
• traveler findAllPathTo: 2 “=> { {1@2} }”
ObjectStatistics
• Tool to analyze set of objects
• computes different kind of metrics from
different perspective (dimensions)
• simplistic OLAP Cube in objects space.
• Implements suitable GT extension
• Metrics and dimensions shown in tree way
inside GTInspector
SeamlessStatistics
stat := ObjectStatistics new.
stat
countAllAs: 'requests';
countDifferent: [ :r | r receiver ] as: 'instances' for: (Kind of: SeamlessMessageSendRequest);
countAllSuch: #isOutgoing as: 'outgoing';
countAllSuch: #isIncoming as: 'incoming'.
stat
dimension: [ :r | r class ] named: 'requests';
for: (Kind of: SeamlessMessageSendRequest) with: [
stat
dimension: [ :r | r receiver nameForSeamlessStatistics ] named: 'classes';
with: [
stat dimension: [ :r | r selector ] named: 'msgs'].
stat
dimension: [ :r | r selector ] named: 'msgs';
with: [
stat dimension: [ :r | r receiver nameForSeamlessStatistics ] named: 'classes']].
stat accumulateAll: requests.
Future work
• Remote browser
• More optimizations
• Better presentation of remote contexts
• Support for stepInto for remote call
• distributed stack in debugger
• Distributed garbage collection
• now it is absent
• “debugger disconnect” cleans everything
The end
• follow me on https://dionisiydk.blogspot.com
• questions?

More Related Content

What's hot

Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not JavaChris Adamson
 
Connecting to a REST API in iOS
Connecting to a REST API in iOSConnecting to a REST API in iOS
Connecting to a REST API in iOSgillygize
 
.NET Core, ASP.NET Core Course, Session 4
.NET Core, ASP.NET Core Course, Session 4.NET Core, ASP.NET Core Course, Session 4
.NET Core, ASP.NET Core Course, Session 4aminmesbahi
 
Cloud Infrastructures Slide Set 7 - Docker - Neo4j | anynines
Cloud Infrastructures Slide Set 7 - Docker - Neo4j | anyninesCloud Infrastructures Slide Set 7 - Docker - Neo4j | anynines
Cloud Infrastructures Slide Set 7 - Docker - Neo4j | anyninesanynines GmbH
 
Andrzej Ludwikowski - Event Sourcing - co może pójść nie tak?
Andrzej Ludwikowski -  Event Sourcing - co może pójść nie tak?Andrzej Ludwikowski -  Event Sourcing - co może pójść nie tak?
Andrzej Ludwikowski - Event Sourcing - co może pójść nie tak?SegFaultConf
 
Load testing in Zonky with Gatling
Load testing in Zonky with GatlingLoad testing in Zonky with Gatling
Load testing in Zonky with GatlingPetr Vlček
 
Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Andy Bunce
 
Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)SATOSHI TAGOMORI
 
Scalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDBScalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDBWilliam Candillon
 
9781305078444 ppt ch12
9781305078444 ppt ch129781305078444 ppt ch12
9781305078444 ppt ch12Terry Yoast
 
Serialization/deserialization
Serialization/deserializationSerialization/deserialization
Serialization/deserializationYoung Alista
 
PHP Starter Application
PHP Starter ApplicationPHP Starter Application
PHP Starter Applicationkimprince
 
Twisted Introduction
Twisted IntroductionTwisted Introduction
Twisted Introductioncyli
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldChristian Melchior
 

What's hot (20)

Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
 
Connecting to a REST API in iOS
Connecting to a REST API in iOSConnecting to a REST API in iOS
Connecting to a REST API in iOS
 
.NET Core, ASP.NET Core Course, Session 4
.NET Core, ASP.NET Core Course, Session 4.NET Core, ASP.NET Core Course, Session 4
.NET Core, ASP.NET Core Course, Session 4
 
javaScript and jQuery
javaScript and jQueryjavaScript and jQuery
javaScript and jQuery
 
Cloud Infrastructures Slide Set 7 - Docker - Neo4j | anynines
Cloud Infrastructures Slide Set 7 - Docker - Neo4j | anyninesCloud Infrastructures Slide Set 7 - Docker - Neo4j | anynines
Cloud Infrastructures Slide Set 7 - Docker - Neo4j | anynines
 
Andrzej Ludwikowski - Event Sourcing - co może pójść nie tak?
Andrzej Ludwikowski -  Event Sourcing - co może pójść nie tak?Andrzej Ludwikowski -  Event Sourcing - co może pójść nie tak?
Andrzej Ludwikowski - Event Sourcing - co może pójść nie tak?
 
Lokijs
LokijsLokijs
Lokijs
 
Load testing in Zonky with Gatling
Load testing in Zonky with GatlingLoad testing in Zonky with Gatling
Load testing in Zonky with Gatling
 
Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application
 
Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)
 
Scalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDBScalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDB
 
Ajax
AjaxAjax
Ajax
 
9781305078444 ppt ch12
9781305078444 ppt ch129781305078444 ppt ch12
9781305078444 ppt ch12
 
Extending Node.js using C++
Extending Node.js using C++Extending Node.js using C++
Extending Node.js using C++
 
Serialization/deserialization
Serialization/deserializationSerialization/deserialization
Serialization/deserialization
 
PHP Starter Application
PHP Starter ApplicationPHP Starter Application
PHP Starter Application
 
Twisted Introduction
Twisted IntroductionTwisted Introduction
Twisted Introduction
 
XQuery in the Cloud
XQuery in the CloudXQuery in the Cloud
XQuery in the Cloud
 
Linq
LinqLinq
Linq
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected World
 

Viewers also liked

Stories About Renraku — the new Quality Model of Pharo
Stories About Renraku — the new Quality Model of PharoStories About Renraku — the new Quality Model of Pharo
Stories About Renraku — the new Quality Model of PharoESUG
 
Replicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed ApplicationsReplicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed ApplicationsESUG
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceESUG
 
seamless – Object Oriented CMS System
seamless – Object Oriented CMS Systemseamless – Object Oriented CMS System
seamless – Object Oriented CMS SystemESUG
 
Smalltalk Metaprogramming supports Probabilistic Program Analysis
Smalltalk Metaprogramming supports Probabilistic Program AnalysisSmalltalk Metaprogramming supports Probabilistic Program Analysis
Smalltalk Metaprogramming supports Probabilistic Program AnalysisESUG
 

Viewers also liked (6)

Mocketry
MocketryMocketry
Mocketry
 
Stories About Renraku — the new Quality Model of Pharo
Stories About Renraku — the new Quality Model of PharoStories About Renraku — the new Quality Model of Pharo
Stories About Renraku — the new Quality Model of Pharo
 
Replicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed ApplicationsReplicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed Applications
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
 
seamless – Object Oriented CMS System
seamless – Object Oriented CMS Systemseamless – Object Oriented CMS System
seamless – Object Oriented CMS System
 
Smalltalk Metaprogramming supports Probabilistic Program Analysis
Smalltalk Metaprogramming supports Probabilistic Program AnalysisSmalltalk Metaprogramming supports Probabilistic Program Analysis
Smalltalk Metaprogramming supports Probabilistic Program Analysis
 

Similar to The road to remote debugger

Stream processing from single node to a cluster
Stream processing from single node to a clusterStream processing from single node to a cluster
Stream processing from single node to a clusterGal Marder
 
Perfect Norikra 2nd Season
Perfect Norikra 2nd SeasonPerfect Norikra 2nd Season
Perfect Norikra 2nd SeasonSATOSHI TAGOMORI
 
SpringPeople Introduction to HTML5 & CSS3
SpringPeople Introduction to HTML5 & CSS3SpringPeople Introduction to HTML5 & CSS3
SpringPeople Introduction to HTML5 & CSS3SpringPeople
 
[Distributed System] ch4. interprocess communication
[Distributed System] ch4. interprocess communication[Distributed System] ch4. interprocess communication
[Distributed System] ch4. interprocess communicationGyuhyeon Nam
 
Spatial Data in SQL Server
Spatial Data in SQL ServerSpatial Data in SQL Server
Spatial Data in SQL ServerEduardo Castro
 
IoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for InteroperabilityIoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for InteroperabilityMichael Koster
 
IoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for InteroperabilityIoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for InteroperabilityMichael Koster
 
Iot Toolkit and the Smart Object API - Architecture for Interoperability
Iot Toolkit and the Smart Object API - Architecture for InteroperabilityIot Toolkit and the Smart Object API - Architecture for Interoperability
Iot Toolkit and the Smart Object API - Architecture for InteroperabilityMichael Koster
 
Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014StampedeCon
 
FP Days: Down the Clojure Rabbit Hole
FP Days: Down the Clojure Rabbit HoleFP Days: Down the Clojure Rabbit Hole
FP Days: Down the Clojure Rabbit HoleChristophe Grand
 
.NET UY Meetup 7 - CLR Memory by Fabian Alves
.NET UY Meetup 7 - CLR Memory by Fabian Alves.NET UY Meetup 7 - CLR Memory by Fabian Alves
.NET UY Meetup 7 - CLR Memory by Fabian Alves.NET UY Meetup
 
NGSI: Geoqueries & Carto integration
NGSI: Geoqueries & Carto integrationNGSI: Geoqueries & Carto integration
NGSI: Geoqueries & Carto integrationFIWARE
 
Decima Engine: Visibility in Horizon Zero Dawn
Decima Engine: Visibility in Horizon Zero DawnDecima Engine: Visibility in Horizon Zero Dawn
Decima Engine: Visibility in Horizon Zero DawnGuerrilla
 
Object models for interoperability
Object models for interoperabilityObject models for interoperability
Object models for interoperabilityMichael Koster
 
M2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT ToolkitM2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT ToolkitMichael Koster
 
M2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT ToolkitM2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT ToolkitMichael Koster
 
Introduction to SolrCloud
Introduction to SolrCloudIntroduction to SolrCloud
Introduction to SolrCloudVarun Thacker
 

Similar to The road to remote debugger (20)

Stream processing from single node to a cluster
Stream processing from single node to a clusterStream processing from single node to a cluster
Stream processing from single node to a cluster
 
Perfect Norikra 2nd Season
Perfect Norikra 2nd SeasonPerfect Norikra 2nd Season
Perfect Norikra 2nd Season
 
SpringPeople Introduction to HTML5 & CSS3
SpringPeople Introduction to HTML5 & CSS3SpringPeople Introduction to HTML5 & CSS3
SpringPeople Introduction to HTML5 & CSS3
 
[Distributed System] ch4. interprocess communication
[Distributed System] ch4. interprocess communication[Distributed System] ch4. interprocess communication
[Distributed System] ch4. interprocess communication
 
Spatial Data in SQL Server
Spatial Data in SQL ServerSpatial Data in SQL Server
Spatial Data in SQL Server
 
IoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for InteroperabilityIoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for Interoperability
 
IoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for InteroperabilityIoT Toolkit and the Smart Object API - Architecture for Interoperability
IoT Toolkit and the Smart Object API - Architecture for Interoperability
 
Iot Toolkit and the Smart Object API - Architecture for Interoperability
Iot Toolkit and the Smart Object API - Architecture for InteroperabilityIot Toolkit and the Smart Object API - Architecture for Interoperability
Iot Toolkit and the Smart Object API - Architecture for Interoperability
 
No sql Database
No sql DatabaseNo sql Database
No sql Database
 
Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014
 
React-Native Lecture 11: In App Storage
React-Native Lecture 11: In App StorageReact-Native Lecture 11: In App Storage
React-Native Lecture 11: In App Storage
 
FP Days: Down the Clojure Rabbit Hole
FP Days: Down the Clojure Rabbit HoleFP Days: Down the Clojure Rabbit Hole
FP Days: Down the Clojure Rabbit Hole
 
.NET UY Meetup 7 - CLR Memory by Fabian Alves
.NET UY Meetup 7 - CLR Memory by Fabian Alves.NET UY Meetup 7 - CLR Memory by Fabian Alves
.NET UY Meetup 7 - CLR Memory by Fabian Alves
 
Scalable IoT platform
Scalable IoT platformScalable IoT platform
Scalable IoT platform
 
NGSI: Geoqueries & Carto integration
NGSI: Geoqueries & Carto integrationNGSI: Geoqueries & Carto integration
NGSI: Geoqueries & Carto integration
 
Decima Engine: Visibility in Horizon Zero Dawn
Decima Engine: Visibility in Horizon Zero DawnDecima Engine: Visibility in Horizon Zero Dawn
Decima Engine: Visibility in Horizon Zero Dawn
 
Object models for interoperability
Object models for interoperabilityObject models for interoperability
Object models for interoperability
 
M2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT ToolkitM2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT Toolkit
 
M2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT ToolkitM2M Protocol Interoperability using IoT Toolkit
M2M Protocol Interoperability using IoT Toolkit
 
Introduction to SolrCloud
Introduction to SolrCloudIntroduction to SolrCloud
Introduction to SolrCloud
 

More from 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
 

More from 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
 

Recently uploaded

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
 
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
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
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
 
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
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
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
 
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
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
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
 

Recently uploaded (20)

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
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
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
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
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 ☂️
 
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
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
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
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
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 ...
 
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
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
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
 

The road to remote debugger

  • 1. The road to the remote debugger Remote debugger behind the scenes
  • 3. Debugger picture to show separate views StackView SourceCodeView VariablesView
  • 4. Process suspendedContext Stack Sender context 1 Sender context 2 … Each context receiver classselector arguments temps method methodClass temp names instVarNames source code arg names Exception signalerContext Sender context 3 Root context Each object printString
  • 5. Demo for slow remote debugger
  • 6. Seamless • New Remote Smalltalk implementation • Started at 2012 by Nikolaos Papoulias • Redesigned this year • http://smalltalkhub.com/#!/~Pharo/Seamless
  • 7. Asynchronous network • Simultaneous sending and receiving data • Data sending not depends on data receiving • Asynchronous processing of received data • Data processing not blocks new incoming data • Every received data is processed in separate thread
  • 8. Basys • Bidirectional asynchronous network • Client can send data to server • Server can send data to client • Both directions are equivalent • But usually server can’t establish new connections • Asynchronous data transfer
  • 9. Peer B Peer A Peer C Basys models network as connected peers
  • 10. Network peer structure BasysNetwork BasysRemotePeer B BasysLocalPeer BasysRemotePeer C localPeer remotePeers
  • 11. Peers interact by connection pool Peer B RemotePeer A Peer A RemotePeer B Connection 1 Connection 2 Connection 3 Connection 1 Connection 2 Connection 3 Connection pool Connection pool
  • 12. • Users not work directly with connections • Users ask peer to send data to remote side peer := network remotePeerAt: tcpAddress. peer sendDataPacket: dataObject • Connections are established by demand • Established connections are reused Peers interact by connection pool
  • 13. Seamless implements Basys network • What is data? • aSeamlessRequest (MessageSendRequest, DeliveryResultRequest) • What to do with data? • aSeamlessRequest executeFor: senderPeer
  • 14. Seamless implements Basys network • What is data? • aSeamlessRequest (MessageSendRequest, DeliveryResultRequest) • What to do with data? • aSeamlessRequest executeFor: senderPeer • How to send data? • objects are serialized on connection stream by serialization library. • transfer strategies are applied to each node of given object graph to decide how to transfer them: • by value • by reference • others • strategies are object specific and could be redefined for application • How to receive data? • objects are materialized from connection stream by serialization library. • on receiver side they could be represented by specific objects (proxies, local globals)
  • 15. Seamless • First class strategies to transfer objects • by value • by reference • by reference with cached properties • properties can be transferred by reference too • by referenced copy • by deep copy • by global name (to transfer well known globals) • other specific strategies
  • 16. Remote debugger tuning network transferByReference: (Kind of: CompiledMethod) withCacheFor: #(selector methodClass isTestMethod argumentNames). network transferByReference: (Kind of: Context) withCacheFor: #(receiver method methodClass methodSelector isBlockContext home tempNames isDead selector sender debuggerMap outerContext outerMostContext closure). network transferByValue: (Kind of: Slot). network transferByReference: (Kind of: ClassDescription) withCacheFor: #(name allInstVarNames allSlots). network transferByValue: (Kind of: OrderedCollection). network transferByValue: (Kind of: Set). network transferByValue: (Kind of: Interval). network transferByValue: (Kind of: Array).
  • 17. Real debugger demo • On server side: • RemoteUIManager registerOnPort: 40423 • On client side: • RemoteDebugger connectTo: anAddress
  • 18. GT extensions • GTInspetor on proxies: • Raw tab for remote state • Proxy tab for internal proxy state • DoIt by SeamlessRemoteClassCompiler • all variables and globals are bound to proxies • self is bound to proxy • #doIt method is compiled locally but executed on remote side • remote side could not have compiler
  • 19. TostSerializer • Transient objects transport • not for persistence • serialize on sender and materialize on receiver • No meta information for objects • no versioning • no migration support • Objects are stream of references • which directly written on output stream in same order • which directly read from input stream in same order • Support objects with cyclic references • duplicated objects are encoded by stream position of original object • Support for object substitutions • substitutions are just injected into object stream • Compact encoding for well known objects and classes • one byte for encoding
  • 20. TostSerializer in Seamless • One pass object traversal • With Fuel it was two: • Fuel itself analyses object graph • Seamless traverse object graph to build substitution map • Very compact for small objects • Smallest communication unit (integer return): • 21 bytes for Tost versus 400 bytes for Fuel • Many possibilities for new features and optimizations: • references should not send cache back to server • objects state synchronization between client and server • cache should be updated when reference is received again from server
  • 21. ObjectTravel • Main part of TostSerializer
  • 22. ObjectTravel • Tool to stream objects • traversal stream of inst vars and indexed fields traveler := ObjectTravel on: (1@2 corner: 3@4). traveler nextReference. “ => 1@2” traveler nextReferece; nextReference. “=> 1” “or” traveler referencesDo: [:each | ]. • Support cyclic object graphs • Allow inject external objects traveler referencesDo: [:each | each = 2 ifTrue: [traveler atNextStepVisit: 5@6]]. • Allow replace references traveler referencesDo: [:each | each = 2 ifTrue: [traveler replaceCurrentReferenceWith: 5]].
  • 23. ObjectTravel • Useful methods: traveler := ObjectTravel on: (1@2 corner: 3@4). • traveler countReferences “=> 6” • traveler collectReferences “=> {1@2. 3@4. 1. 2. 3. 4}” • traveler copyObject “=> deep copy of rectangle” • traveler findAllPathTo: 2 “=> { {1@2} }”
  • 24. ObjectStatistics • Tool to analyze set of objects • computes different kind of metrics from different perspective (dimensions) • simplistic OLAP Cube in objects space. • Implements suitable GT extension • Metrics and dimensions shown in tree way inside GTInspector
  • 25. SeamlessStatistics stat := ObjectStatistics new. stat countAllAs: 'requests'; countDifferent: [ :r | r receiver ] as: 'instances' for: (Kind of: SeamlessMessageSendRequest); countAllSuch: #isOutgoing as: 'outgoing'; countAllSuch: #isIncoming as: 'incoming'. stat dimension: [ :r | r class ] named: 'requests'; for: (Kind of: SeamlessMessageSendRequest) with: [ stat dimension: [ :r | r receiver nameForSeamlessStatistics ] named: 'classes'; with: [ stat dimension: [ :r | r selector ] named: 'msgs']. stat dimension: [ :r | r selector ] named: 'msgs'; with: [ stat dimension: [ :r | r receiver nameForSeamlessStatistics ] named: 'classes']]. stat accumulateAll: requests.
  • 26. Future work • Remote browser • More optimizations • Better presentation of remote contexts • Support for stepInto for remote call • distributed stack in debugger • Distributed garbage collection • now it is absent • “debugger disconnect” cleans everything
  • 27. The end • follow me on https://dionisiydk.blogspot.com • questions?