Plan du cours. Production de code, langages à héritage multiple Martin Odersky 4 de 19

Documents pareils
Informatique III: Programmation en C++

Projet INF242. Stéphane Devismes & Benjamin Wack. Pour ce projet les étudiants doivent former des groupes de 3 ou 4 étudiants.

ETUDE COMPARATIVE RELATIVE AU SERTISSAGE DES CANALISATIONS EN CUIVRE DANS LE SECTEUR DE LA RENOVATION

Chapitre IV- Induction électromagnétique

Guide pratique. L emploi des personnes handicapées

Production statistique: passage d une démarche axée sur les domaines à une démarche axée sur les processus

Revue des Sciences et de la Technologie - RST- Volume 5 N 1 / janvier 2014

1 Introduction à l effet Doppler.

Comment évaluer la qualité d un résultat? Plan

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Techniques d analyse de circuits

Classes et Objets en Ocaml.

Votre dossier d adhésion

NCCI : Calcul d'assemblages de pieds de poteaux encastrés

Chapitre VI- La validation de la composition.

physique - chimie Livret de corrigés ministère de l éducation nationale Rédaction

BAILLY-GRANDVAUX Mathieu ZANIOLO Guillaume Professeur : Mrs Portehault

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Exemples de solutions acoustiques

NCCI : Modèle de calcul pour les pieds de poteaux articulés Poteaux en I en compression axiale

Étape II. Compétences à développer de 8 à 12 ans. Grilles des compétences

Mesures du coefficient adiabatique γ de l air

Bases Java - Eclipse / Netbeans

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Héritage presque multiple en Java (1/2)

Diagnostic Immobilier by Hiscox Questionnaire préalable d assurance

DocumentHumain. Confidentiel. Disposition de fin de vie

Traduction des Langages : Le Compilateur Micro Java

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

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

Équations différentielles et systèmes dynamiques. M. Jean-Christophe Yoccoz, membre de l'institut (Académie des Sciences), professeur

LE PENETROMETRE STATIQUE Essais CPT & CPTU

Mémoire de stage de Master 2

F. Barthélemy. 17 mai 2005

Java 1.5 : principales nouveautés

La protection différentielle dans les installations électriques basse tension

Personnel Pour chaque diagnostiqueur, veuillez fournir les informations suivantes : Date de la formation. Formation (durée)

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

RMI le langage Java XII-1 JMF

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Corrigés des premiers exercices sur les classes

Chapitre. Calculs financiers

Une introduction à Java

prix par consommateur identiques différents prix par identiques classique 3 unité différents 2 1

Java Licence Professionnelle CISII,

Le compte satellite des institutions sans but lucratif

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

DESCRIPTION DU PLUGIN D AUTHENTIFICATION AVEC CAS POUR SPIP

EVALUATION À 360 Demonstration MICHEL DUPONT RAPPORT PERSONNEL 360. rapport généré:

Mesurage en continu des flux polluants en MES et DCO en réseau d assainissement

Cette année, notre traditionnel

3. Veuillez indiquer votre effectif total :

Le calendrier des inscripti

Séquence 7. Séance 1 Histoire Regards sur l Afrique. Un empire africain, l empire du Ghana (VIII e -XII e siècle)

#DSAA. Marseille. u Lycée Denis Diderot {Lycée Marie Curie é Lycée Jean Perrin. Lycée Saint Exupéry

INITIATION AU LANGAGE JAVA

Nécessité de prendre en compte des termes d ordre G 3 pour mesurer γ à 10 8 près

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programme 2015 FR. Siège social et service après-vente :

Programmer en JAVA. par Tama

Java - la plateforme

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

Vulgarisation Java EE Java EE, c est quoi?

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

1. À qui s adresse le commerce électronique

Java c est quoi? Java pourquoi?

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Travaux pratiques : Configuration de base d une route statique

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Gestion hybride de la mémoire dynamique dans les systèmes Java temps-réel

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Recherche dans un tableau

TP1 : Initiation à Java et Eclipse

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

Java Licence Professionnelle CISII,

Introduction aux Machines Virtuelles avec VMKit

COMPARAISONDESLANGAGESC, C++, JAVA ET

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

I. Introduction aux fonctions : les fonctions standards

Forme juridique Noms et adresses des filiales à assurer. Date de création ou début de l activité Description PRÉCISE de vos activités

Intégrale et primitives

LA VIRTUALISATION. Etude de la virtualisation, ses concepts et ses apports dans les infrastructures informatiques. 18/01/2010.

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

as Architecture des Systèmes d Information

Point sur les solutions de développement d apps pour les périphériques mobiles

Programmation Objet Java Correction

Remote Method Invocation (RMI)

