SlideShare une entreprise Scribd logo
1  sur  93
Télécharger pour lire hors ligne
Letting Smalltalk Loose

                           Jorge Ressia

                         www.scg.unibe.ch

Tuesday, August 23, 11
Computer
                         revolution has not
                           happened yet


Tuesday, August 23, 11
Computer
                         revolution has not
                           happened yet
                                           Kay997
                                      Alan PSLA 1
                                               O
                                     Keynote O




Tuesday, August 23, 11
improve previous
                          ways of thinking



Tuesday, August 23, 11
create new
                         ways of thinking



Tuesday, August 23, 11
Object-oriented
                          Programming


Tuesday, August 23, 11
Dynamic



Tuesday, August 23, 11
We still go back to
                          the source code


Tuesday, August 23, 11
Debugging



Tuesday, August 23, 11
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Tuesday, August 23, 11
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Tuesday, August 23, 11
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Tuesday, August 23, 11
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Tuesday, August 23, 11
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Tuesday, August 23, 11
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Tuesday, August 23, 11
{               {
                             {                   {
                                                     }
                                 }
                                 }
                                     }       {       }




Tuesday, August 23, 11
Profiling



Tuesday, August 23, 11
Domain-Sp

                                                              CPU time profiling
                                                              Mondrian [9] is an open and agile visualization engine.
                                                              visualization using a graph of (possibly nested) nodes an




                                                     Profile
                                                              a serious performance issue was raised1 . Tracking down
                                                              performance was not trivial. We first used a standard sam
                                                                   Execution sampling approximates the time spent in an
                                                              by periodically stopping a program and recording the cu
                                                              under executions. Such a profiling technique is relatively
                                                              little impact on the overall execution. This sampling techn
                                                              all mainstream profilers, such as JProfiler, YourKit, xprof
                                                                   MessageTally, the standard sampling-based profiler in P
                                                              tually describes the execution in terms of CPU consumpt
                                                              each method of Mondrian:
                                                              54.8% {11501ms} MOCanvas>>drawOn:
                                                               54.8% {11501ms} MORoot(MONode)>>displayOn:
                                                                30.9% {6485ms} MONode>>displayOn:
                  {                  {                            | 18.1% {3799ms} MOEdge>>displayOn:
                         {                   {                       ...
                                                 }                | 8.4% {1763ms} MOEdge>>displayOn:
                             }
                             }
                                                                  | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                                                                  | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                                 }       {       }                  ...
                                                                23.4% {4911ms} MOEdge>>displayOn:
                                                                    ...

                                                                 We can observe that the virtual machine spent abou
                                                              the method displayOn: defined in the class MORoot. A ro
                                                              nested node that contains all the nodes of the edges of t
                                                              general profiling information says that rendering nodes a
                                                              great share of the CPU time, but it does not help in pin
                                                              and edges are responsible for the time spent. Not all grap
                                                              consume resources.
                                                                 Traditional execution sampling profilers center their r
                                                              the execution stack and completely ignore the identity of th
                                                              the method call and its arguments. As a consequence, it
                                                              which objects cause the slowdown. For the example above,
                                                              says that we spent 30.9% in MONode>>displayOn: withou
                                                              were actually refreshed too often.

                                                              Coverage
                                                              PetitParser is a parsing framework combining ideas from
                                                              parser combinators, parsing expression grammars and pac
                                                              grammars and parsers as objects that can be reconfigured
Tuesday, August 23, 11                                        1
                                                                  http://forum.world.st/Mondrian-is-slow-next-step-tc
