Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration



Documents pareils
Mesure et modélisation de l énergie logicielle

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

Laboratoire 4 Développement d un système intelligent

Liste de conférences et revues Thème Com A

calls.paris-neuroscience.fr Tutoriel pour Candidatures en ligne *** Online Applications Tutorial

Les Bases de Données et l Objet Introduction

4 Exemples de problèmes MapReduce incrémentaux

VISUALISATION DE NUAGES DE POINTS

CURRICULUM VITAE. Informations Personnelles

Introduction aux Machines Virtuelles avec VMKit

Le développement d'applications informatiques

OpenPaaS Le réseau social d'entreprise

8. Cours virtuel Enjeux nordiques / Online Class Northern Issues Formulaire de demande de bourse / Fellowship Application Form

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit.

Cours de Programmation 2

as Architecture des Systèmes d Information

Software Engineering and Middleware A Roadmap

Rapport de Mini-Projet en ArcGIS Engine

Règles et paramètres d'exploitation de Caparmor 2 au 11/12/2009. Pôle de Calcul Intensif pour la mer, 11 Decembre 2009

Présentation Alfresco

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Gouvernance IT : par où commencer? Hubert Lalanne DE, Chief Architect for Industries IBM Software France

Application Form/ Formulaire de demande

Application de K-means à la définition du nombre de VM optimal dans un cloud

Stakeholder Feedback Form January 2013 Recirculation

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Once the installation is complete, you can delete the temporary Zip files..

Export et Import de modèles ICAR sous Trnsys 17

