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