CPU time profiling
                                                          Mondrian [9] is an open and agile visualization engine.




                                                 Profile
                                                          visualization using a graph of (possibly nested) nodes an
                                                          a serious performance issue was raised1 . Tracking down
                                                          performance was not trivial. We first used a standard sam
                                                               Execution sampling approximates the time spent in an
                                                          by periodically stopping a program and recording the cu
                                                          under executions. Such a profiling technique is relatively
                                                          little impact on the overall execution. This sampling techn
                                                          all mainstream profilers, such as JProfiler, YourKit, xprof
                                                               MessageTally, the standard sampling-based profiler in P
                                                          tually describes the execution in terms of CPU consumpt
                                                          each method of Mondrian:
                                                          54.8% {11501ms} MOCanvas>>drawOn:
                                                           54.8% {11501ms} MORoot(MONode)>>displayOn:
                {                {                          30.9% {6485ms} MONode>>displayOn:
                    {                    {                    | 18.1% {3799ms} MOEdge>>displayOn:
                                             }                   ...
                         }
                         }                                    | 8.4% {1763ms} MOEdge>>displayOn:
                                                              | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                             }       {       }                | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                                                                ...
                                                            23.4% {4911ms} MOEdge>>displayOn:
                                                                ...

                                                             We can observe that the virtual machine spent abou
                                                          the method displayOn: defined in the class MORoot. A ro
                                                          nested node that contains all the nodes of the edges of t
                                                          general profiling information says that rendering nodes a
                                                          great share of the CPU time, but it does not help in pin
                                                          and edges are responsible for the time spent. Not all grap
                                                          consume resources.
                                                             Traditional execution sampling profilers center their r
                                                          the execution stack and completely ignore the identity of th
                                                          the method call and its arguments. As a consequence, it
                                                          which objects cause the slowdown. For the example above,
                                                          says that we spent 30.9% in MONode>>displayOn: withou
                                                          were actually refreshed too often.




                                                 Domain
                                                          Coverage
                                                          PetitParser is a parsing framework combining ideas from
                                                          parser combinators, parsing expression grammars and pac
                                                          grammars and parsers as objects that can be reconfigured
                                                          1
                                                              http://forum.world.st/Mondrian-is-slow-next-step-tc
                                                              a2261116
                                                          2
                                                              http://www.pharo-project.org/




Tuesday, August 23, 11
Mondrian



Tuesday, August 23, 11
Tuesday, August 23, 11
C omp lexity
                           stemand Ducasse 2003
                         Sy zaLan


Tuesday, August 23, 11
little impact on the overall execution. This sampling technique is u
                  all mainstream profilers, such as JProfiler, YourKit, xprof [10], an
                       MessageTally, the standard sampling-based profiler in Pharo Sm
                  tually describes the execution in terms of CPU consumption and i
                  each method of Mondrian:
                  54.8% {11501ms} MOCanvas>>drawOn:
                   54.8% {11501ms} MORoot(MONode)>>displayOn:
                    30.9% {6485ms} MONode>>displayOn:
                      | 18.1% {3799ms} MOEdge>>displayOn:
                         ...
                      | 8.4% {1763ms} MOEdge>>displayOn:
                      | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                      | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                        ...
                    23.4% {4911ms} MOEdge>>displayOn:
                        ...

                     We can observe that the virtual machine spent about 54% o
                  the method displayOn: defined in the class MORoot. A root is the
                  nested node that contains all the nodes of the edges of the visua
                  general profiling information says that rendering nodes and edge
                  great share of the CPU time, but it does not help in pinpointing
Tuesday, August 23, 11
Domain-Specific Profiling        3

                   CPU time profiling

                                               Which is the relationship?
                   Mondrian [9] is an open and agile visualization engine. Mondrian describes a
                   visualization using a graph of (possibly nested) nodes and edges. In June 2010
                   a serious performance issue was raised1 . Tracking down the cause of the poor
                   performance was not trivial. We first used a standard sample-based profiler.
                        Execution sampling approximates the time spent in an application’s methods
                   by periodically stopping a program and recording the current set of methods
                   under executions. Such a profiling technique is relatively accurate since it has
                   little impact on the overall execution. This sampling technique is used by almost
                   all mainstream profilers, such as JProfiler, YourKit, xprof [10], and hprof.
                        MessageTally, the standard sampling-based profiler in Pharo Smalltalk2 , tex-
                   tually describes the execution in terms of CPU consumption and invocation for
                   each method of Mondrian:
                   54.8% {11501ms} MOCanvas>>drawOn:
                    54.8% {11501ms} MORoot(MONode)>>displayOn:
                     30.9% {6485ms} MONode>>displayOn:




                                                                                       ?
                       | 18.1% {3799ms} MOEdge>>displayOn:
                          ...
                       | 8.4% {1763ms} MOEdge>>displayOn:
                       | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                       | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                         ...
                     23.4% {4911ms} MOEdge>>displayOn:
                         ...

                      We can observe that the virtual machine spent about 54% of its time in
                   the method displayOn: defined in the class MORoot. A root is the unique non-
                   nested node that contains all the nodes of the edges of the visualization. This
                   general profiling information says that rendering nodes and edges consumes a
                   great share of the CPU time, but it does not help in pinpointing which nodes
                   and edges are responsible for the time spent. Not all graphical elements equally
                   consume resources.
                      Traditional execution sampling profilers center their result on the frames of
                   the execution stack and completely ignore the identity of the object that received
                   the method call and its arguments. As a consequence, it is hard to track down
                   which objects cause the slowdown. For the example above, the traditional profiler
                   says that we spent 30.9% in MONode>>displayOn: without saying which nodes
                   were actually refreshed too often.

                   Coverage
                   PetitParser is a parsing framework combining ideas from scannerless parsing,
                   parser combinators, parsing expression grammars and packrat parsers to model