MINISTERE DE L EDUCATION NATIONALE ACADEMIE DE MONTPELLIER

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Elimination intégrale recommandée à l issue de la D.U.A.

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

Logiciel Libre Cours 3 Fondements: Génie Logiciel

PG208, Projet n 3 : Serveur HTTP évolué

Transcription:

Plan du ours Prodution de ode, langages à héritage multiple Martin Odersky 23 janvier 2007 version 1.2 1 2 3 Prodution de ode, langages à héritage multiple Martin Odersky 1 de 19 Prodution de ode, langages à héritage multiple Martin Odersky 2 de 19 Le shéma de dispathing par table de méthodes virtuelles (VMT) est prédominant dans les situations d héritage simple : Simula, Modula-3, Ada 95, Objet Oberon, Beta... Mais la plupart des langages OO sont plus omplees. Langages ave héritage multiple ou miins : Sala, Eiffel, gbeta, C++... Langages ave sous-typage struturel : Smalltalk, Ceil, Self, Pit... Langages hybrides ave héritage simple et interfaes : Java, Objetive-C... Plusieurs tehniques eistent pour implanter l héritage multiple, les miins ou l héritage hybride : trampolines, tableau de déplaement de lignes (row-displaement tables), antémémoire en ligne (inline ahing). Prodution de ode, langages à héritage multiple Martin Odersky 3 de 19 Prodution de ode, langages à héritage multiple Martin Odersky 4 de 19