Equilibrage de charge (Load

1 Modélisation d être mauvais payeur

Introduction à MATLAB R

Implémentation Matérielle des Services d un RTOS sur Circuit Reconfigurable

The impacts of m-payment on financial services Novembre 2011

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Working with Kinect. Intelligence Ambiante. Tomás DÍAZ TRONCOSO Arturo GARCÍA TOVAR Daoud MAROUAN LMTIUI

Vulgarisation Java EE Java EE, c est quoi?

3615 SELFIE. HOW-TO / GUIDE D'UTILISATION

Must Today s Risk Be Tomorrow s Disaster? The Use of Knowledge in Disaster Risk Reduction

ROYAUME DE BELGIQUE / KINGDOM OF BELGIUM / KONINKRIJK BELGIE

F-7a-v3 1 / Bourses de mobilité / Mobility Fellowships Formulaire de demande de bourse / Fellowship Application Form

Sécurité des systèmes d exploitation

INTRODUCTION AUX SGBD/R LUW

PHOTO ROYAUME DE BELGIQUE /KINDOM OF BELGIUM /KONINKRIJK BELGIE. Données personnelles / personal data

Change the game with smart innovation

Programmation MacOSX / ios

T. Gasc 1,2,3, F. De Vuyst 1, R. Motte 3, M. Peybernes 4, R. Poncet 5

affichage en français Nom de l'employeur *: Lions Village of Greater Edmonton Society

Module.NET 3 Les Assemblys.NET

Instrumentation de code Java

How to Login to Career Page

Multiple issuers. La cotation des actions ROBECO ci-dessous est suspendue sur EURONEXT PARIS dans les conditions suivantes :

Ré-ordonnancement adaptatif de messages dans un réseau ad hoc de véhicules

ALOHA LOAD BALANCER MISE EN ŒUVRE DU SSL FRONTEND

Analyse,, Conception Objet

22/09/2014 sur la base de 55,03 euros par action

SQL Parser XML Xquery : Approche de détection des injections SQL

Java et les bases de données

en SCÈNE RATIONAL Rational Démonstration SDP : automatisation de la chaîne de développement Samira BATAOUCHE sbataouche@fr.ibm.com

Introduction à la programmation concurrente

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

IFT3902 : (Gestion de projet pour le) développement, (et la) maintenance des logiciels

Travaux publics et Services gouvernementaux Canada. Title - Sujet évaluation environnementale de site

Votre premier projet Android

Travaux publics et Services gouvernementaux Canada. Title - Sujet Portes d'acier. Solicitation No. - N de l'invitation 21C /A

JOnAS 5. Serveur d application d

Le moteur de workflow JBPM

Iyad Alshabani SysCom - CReSTIC Université de Reims 17/02/2011 1

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin Talend

Instructions Mozilla Thunderbird Page 1

Title Sujet: Services Professionnelles MDM Solicitation No. Nº de l invitation Date: _A \9-05

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Qy y a-t-il de nouveau? NetSupport ServiceDesk v3

Formula Negator, Outil de négation de formule.

Limitations of the Playstation 3 for High Performance Cluster Computing

Service de Détection de Pannes avec SNMP

Objets et Programmation. origine des langages orientés-objet

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Forthcoming Database

Mysql. Les requêtes préparées Prepared statements

Convergence des programmes qualité Qualitéet Recherche UMR 6284 CNRS ISIT JEAN-YVES BOIRE

AIDE FINANCIÈRE POUR ATHLÈTES FINANCIAL ASSISTANCE FOR ATHLETES

PROJET 1 : BASE DE DONNÉES REPARTIES

CONTEC CO., LTD. Novembre 2010

Interest Rate for Customs Purposes Regulations. Règlement sur le taux d intérêt aux fins des douanes CONSOLIDATION CODIFICATION

France SMS+ MT Premium Description

2013 IIHF WORLD WOMEN S HOCKEY CHAMPIONSHIP

Tom Pertsekos. Sécurité applicative Web : gare aux fraudes et aux pirates!

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

POLICY: FREE MILK PROGRAM CODE: CS-4

Language requirement: Bilingual non-mandatory - Level 222/222. Chosen candidate will be required to undertake second language training.

I. COORDONNÉES PERSONNELLES / PERSONAL DATA

Nathalie REY DIPLOMES UNIVERSITAIRES

Exemple PLS avec SAS

Administrateur/Technicien/Développeur Profil

Génie Logiciel avec Ada. 4 février 2013

INFO-F-404 : Techniques avancées de systèmes d exploitation

Machines Virtuelles. et bazard autour. Rémi Forax

Installation de VirtualPOPC-1 sur Ubuntu Server LTS 64bits

Transcription:

Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration Pluquet Frédéric July, 3rd 2012

Etude de techniques efficaces de versionnement d objets pour les langages orientés objet du modèle à l intégration au langage Pluquet Frédéric ULB, 3 juillet 2012

Comment avoir le passé d un programme Facilement, sans prendre trop de place et sans que l ordinateur ne ralentisse? Pluquet Frédéric ULB, 3 juillet 2012

6 versions 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Annuler (CTRL+Z) 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Rétablir (SHIFT+CTRL+Z) 4

6 versions Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! Un bon exemple de versioning! 4

Versioning 5

Versioning 5

Versioning 6

Versioning 7

Versioning 8

Versioning 8

Versioning 8

Versioning 8

Linear Versioning 1 9

Linear Versioning 1 2 3 4 9

Versioning 10

Backtracking Versioning 1 11

Backtracking Versioning 1 2 3 4 11

Backtracking Versioning 1 2 11

Backtracking Versioning 1 2 5 11

Backtracking Versioning 1 2 5 6 11

Versioning 12

Versioning B p A C D 12

Versioning B p A C D 12

Branching versioning 1 13

Branching versioning 1 2 3 4 13

Branching versioning 1 2 3 4 5 6 13

Branching versioning 1 2 3 4 8 5 6 7 13

Côté Développement 14

Côté Développement Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc 14

Côté Développement Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Est-il possible d alléger le travail des développeurs? 14

Côté Développement Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Solution ad hoc Bibliothèque commune pour le versioning Est-il possible d alléger le travail des développeurs? 14

Besoins 15

Besoins Générale pour être utilisée dans toute application 15

Besoins Générale pour être utilisée dans toute application Efficace en temps et en espace 15

Besoins Générale pour être utilisée dans toute application Efficace en temps et en espace Facile à utiliser pour les développeurs 15

Besoins Read-Only Linear versioning Branching 16

Besoins Read-Only Confluent Linear versioning Branching Backtracking Read-Only Backtracking versioning A B p C D Branching Branching versioning 16

Domaines Algorithmes Langages 17

Domaines Algorithmes Langages 17

Notre contribution Une étude complète du versioning d objets dans la RAM pour les langages orientés objet 18

Notre contribution Une étude complète du versioning d objets dans la RAM pour les langages orientés objet Modèle d enregistrement et de retour dans le passé [ REC] [ FWD] 18

Notre contribution Une étude complète du versioning d objets dans la RAM pour les langages orientés objet Modèle d enregistrement et de retour dans le passé Structures efficaces [ REC] [ FWD] 18

Notre contribution Une étude complète du versioning d objets dans la RAM pour les langages orientés objet Modèle d enregistrement et de retour dans le passé Structures efficaces Intégration aux langages [ REC] [ FWD] 18

Notre contribution Une étude complète du versioning d objets dans la RAM pour les langages orientés objet Modèle d enregistrement et de retour dans le passé Structures efficaces Intégration aux langages Implémentations efficaces Hist OO ry [ REC] [ FWD] 18

Modèle d enregistrement et de retour dans le passé [ REC] [ FWD]

[ REC] 20

[ REC] time t0 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 20

[ REC] time t0 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 20

[ REC] time t0 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 20

[ REC] time t0 t1 Snapshots Objects s1 abook::book title state borrower client1::client name id abook::book state borrower client1::client "1985" "clean" "John" 1 "clean" 20

[ REC] time t0 t1 abook::book title "1985" abook::book title "1985" Snapshots Objects s1 state borrower client1::client name id abook::book state borrower client1::client "clean" "John" 1 "clean" state borrower client1::client name id "dirty" "John" 1 20

[ REC] t0 t1 t2 time abook::book title "1985" abook::book title "1985" Objects state borrower "clean" state borrower "dirty" client1::client name id "John" 1 client1::client name id "John" 1 s1 s2 abook::book abook::book Snapshots state borrower client1::client "clean" state borrower "dirty" 20

[ REC] t0 t1 t2 time abook::book title "1985" abook::book title "1985" abook::book title "1984" Objects state borrower "clean" state borrower "dirty" state borrower "dirty" client1::client name id "John" 1 client1::client name id "John" 1 client1::client name id "John" 1 s1 s2 abook::book abook::book Snapshots state borrower client1::client "clean" state borrower "dirty" 20

[ REC] time t0 t1 t2 t3 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 abook::book title state borrower client1::client name id "1985" "dirty" "John" 1 abook::book title "1984" state "dirty" borrower client1::client name id "John" 1 s1 s2 s3 abook::book abook::book abook::book Snapshots state borrower client1::client "clean" state borrower "dirty" state borrower client1::client "dirty" 20

[ FWD] time t0 t1 t2 t3 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 abook::book title state borrower client1::client name id "1985" "dirty" "John" 1 abook::book title "1984" state "dirty" borrower client1::client name id "John" 1 s1 s2 s3 abook::book abook::book abook::book Snapshots state borrower client1::client "clean" state borrower "dirty" state borrower client1::client "dirty" 20

[ FWD] time t0 t1 t2 t3 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 abook::book title state borrower client1::client name id "1985" "dirty" "John" 1 abook::book title "1984" state "dirty" borrower client1::client name id "John" 1 s1 s2 s3 abook::book abook::book abook::book Snapshots state borrower client1::client "clean" state borrower "dirty" state borrower client1::client "dirty" 20

[ FWD] time t0 t1 t2 t3 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 abook::book title state borrower client1::client name id "1985" "dirty" "John" 1 abook::book title state borrower client1::client name id "1984" "dirty" "John" 1 s1 s2 s3 Snapshots abook::book title "1984" state borrower client1::client "clean" abook::book state borrower "dirty" abook::book state borrower client1::client "dirty" name id "John" 1 20

[ FWD] time t0 t1 t2 t3 abook::book title "1985" abook::book title "1985" abook::book title "1984" Objects state borrower "clean" state borrower "dirty" state borrower "dirty" client1::client name id "John" 1 client1::client name id "John" 1 client1::client name id "John" 1 s1 s2 s3 abook::book abook::book abook::book title "1984" Snapshots state borrower client1::client "clean" state borrower "dirty" state borrower client1::client "dirty" name id "John" 1 20

[ FWD] time t0 t1 t2 t3 Objects abook::book title state borrower client1::client name id "1985" "clean" "John" 1 abook::book title state borrower client1::client name id "1985" "dirty" "John" 1 abook::book title state borrower client1::client name id "1984" "dirty" "John" 1 s1 s2 s3 Snapshots abook::book state borrower client1::client "clean" abook::book state borrower "dirty" abook::book title "1984" state "dirty" borrower client1::client name id "John" 1 20

Attributs sélectionnés ou non 21

Attributs sélectionnés ou non 21

Attributs sélectionnés ou non 21

Attributs sélectionnés ou non Tous les objets d une même classe 22

Attributs sélectionnés ou non Tous les objets d une même classe Sélection basée sur un attribut d un objet 22

Attributs sélectionnés ou non Ex: la classe Vector en Java Sélection basée sur un attribut d un objet 22

Attributs sélectionnés ou non Ex: la classe Vector en Java Objets de notre application Sélection basée sur un attribut d un objet 22

Attributs sélectionnés ou non Ex: la classe Vector en Java Objets utilisés par les autres libraries Objets de notre application Sélection basée sur un attribut d un objet 22

Sélection automatique Mécanisme de Sélection Automatique profondeurs de sélection configuration locale pour chaque objet 23

Sélection automatique Mécanisme de Sélection Automatique profondeurs de sélection configuration locale pour chaque objet 23

Sélection automatique Mécanisme de Sélection Automatique profondeurs de sélection configuration locale pour chaque objet 23

Sélection automatique Mécanisme de Sélection Automatique profondeurs de sélection configuration locale pour chaque objet 23

Comment être efficace Théoriquement?

Premières Idées 25

Premières Idées Copie du système à chaque snapshot 25

Premières Idées Copie du système à chaque snapshot long et prend de la place 25

Premières Idées Copie du système à chaque snapshot long et prend de la place Lister les actions et ne garder que la dernière version 25

Premières Idées Copie du système à chaque snapshot long et prend de la place Lister les actions et ne garder que la dernière version rapide dans le présent long dans le passé 25

Premières Idées Copie du système à chaque snapshot long et prend de la place Lister les actions et ne garder que la dernière version rapide dans le présent long dans le passé Lister n actions puis copier le système 25

Premières Idées Copie du système à chaque snapshot long et prend de la place Lister les actions et ne garder que la dernière version rapide dans le présent long dans le passé Lister n actions puis copier le système toujours trop lent toujours trop de place 25

Structures de données efficaces Basées sur la Fat Node Method [Driscoll et al,1986]. Pas de contrainte sur le graphe d objets Les différentes valeurs d un attribut sont stockées comme valeur de cet attribut abook::book client1::client title state borrower "1984" t1 t2 "dirty" name id "John" 1 "clean" t1 t2 t3 26

Chained Arrays (a) 1 element (b) 2 elements (b) 6 elements (b) 8 elements Ajouter une valeur Lire la dernière valeur Rechercher une valeur O(1) O(1) O(log(#values)) 27

Efficacité en Temps Linear versioning Read-Only Prendre un snapshot Complexities O(1) Accéder à un attribut non sélectionné Branching Éditer un attribut sélectionné Lire la dernière valeur d un attr. sél. Rechercher une valeur d un attr. sél. O(1) O(1) O(1) O(log #états) 28

Efficacité en Temps Confluent Backtracking versioning Backtracking Prendre un snapshot Backtrack Accéder à un attribut non sélectionné Éditer un attribut sélectionné Lire la dernière valeur d un attr. sél. Rechercher une valeur d un attr. sél. Complexities O(1) O(1)* O(1) O(1)* O(1)* O(log #états) * temps amorti 29

Efficacité en Temps Read-Only Branching versioning Branching Complexities Prendre un snapshot Créer une branche Accéder à un attribut non sélectionné Éditer un attribut sélectionné Lire la dernière valeur d un attr. sél. Rechercher une valeur d un attr. sél. * temps amorti O(1)* O(1)* O(1) O(log #états) O(log #états) O(log #états) 30

Pour chaque type de versioning Accéder à un attribut non sélectionné O(1) 31

Pour chaque type de versioning Accéder à un attribut non sélectionné O(1) Si le versioning n est pas utilisé, le système garde les mêmes performances. 31

Règles et Outils pour l intégration aux langages

Intégration aux langages 3 primitives principales sélectionner les attributs prendre un snapshot exécuter du code au travers d un snapshot configuration locale par surcharge de méthodes 33

Intégration aux langages Pas de transparence pour le développeur code source Book>>getBorrower! ^borrower 34

Intégration aux langages Pas de transparence pour le développeur code source Book>>getBorrower! ^borrower abook::book title state borrower "1984" t1 t2 "dirty" "clean" client1::client name id "John" 1 t1 t2 t3 34

Intégration aux langages Pas de transparence pour le développeur code source Book>>getBorrower! ^borrower abook::book title state borrower "1984" t1 t2 "dirty" "clean" client1::client name id "John" 1 t1 t2 t3 code source Book>>getBorrower! ^(borrower isstatesdatastructure!! iftrue: [borrower getvalueatsnapshot: Snapshot activesnapshot]!! iffalse: [borrower]) 34

Instrumentation de bytecodes (Smalltalk) 35

Instrumentation de bytecodes (Smalltalk) Book new selectfields 35

Instrumentation de bytecodes (Smalltalk) code source Book>>getBorrower! ^borrower Book new selectfields 35

Instrumentation de bytecodes (Smalltalk) code source Book>>getBorrower! ^borrower Book new selectfields bytecodes <00> push the first field of the receiver (self) <7C> return top of stack 35

Instrumentation de bytecodes (Smalltalk) code source Book>>getBorrower! ^borrower Book new selectfields bytecodes <00> push the first field of the receiver (self) <7C> return top of stack <00> push the first field of the receiver (self) <7C> return top of the stack 35

Instrumentation de bytecodes (Smalltalk) code source Book>>getBorrower! ^borrower Book new selectfields bytecodes <00> push the first field of the receiver (self) <7C> return top of stack <00> push the first field of the receiver (self) <D1> send isstatesdatastructure <9A> if false: jump 5 instructions <00> push the first field of the receiver <42> push class Snapshot <D1> send: activesnapshot <D0> send: getvalueatsnapshot: <7C> jump 1 instruction <00> push the first field of the receiver <7C> return top of the stack 35

Instrumentation de bytecodes (Smalltalk) Book new selectfields code source Book>>getBorrower! ^borrower Book>>getBorrower! ^(borrower isstatesdatastructure!! iftrue: [borrower getvalueatsnapshot: Snapshot activesnapshot]!! iffalse: [borrower]) bytecodes <00> push the first field of the receiver (self) <7C> return top of stack <00> push the first field of the receiver (self) <D1> send isstatesdatastructure <9A> if false: jump 5 instructions <00> push the first field of the receiver <42> push class Snapshot <D1> send: activesnapshot <D0> send: getvalueatsnapshot: <7C> jump 1 instruction <00> push the first field of the receiver <7C> return top of the stack 35

Implementations Hist OO ry

Implementations Hist OO ry Première version en Java Version stable en Smalltalk Une libraire standard chargeable dans n importe quelle application le code existant n a pas besoin d être changé (instrumentation de bytecodes) 37

Implémentation en Smalltalk Démonstration Hist OO ry 38

Hist OO ry Performance Editer un attribut Temps moyen (ms) pour sauver un état Average Time (ms) to save one state 0.025 0.02 0.015 0.01 0.005 0 Branching at end Branching at root Backtracking Linear Instrumented, not selected Ephemeral 1 10 100 1000 10000 100000 # Nb states d états saved sauvés in the versioned dans l attribut field 250 200 150 100 50 0 Slowdown factor 39

Hist OO ry Performance Editer un attribut Temps moyen (ms) pour sauver un état Average Time (ms) to save one state 0.025 0.02 0.015 0.01 0.005 0 Branching at end Branching at root Backtracking Linear Instrumented, not selected Ephemeral 1 10 100 1000 10000 100000 # Nb states d états saved sauvés in the versioned dans l attribut field 250 200 150 100 50 0 Slowdown factor 39

Hist OO ry Performance Editer un attribut Temps moyen (ms) pour sauver un état Average Time (ms) to save one state 0.025 0.02 0.015 0.01 0.005 0 Branching at end Branching at root Backtracking Linear Instrumented, not selected Ephemeral 1 10 100 1000 10000 100000 # Nb states d états saved sauvés in the versioned dans l attribut field 250 200 150 100 50 0 Slowdown factor 39

Hist OO ry Performance Editer un attribut Temps moyen (ms) pour sauver un état Average Time (ms) to save one state 0.025 0.02 0.015 0.01 0.005 0 Branching at end Branching at root Backtracking Linear Instrumented, not selected Ephemeral 1 10 100 1000 10000 100000 # Nb states d états saved sauvés in the versioned dans l attribut field 250 200 150 100 50 0 Slowdown factor 39

Hist OO ry Performance Editer un attribut Temps moyen (ms) pour sauver un état Average Time (ms) to save one state 0.025 0.02 0.015 0.01 0.005 0 Branching at end Branching at root Backtracking Linear Instrumented, not selected Ephemeral 1 10 100 1000 10000 100000 # Nb states d états saved sauvés in the versioned dans l attribut field 250 200 150 100 50 0 Slowdown factor 39

Hist OO ry Performance Lire un attribut Temps moyen (ms) pour retrouver un état Average time (ms) to retrieve one state 0.008 0.006 0.004 0.002 Branching at root Branching at end Backtracking - any state Backtracking - last state Linear - any state Linear - last state Hist OO 0 Nb # states d états saved sauvés in a versioned dans l attribut field Slowdown factor Instrumented, Not selected Synthetic worst case update 7 Ephemeral Real cases update 1.3 to 2 ry 1 10 100 1000 10000 100000 80 60 40 20 0 Slowdown factor 40

Hist OO ry Performance Lire un attribut Temps moyen (ms) pour retrouver un état Average time (ms) to retrieve one state 0.008 0.006 0.004 0.002 Branching at root Branching at end Backtracking - any state Backtracking - last state Linear - any state Linear - last state Hist OO 0 Nb # states d états saved sauvés in a versioned dans l attribut field Slowdown factor Instrumented, Not selected Synthetic worst case update 7 Ephemeral Real cases update 1.3 to 2 ry 1 10 100 1000 10000 100000 80 60 40 20 0 Slowdown factor 40

Hist OO ry Performance Lire un attribut Temps moyen (ms) pour retrouver un état Average time (ms) to retrieve one state 0.008 0.006 0.004 0.002 Branching at root Branching at end Backtracking - any state Backtracking - last state Linear - any state Linear - last state Hist OO 0 Nb # states d états saved sauvés in a versioned dans l attribut field Slowdown factor Instrumented, Not selected Synthetic worst case update 7 Ephemeral Real cases update 1.3 to 2 ry 1 10 100 1000 10000 100000 80 60 40 20 0 Slowdown factor 40

Hist OO ry Performance Lire un attribut Temps moyen (ms) pour retrouver un état Average time (ms) to retrieve one state 0.008 0.006 0.004 0.002 Branching at root Branching at end Backtracking - any state Backtracking - last state Linear - any state Linear - last state Hist OO 0 Nb # states d états saved sauvés in a versioned dans l attribut field Slowdown factor Instrumented, Not selected Synthetic worst case update 7 Ephemeral Real cases update 1.3 to 2 ry 1 10 100 1000 10000 100000 80 60 40 20 0 Slowdown factor 40

Hist OO ry Performance Lire un attribut Temps moyen (ms) pour retrouver un état Average time (ms) to retrieve one state 0.008 0.006 0.004 0.002 Branching at root Branching at end Backtracking - any state Backtracking - last state Linear - any state Linear - last state Hist OO 0 Nb # states d états saved sauvés in a versioned dans l attribut field Slowdown factor Instrumented, Not selected Synthetic worst case update 7 Ephemeral Real cases update 1.3 to 2 ry 1 10 100 1000 10000 100000 80 60 40 20 0 Slowdown factor 40

Hist OO ry Performance Lire un attribut Temps moyen (ms) pour retrouver un état Average time (ms) to retrieve one state 0.008 0.006 0.004 0.002 Branching at root Branching at end Backtracking - any state Backtracking - last state Linear - any state Linear - last state Hist OO 0 Nb # states d états saved sauvés in a versioned dans l attribut field Slowdown factor Instrumented, Not selected Synthetic worst case update 7 Ephemeral Real cases update 1.3 to 2 ry 1 10 100 1000 10000 100000 80 60 40 20 0 Slowdown factor 40

Hist OO ry Performance Lire un attribut Temps moyen (ms) pour retrouver un état Average time (ms) to retrieve one state 0.008 0.006 0.004 0.002 Branching at root Branching at end Backtracking - any state Backtracking - last state Linear - any state Linear - last state Hist OO 0 Nb # states d états saved sauvés in a versioned dans l attribut field Slowdown factor Instrumented, Not selected Synthetic worst case update 7 Ephemeral Real cases update 1.3 to 2 ry 1 10 100 1000 10000 100000 80 60 40 20 0 Slowdown factor 40

Hist OO ry Performance Ajout dans un Random Treap Temps moyen (ms) par ajout Average time (ms) per insertion 0.4 0.3 0.2 0.1 Branching Backtracking Linear - all states Linear - consistent states Linear - no states Instrumented, not selected Ephemeral 1 10 100 1000 10000 Nb d ajouts # insertions dans in a le random random treap treap 41

Hist OO ry Performance Ajout dans un Random Treap Temps moyen (ms) par ajout Average time (ms) per insertion 0.4 0.3 0.2 0.1 Branching Backtracking Linear - all states Linear - consistent states Linear - no states Instrumented, not selected Ephemeral 3x 1 10 100 1000 10000 Nb d ajouts # insertions dans in a le random random treap treap 41

Hist OO ry Performance Ajout dans un Random Treap Temps moyen (ms) par ajout Average time (ms) per insertion 0.4 0.3 0.2 0.1 Branching Backtracking Linear - all states Linear - consistent states Linear - no states Instrumented, not selected Ephemeral 5x 3x 1 10 100 1000 10000 Nb d ajouts # insertions dans in a le random random treap treap 41

Travaux Préexistants Liu Parrish Reiss Guéheneuc Warth Dans la RAM Transparent Général Sél. des sujets Sél. des états Efficacité Liu, Zhiqing. 1996. A persistent runtime system using persistent data structures. Pages 429 436 of: SAC 96: Proceedings of the 1996 ACM symposium on Applied Computing. New York, NY, USA: ACM Press. 42

Travaux Préexistants Liu Parrish Reiss Guéheneuc Warth Dans la RAM Transparent Général Sél. des sujets Sél. des états Efficacité Liu, Zhiqing. 1996. A persistent runtime system using persistent data structures. Pages 429 436 of: SAC 96: Proceedings of the 1996 ACM symposium on Applied Computing. New York, NY, USA: ACM Press. Parrish, Allen, Dixon, Brandon, Cordes, David, Vrbsky, Susan, & Lusth, John. 1998. Implementing persistent data structures using C++. Softw. Pract. Exper., 28(15), 1559 1579. Reiss, Steven P., & Renieris, Manos. 2001. Encoding Program Executions. Pages 221 230 of: Proceedings of the 23rd International Conference on Software Engineering. Toronto, Ontario, Canada: IEEE. Guéhéneuc, Y.-G., Douence, R., & Jussien, N. 2002 (September). No Java without Caffeine A Tool for Dynamic Analysis of Java Programs. In: Proceedings of ASE 2002 : 17th International IEEE Conference on Automated Software Engineering. Warth, A., Ohshima Y., Kaehler, T. & Kay, Alan. 2008. Worlds: Controlling the scope of side effects. Tech. rept. 42

Travaux Préexistants Liu Parrish Reiss Guéheneuc Warth Dans la RAM Transparent Général Sél. des sujets Sél. des états Efficacité Liu, Zhiqing. 1996. A persistent runtime system using persistent data structures. Pages 429 436 of: SAC 96: Proceedings of the 1996 ACM symposium on Applied Computing. New York, NY, USA: ACM Press. Parrish, Allen, Dixon, Brandon, Cordes, David, Vrbsky, Susan, & Lusth, John. 1998. Implementing persistent data structures using C++. Softw. Pract. Exper., 28(15), 1559 1579. Reiss, Steven P., & Renieris, Manos. 2001. Encoding Program Executions. Pages 221 230 of: Proceedings of the 23rd International Conference on Software Engineering. Toronto, Ontario, Canada: IEEE. Guéhéneuc, Y.-G., Douence, R., & Jussien, N. 2002 (September). No Java without Caffeine A Tool for Dynamic Analysis of Java Programs. In: Proceedings of ASE 2002 : 17th International IEEE Conference on Automated Software Engineering. Warth, A., Ohshima Y., Kaehler, T. & Kay, Alan. 2008. Worlds: Controlling the scope of side effects. Tech. rept. 42

Conclusions Un modèle général et facile à utiliser pour l object versioning adapté aux langages orientés objet Algorithmes théoriques avec un point de vue d implémentation Règles et outils orientés développeurs pour l intégration aux langages Implémenté et testé en Smalltalk 3 sortes de versioning Librarie transparente Efficace en temps et en espace 43

Merci! http://fpluquet.be histoory@fpluquet.be Executing code in the past: Efficient in-memory object graph versioning, F. Pluquet, S. Langerman, and R. Wuyts, In Proceedings of the 2009 ACM SIGPLAN Conference on Object- Oriented Programming Systems, Languages, and Applications (OOPSLA'09). Implementing Partial Persistence In Object-Oriented Languages, F. Pluquet. S. Langerman, A. Marot and R. Wuyts, In Proceedings of ALENEX 08, 2008. 44