Tuesday, August 23,grammars and parsers as objects that can be reconfigured dynamically [11].
                    11
What is the
                         problem?


Tuesday, August 23, 11
Fixed Object Model



Tuesday, August 23, 11
Most of the time
                          this is good


Tuesday, August 23, 11
Restricts what we
                         can do


Tuesday, August 23, 11
Time




Tuesday, August 23, 11
Time is a very useful
                        concept


Tuesday, August 23, 11
considering it
                         absolute limit us


Tuesday, August 23, 11
absolute object
                          model limit us


Tuesday, August 23, 11
objects that evolve



Tuesday, August 23, 11
Why?



Tuesday, August 23, 11
Debugging    Profiling




                         Execution    Structure
                         Reification   Evolution



Tuesday, August 23, 11
Debugging    Profiling




                         Execution    Structure
                         Reification   Evolution



Tuesday, August 23, 11
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Tuesday, August 23, 11
{               {
                             {                   {
                                                     }
                                 }
                                 }
                                     }       {       }




Tuesday, August 23, 11
When is the next
                          state written?


Tuesday, August 23, 11
Stop when the next
                  message is received


Tuesday, August 23, 11
Close the gap



Tuesday, August 23, 11
Object Debugger



Tuesday, August 23, 11
Debugging    Profiling




                         Execution    Structure
                         Reification   Evolution



Tuesday, August 23, 11
MetaSpy



Tuesday, August 23, 11
MetaSpy

                                   OLS 2011
                              TO   Ber gel etal.



Tuesday, August 23, 11
Mondrian Profiler



Tuesday, August 23, 11
Tuesday, August 23, 11
C omp lexity
                           stema, Ducasse 2003
                         Sy anz L


Tuesday, August 23, 11
Tuesday, August 23, 11
Debugging    Profiling




                         Execution    Structure
                         Reification   Evolution



Tuesday, August 23, 11
What if we do not
              know what to evolve?


Tuesday, August 23, 11
Tuesday, August 23, 11
?
Tuesday, August 23, 11
Prisma


Tuesday, August 23, 11
Scarring
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Scanning
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Back in time
                          Debugger


Tuesday, August 23, 11
Back in time
                          Debugger

                                                       Debu gger
                                             w
                                          Floal. ECOOP 2008
                               O   b ject  nhard e
                                                   t
                                       Lie


Tuesday, August 23, 11
Instance variable
                              history


Tuesday, August 23, 11
name                        value
                                                          init@t1                    null
                                                              predecessor

                                                name                        value
                               :Person                 field-write@t2                'Doe'
                                                              predecessor
                                                name
                                                                            value
                                                       field-write@t3                'Smith'
                         person := Person new   t1
                         ...
                         name := 'Doe'          t2
                         ...
                         name := 'Smith'        t3




Tuesday, August 23, 11
Debugging    Profiling




                         Execution    Structure
                         Reification   Evolution



Tuesday, August 23, 11
Talents


                         scg.unibe.ch/research/talents

Tuesday, August 23, 11
Talents
                                                            ST 2 011F. Perin and
                                                     IW                ie rstrasz,
                                                           îr ba, O. N gli
                                          J. Re ssia, T. G        L. Reng


                         scg.unibe.ch/research/talents

Tuesday, August 23, 11
Dynamically
                  composable units of
                       reuse


Tuesday, August 23, 11
moosetechnology.org

Tuesday, August 23, 11
MooseEntity


                                             FAMIXEntity

                                                       ...

                                              FAMIXType
aFAMIXClass
  isTestClass
                                 2            FAMIXClass                            Key
                                                                          instance-of
                                         isTestClass
                         1                                                message send
                                                                          lookup

                   aFAMIXClass            self inheritsFrom: 'TestCase'
                                     3




Tuesday, August 23, 11
MooseEntity


                                                                       FAMIXEntity

                                                                           ...
                                           3
                                               aJeeClassTalent
                                                                       FAMIXType
                                                  talent isTestClass


                         aJeeClassTalent                               FAMIXClass