Eemple : Des lasses en Drei à héritage multiple lass { val : Int; def (): Int = { return this. def (delta: Int): = { return new (this.() + delta); lass Colored { val : Color; def (): Color = { return this. lass Colored etends Colored, { def (delta: Int): Colored = { return new Colored((), this.() + delta); Prodution de ode, langages à héritage multiple Martin Odersky 5 de 19 L idée est d avoir des points d entrée multiples pour les référenes, un par lasse de base. Chaque point d entrée a un hamp entête () qui pointe vers une table de méthodes virtuelles. Quand on passe d une sous-lasse à une super-lasse on met à jour le pointeur de l objet pour qu il pointe vers le point d entrée orret. La redéfinition d une méthode rend néessaire de se déplaer d un point d entrée au début de l objet englobant. Cela est réalisé par une méthode trampoline qui, une fois appelée, retourne la référene de l objet englobant en soustrayant une valeur onnue du point d entrée. Cette tehnique a été utilisée pour gbeta et C++. Prodution de ode, langages à héritage multiple Martin Odersky 6 de 19 Colored Colored 1 Avantages de la tehnique par trampolines : Des performanes raisonnables même dans le pire des as. Les hamps et les méthodes peuvent être hérités de façon multiple. tramp Colored 2 tramp Désavantages : Suroût des méthodes trampoline. les strutures de données ovariantes ne sont pas supportées : Colored[] <: [] ne peut pas fontionner ar il faudrait alors mettre à jour haque pointeur dans le tableau. Les méthodes trampolines sont, pour Colored 1 : tramp(p) = p, pour Colored 2 : tramp(p) = p - 8. Pour deu variables p: et p: Colored on a : p = p devient p = p + 8, p = p devient p = p.tramp(p). Prodution de ode, langages à héritage multiple Martin Odersky 7 de 19 Prodution de ode, langages à héritage multiple Martin Odersky 8 de 19

Une autre tehnique de dispathing est le tableau de déplaement de lignes (row-displaement table). Le problème du dispathing dynamique est le suivant : Étant donné un ensemble de lasses et de méthodes, trouver le ode orrespondant à une lasse et à une méthode données. Si l on énumère les lasses et les méthodes, ette tâhe se réduit à une opération d indeage dans un tableau bi-dimensionnel : Objet Main equals append main Le tableau de déplaement de lignes devient vite énorme : Une appliation de 500 lasses et 2 000 noms de méthodes uniques rée une table de 1 000 000 d entrées. Ce tableau à deu dimensions est oupé de façon lairsemée ar haque lasse n implante qu un petit sous-ensemble de toutes les méthodes. On peut obtenir une meilleure utilisation de l espae en imbriquant les lignes suessives omme un ensemble de peignes : Prodution de ode, langages à héritage multiple Martin Odersky 9 de 19 Prodution de ode, langages à héritage multiple Martin Odersky 10 de 19 Tableau de déplaement En Java, on peut obtenir une bonne utilisation de l espae de la façon suivante : Indeer le tableau ave les lasses et les interfaes plutôt qu ave les lasses et les méthodes. Une entrée du tableau pointe sur l endroit dans une VMT où la méthode de l interfae est implantée. Cette tehnique a été utilisée dans ertaines implantations très rapides de Java. VMT de Colored interfae Colored interfae Copyable Prodution de ode, langages à héritage multiple Martin Odersky 11 de 19 Prodution de ode, langages à héritage multiple Martin Odersky 12 de 19

Considérations de pipelining Le ode de dispathing pour l appel : obj: I;... obj.meth() est obj.(i.number).meth(). Question : Comment savons-nous que l entrée du tableau est utilisée pour la lasse ourante? Réponse : Nous n avons pas besoin de le savoir, ar Java est statiquement typé! L avantage du dispathing ave tableau à lignes (row table) est sa bonne performane ave le as moyen = au pire des as. Le dispathing par VMT et elui par tableau à lignes introduisent des bulles dans le pipeline. On ne peut aller herher de nouvelles instrutions qu après avoir alulé l adresse dynamique de la méthode. Dans les proesseurs modernes ave des pipelines profonds, ela peut s avérer très oûteu. Un proesseur de type Pentium 4 utilise un pipeline d une profondeur pouvant aller jusqu à 31 stages, sur plusieures instrutions en parallèle : une bulle dans le pipeline oûte très her. C est d ailleurs enore pire ave des proesseurs à mots d instrutions très larges (VLIW) Prodution de ode, langages à héritage multiple Martin Odersky 13 de 19 Prodution de ode, langages à héritage multiple Martin Odersky 14 de 19 Antémémoires En réalité, de nombreu appels vont toujours à la même lasse. On peut améliorer les performanes du dispathing grâe au antémémoires (inline ahing) : Pour haque instrution d appel se rappeler le ode qui a été utilisé à la dernière eéution de ette instrution. Sauter immédiatement vers e ode sans utiliser le dispathing dynamique. Au début du ode ible, tester si l on est dans la bonne lasse. Si e n est pas le as, retourner au shéma de dispathing dynamique lassique, plus lent. Ce shéma permet un gain important si les appels vont toujours à la même lasse... sinon est une grosse perte! Le inline ahing est utilisé pour implanter les appels au méthodes d interfae dans HotSpot : L instrution invoke_interfae a un hamp qui ontient la relative de l entrée de la méthode qui a été invoquée durant la dernière eéution de ette instrution (par rapport au début de la VMT). Quand invoke_interfae est eéutée, il est d abord vérifié qu une entrée pour la méthode appelée se trouve bien à la donnée. Sinon on reherhe linéairement parmi toutes les méthodes de l objet donné une méthode qui orresponde au nom et au type de la méthode appelée. Prodution de ode, langages à héritage multiple Martin Odersky 15 de 19 Prodution de ode, langages à héritage multiple Martin Odersky 16 de 19

Antémémoires polymorphes Compilateurs JIT Le inline ahing est une optimisation tout ou rien : est soit très rapide soit inutile (voir même néfaste). Un ompromis est de garder un tableau des n dernières ibles. Si la ible ourante est dans le tableau, sauter diretement, sinon ontinuer ave le dispathing dynamique et ajouter la nouvelle ible dans le tableau. Si le tableau devient grand : retour au dispathing dynamique. Ce shéma est dérit dans la thèse de Urs Hölzle. Il est utilisé dans les implantations de Self et HotSpot. Avantage : on évite les bulles dans le pipeline : potentiellement de très bonnes performanes, même meilleures que le dispathing simple ave VMT pour l héritage simple. Désavantage : imprévisible : peut être (légèrement) pire que le dispathing ave VMT dans les mauvais as. Prodution de ode, langages à héritage multiple Martin Odersky 17 de 19 L interprétation du byteode Java réduit les performanes. La distribution des lasses Java sous forme de ode natif améliorerait les performanes, mais au pri de la portabilité et de la séurité. (just-in-time) offrent une solution. Un ompilateur JIT ompile le byteode en ode natif, soit au hargement, soit après quelques eéutions du ode. En prinipe le ode ompilé JIT peut être plus rapide que du ode natif ompilé statiquement vu qu il y a plus d informations disponibles à l eéution qu à la ompilation : quelles méthodes sont appelées le plus souvent? ombien de méthodes différentes et appel invoque-t-il? Prodution de ode, langages à héritage multiple Martin Odersky 18 de 19 En pratique le ode ompilé JIT est généralement plus lent que du ode natif ar : le suroût de la ompilation ralentit l eéution, les optimisations des ompilateurs JIT doivent aller vite et sont don moins agressives que les optimisations des ompilateurs de ode natif. Il faut trouver un ompromis sur : ompilateur JIT lent et ode généré rapide ou ompilateur JIT rapide et ode généré lent? quand invoquer le ompilateur JIT? Symante le fait à la première eéution, Inprise à la seonde, HotSpot à la 1 000 e et HotSpot (serveur) à la 10 000 e. Prodution de ode, langages à héritage multiple Martin Odersky 19 de 19