aFAMIXClass
                                                      2
  inheritsFrom: 'TestCase'

                               4
                                    aFAMIXClass                                                Key
                                                                                     instance-of
                                    1                                                message send
                                                                                     lookup
                    aFAMIXClass
                                                                                     acquire
                      isTestClass




Tuesday, August 23, 11
Operators

                    • @ alias
                    • - exclusion
                    • , composition

Tuesday, August 23, 11
Flattening



Tuesday, August 23, 11
Scoping



Tuesday, August 23, 11
Evolution friendly
                          Object Model


Tuesday, August 23, 11
Tuesday, August 23, 11
Organize the
                          Meta-level


Tuesday, August 23, 11
Explicit
                         Meta-objects


Tuesday, August 23, 11
Class

                                   Meta-object




                          Object



Tuesday, August 23, 11
Class

                                   Meta-object




                          Object



Tuesday, August 23, 11
Class

                                     Meta-object




                         Evolved Object



Tuesday, August 23, 11
Object>>haltAtNextMessage
      	 | aMetaObject |
      	 aMetaObject := BFBehavioralMetaObject new.
      	 aMetaObject
      	 	 when: (BFMessageReceiveEvent new)
      	 	 do: [ self metaObject unbindFrom: self.
               TransparentBreakpoint signal ].
      	 aMetaObject bindTo: self




Tuesday, August 23, 11
We let Smalltalk
                              loose


Tuesday, August 23, 11
Object
                                        Prisma
                         Debugger



                         Subjectopia   MetaSpy



                           Talents     Chameleon

Tuesday, August 23, 11
scg.unibe.ch/jenkins/


Tuesday, August 23, 11
scg.unibe.ch/research/bifrost



Tuesday, August 23, 11

Contenu connexe

Plus 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 programming
ESUG
 
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
ESUG
 
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 results
ESUG
 
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
ESUG
 
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
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
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
ESUG
 
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
ESUG
 
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
ESUG
 
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
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
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
ESUG
 

Plus 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
 

Dernier

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Dernier (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Bifrost

  • 1. Letting Smalltalk Loose Jorge Ressia www.scg.unibe.ch Tuesday, August 23, 11
  • 2. Computer revolution has not happened yet Tuesday, August 23, 11
  • 3. Computer revolution has not happened yet Kay997 Alan PSLA 1 O Keynote O Tuesday, August 23, 11
  • 4. improve previous ways of thinking Tuesday, August 23, 11
  • 5. create new ways of thinking Tuesday, August 23, 11
  • 6. Object-oriented Programming Tuesday, August 23, 11
  • 8. We still go back to the source code Tuesday, August 23, 11
  • 10. { { { { } } } } { } Tuesday, August 23, 11
  • 11. { { { { } } } } { } Tuesday, August 23, 11
  • 12. { { { { } } } } { } Tuesday, August 23, 11
  • 13. { { { { } } } } { } Tuesday, August 23, 11
  • 14. { { { { } } } } { } Tuesday, August 23, 11
  • 15. { { { { } } } } { } Tuesday, August 23, 11
  • 16. { { { { } } } } { } Tuesday, August 23, 11
  • 18. Domain-Sp CPU time profiling Mondrian [9] is an open and agile visualization engine. visualization using a graph of (possibly nested) nodes an Profile a serious performance issue was raised1 . Tracking down performance was not trivial. We first used a standard sam Execution sampling approximates the time spent in an by periodically stopping a program and recording the cu under executions. Such a profiling technique is relatively little impact on the overall execution. This sampling techn all mainstream profilers, such as JProfiler, YourKit, xprof MessageTally, the standard sampling-based profiler in P tually describes the execution in terms of CPU consumpt each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: 30.9% {6485ms} MONode>>displayOn: { { | 18.1% {3799ms} MOEdge>>displayOn: { { ... } | 8.4% {1763ms} MOEdge>>displayOn: } } | | 8.0% {1679ms} MOStraightLineShape>>display:on: | | 2.6% {546ms} FormCanvas>>line:to:width:color: } { } ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent abou the method displayOn: defined in the class MORoot. A ro nested node that contains all the nodes of the edges of t general profiling information says that rendering nodes a great share of the CPU time, but it does not help in pin and edges are responsible for the time spent. Not all grap consume resources. Traditional execution sampling profilers center their r the execution stack and completely ignore the identity of th the method call and its arguments. As a consequence, it which objects cause the slowdown. For the example above, says that we spent 30.9% in MONode>>displayOn: withou were actually refreshed too often. Coverage PetitParser is a parsing framework combining ideas from parser combinators, parsing expression grammars and pac grammars and parsers as objects that can be reconfigured Tuesday, August 23, 11 1 http://forum.world.st/Mondrian-is-slow-next-step-tc
  • 19. CPU time profiling Mondrian [9] is an open and agile visualization engine. Profile visualization using a graph of (possibly nested) nodes an a serious performance issue was raised1 . Tracking down performance was not trivial. We first used a standard sam Execution sampling approximates the time spent in an by periodically stopping a program and recording the cu under executions. Such a profiling technique is relatively little impact on the overall execution. This sampling techn all mainstream profilers, such as JProfiler, YourKit, xprof MessageTally, the standard sampling-based profiler in P tually describes the execution in terms of CPU consumpt each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: { { 30.9% {6485ms} MONode>>displayOn: { { | 18.1% {3799ms} MOEdge>>displayOn: } ... } } | 8.4% {1763ms} MOEdge>>displayOn: | | 8.0% {1679ms} MOStraightLineShape>>display:on: } { } | | 2.6% {546ms} FormCanvas>>line:to:width:color: ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent abou the method displayOn: defined in the class MORoot. A ro nested node that contains all the nodes of the edges of t general profiling information says that rendering nodes a great share of the CPU time, but it does not help in pin and edges are responsible for the time spent. Not all grap consume resources. Traditional execution sampling profilers center their r the execution stack and completely ignore the identity of th the method call and its arguments. As a consequence, it which objects cause the slowdown. For the example above, says that we spent 30.9% in MONode>>displayOn: withou were actually refreshed too often. Domain Coverage PetitParser is a parsing framework combining ideas from parser combinators, parsing expression grammars and pac grammars and parsers as objects that can be reconfigured 1 http://forum.world.st/Mondrian-is-slow-next-step-tc a2261116 2 http://www.pharo-project.org/ Tuesday, August 23, 11
  • 22. C omp lexity stemand Ducasse 2003 Sy zaLan Tuesday, August 23, 11
  • 23. little impact on the overall execution. This sampling technique is u all mainstream profilers, such as JProfiler, YourKit, xprof [10], an MessageTally, the standard sampling-based profiler in Pharo Sm tually describes the execution in terms of CPU consumption and i each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: 30.9% {6485ms} MONode>>displayOn: | 18.1% {3799ms} MOEdge>>displayOn: ... | 8.4% {1763ms} MOEdge>>displayOn: | | 8.0% {1679ms} MOStraightLineShape>>display:on: | | 2.6% {546ms} FormCanvas>>line:to:width:color: ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent about 54% o the method displayOn: defined in the class MORoot. A root is the nested node that contains all the nodes of the edges of the visua general profiling information says that rendering nodes and edge great share of the CPU time, but it does not help in pinpointing Tuesday, August 23, 11
  • 24. Domain-Specific Profiling 3 CPU time profiling Which is the relationship? Mondrian [9] is an open and agile visualization engine. Mondrian describes a visualization using a graph of (possibly nested) nodes and edges. In June 2010 a serious performance issue was raised1 . Tracking down the cause of the poor performance was not trivial. We first used a standard sample-based profiler. Execution sampling approximates the time spent in an application’s methods by periodically stopping a program and recording the current set of methods under executions. Such a profiling technique is relatively accurate since it has little impact on the overall execution. This sampling technique is used by almost all mainstream profilers, such as JProfiler, YourKit, xprof [10], and hprof. MessageTally, the standard sampling-based profiler in Pharo Smalltalk2 , tex- tually describes the execution in terms of CPU consumption and invocation for each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: 30.9% {6485ms} MONode>>displayOn: ? | 18.1% {3799ms} MOEdge>>displayOn: ... | 8.4% {1763ms} MOEdge>>displayOn: | | 8.0% {1679ms} MOStraightLineShape>>display:on: | | 2.6% {546ms} FormCanvas>>line:to:width:color: ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent about 54% of its time in the method displayOn: defined in the class MORoot. A root is the unique non- nested node that contains all the nodes of the edges of the visualization. This general profiling information says that rendering nodes and edges consumes a great share of the CPU time, but it does not help in pinpointing which nodes and edges are responsible for the time spent. Not all graphical elements equally consume resources. Traditional execution sampling profilers center their result on the frames of the execution stack and completely ignore the identity of the object that received the method call and its arguments. As a consequence, it is hard to track down which objects cause the slowdown. For the example above, the traditional profiler says that we spent 30.9% in MONode>>displayOn: without saying which nodes were actually refreshed too often. Coverage PetitParser is a parsing framework combining ideas from scannerless parsing, parser combinators, parsing expression grammars and packrat parsers to model Tuesday, August 23,grammars and parsers as objects that can be reconfigured dynamically [11]. 11
  • 25. What is the problem? Tuesday, August 23, 11
  • 27. Most of the time this is good Tuesday, August 23, 11
  • 28. Restricts what we can do Tuesday, August 23, 11
  • 30. Time is a very useful concept Tuesday, August 23, 11
  • 31. considering it absolute limit us Tuesday, August 23, 11
  • 32. absolute object model limit us Tuesday, August 23, 11
  • 35. Debugging Profiling Execution Structure Reification Evolution Tuesday, August 23, 11
  • 36. Debugging Profiling Execution Structure Reification Evolution Tuesday, August 23, 11
  • 37. { { { { } } } } { } Tuesday, August 23, 11
  • 38. { { { { } } } } { } Tuesday, August 23, 11
  • 39. When is the next state written? Tuesday, August 23, 11
  • 40. Stop when the next message is received Tuesday, August 23, 11
  • 41. Close the gap Tuesday, August 23, 11
  • 43. Debugging Profiling Execution Structure Reification Evolution Tuesday, August 23, 11
  • 45. MetaSpy OLS 2011 TO Ber gel etal. Tuesday, August 23, 11
  • 48. C omp lexity stema, Ducasse 2003 Sy anz L Tuesday, August 23, 11
  • 50. Debugging Profiling Execution Structure Reification Evolution Tuesday, August 23, 11
  • 51. What if we do not know what to evolve? Tuesday, August 23, 11
  • 68. Back in time Debugger Tuesday, August 23, 11
  • 69. Back in time Debugger Debu gger w Floal. ECOOP 2008 O b ject nhard e t Lie Tuesday, August 23, 11
  • 70. Instance variable history Tuesday, August 23, 11
  • 71. name value init@t1 null predecessor name value :Person field-write@t2 'Doe' predecessor name value field-write@t3 'Smith' person := Person new t1 ... name := 'Doe' t2 ... name := 'Smith' t3 Tuesday, August 23, 11
  • 72. Debugging Profiling Execution Structure Reification Evolution Tuesday, August 23, 11
  • 73. Talents scg.unibe.ch/research/talents Tuesday, August 23, 11
  • 74. Talents ST 2 011F. Perin and IW ie rstrasz, îr ba, O. N gli J. Re ssia, T. G L. Reng scg.unibe.ch/research/talents Tuesday, August 23, 11
  • 75. Dynamically composable units of reuse Tuesday, August 23, 11
  • 77. MooseEntity FAMIXEntity ... FAMIXType aFAMIXClass isTestClass 2 FAMIXClass Key instance-of isTestClass 1 message send lookup aFAMIXClass self inheritsFrom: 'TestCase' 3 Tuesday, August 23, 11
  • 78. MooseEntity FAMIXEntity ... 3 aJeeClassTalent FAMIXType talent isTestClass aJeeClassTalent FAMIXClass aFAMIXClass 2 inheritsFrom: 'TestCase' 4 aFAMIXClass Key instance-of 1 message send lookup aFAMIXClass acquire isTestClass Tuesday, August 23, 11
  • 79. Operators • @ alias • - exclusion • , composition Tuesday, August 23, 11
  • 82. Evolution friendly Object Model Tuesday, August 23, 11
  • 84. Organize the Meta-level Tuesday, August 23, 11
  • 85. Explicit Meta-objects Tuesday, August 23, 11
  • 86. Class Meta-object Object Tuesday, August 23, 11
  • 87. Class Meta-object Object Tuesday, August 23, 11
  • 88. Class Meta-object Evolved Object Tuesday, August 23, 11
  • 89. Object>>haltAtNextMessage | aMetaObject | aMetaObject := BFBehavioralMetaObject new. aMetaObject when: (BFMessageReceiveEvent new) do: [ self metaObject unbindFrom: self. TransparentBreakpoint signal ]. aMetaObject bindTo: self Tuesday, August 23, 11
  • 90. We let Smalltalk loose Tuesday, August 23, 11
  • 91. Object Prisma Debugger Subjectopia MetaSpy Talents Chameleon Tuesday, August 23, 11