Spelling suggestions: "subject:"langage iit"" "subject:"langage toit""
1 |
L'interface native de Nit, un langage de programmation à objetsLaferrière, Alexis 03 1900 (has links) (PDF)
L'interface native permet à un logiciel de profiter des avantages des langages natifs ainsi que de ceux du langage de haut niveau. Elle intervient entre les différents langages pour permettre les appels de méthodes et la conversion des données. Son utilisation amène cependant généralement une perte de sûreté à l'exécution du logiciel et son emploi est souvent complexe. Dans le cadre de cette recherche, nous développons l'interface native du langage de programmation à objets Nit. Notre recherche vise à résoudre au mieux les problèmes soulevés par l'utilisation d'une interface native, et ce, par une analyse rigoureuse des différents détails de conception d'une interface. Notre intention est donc de concevoir, selon des objectifs précis, l'interface native idéale pour le langage Nit. Pour mettre à l'épreuve notre proposition, nous avons conçu et implémenté l'interface native du compilateur Nit. La conception de cette interface native s'appuie donc sur des objectifs que nous considérons garants d'une interface native de qualité. Ces objectifs consistent à préserver la sûreté d'exécution du logiciel, maintenir une connaissance du flot d'appels, utiliser le langage Nit de façon expressive et selon ses forces, conserver une syntaxe naturelle en C ainsi qu'offrir une interface native versatile et d'utilisation rapide par tout autre moyen. Pour atteindre ces objectifs, nous proposons quatre grandes approches clés : la forme des modules hybrides pour gérer la coexistence de deux langages; une déclaration explicite des appels de méthodes réalisées depuis le langage C pour conserver la connaissance du flot d'appels; une représentation symétrique des types et méthodes Nit en C pour en permettre une utilisation naturelle et vérifiée statiquement; les classes natives qui représentent les types C en Nit et leur appliquent les forces du paradigme de programmation à objets, dont le polymorphisme. Enfin, pour valider l'interface native proposée et implémentée, nous présentons comment nous avons utilisé cette interface pour réaliser des modules et des logiciels Nit. Nous démontrons également que cette interface peut être utilisée dans le développement d'autres interfaces spécialisées en fonction de besoins spécifiques.
______________________________________________________________________________
MOTS-CLÉS DE L’AUTEUR : interface native, interface de fonctions étrangères, compilation, langages de programmation à objets
|
2 |
Extensions parallèles pour le langage NitPoirier, Sylvain 06 1900 (has links) (PDF)
Grâce à la miniaturisation et à l'arrivée des processeurs multicœurs dans les ordinateurs personnels, la programmation parallèle ne semble plus être réservée aux groupes restreints d'utilisateurs ayant accès à des superordinateurs ou à des grappes de calculs. De plus, avec la tendance actuelle d'augmenter constamment le nombre de cœurs des processeurs, le besoin de développer des applications pouvant s'exécuter correctement sur l'ensemble des unités de traitement disponibles est un enjeu déterminant. Sous de telles conditions, tout langage de programmation récent devrait être doté de mécanismes permettant la génération et l'exploitation de calculs parallèles. Dans le présent mémoire, nous explorons la possibilité d'intégrer des extensions parallèles à un langage orienté objet récent qui, au départ, ne possédait aucun support pour la programmation parallèle. Le langage utilisé est Nit, un langage développé conjointement à l'UQAM et au LIRMM (Montpellier, France). Nit est un langage moderne orienté objet dont la mise en œuvre utilise de nouvelles techniques de compilation, à la fine pointe de la recherche sur les langages orientés objet. À ce langage de base séquentiel, nous avons ajouté un module, appelé NitSpace, qui permet d'échanger de l'information entre des processus qui s'exécutent en parallèle. Ce module est fondé sur le modèle Linda proposé par Carriero et Gelernter (2). Le modèle Linda propose de partager, entre les processus, un espace de tuples par l'intermédiaire duquel les divers processus échangent de l'information, et ce à l'aide de quatre opérations principales : out, in, rd et eval. À ces quatre opérations s'ajoutent aussi deux variantes non bloquantes des opérations de lecture : inp et rdp. Ces diverses opérations permettent l'ajout, l'extraction et la lecture dans un espace partagé de tuples. Un avantage du modèle Linda est sa simplicité, mais en permettant malgré tout la définition des structures de données plus complexes telles que sémaphores, barrières de synchronisation, sacs de tâches, tableaux distribués, flux de données, etc. Le modèle Linda, défini au départ dans le contexte du langage C, a par la suite été intégré à d'autres langages, qui ont introduit des variantes au modèle original. Quelques-unes de ces variantes seront présentées, en présentant les implémentations qui ont été réalisées dans les langages Ruby, Python, Scala et Java. Nous avons choisi de présenter ces langages car, tout comme Nit, il s'agit de langages orientés objets. Les caractéristiques de ces différentes mises en œuvre du modèle Linda ont aussi influencé le choix de conception et de réalisation de notre module NitSpace. L'implémentation de ce module fut réalisée en trois couches que l'on présentera en détail. La majeure partie représentant la couche de bas niveau fut réalisée en C. À celle-ci s'ajoute une couche médiane qui permet de relier la couche C à la couche Nit. Finalement, la couche supérieure, écrite entièrement en Nit, représente l'API qui permet à un programme Nit de générer des calculs parallèles.
______________________________________________________________________________
MOTS-CLÉS DE L’AUTEUR : Nit, NitSpace, programmation parallèle, Linda, espace de tuples.
|
3 |
Prévention de déréférencements de nulGélinas, Jean-Sébastien 06 1900 (has links) (PDF)
La bonne gestion des déréférencements de nul dans les langages à objets statiquement typés est un problème complexe qui est loin d'être nouveau. Plusieurs approches existent, mais aucune n'est parfaite. Les diverses solutions au déréférencement de nul se partagent trois dimensions : (1) la simplicité, (2) l'exactitude des résultats et (3) le typage statique. Présentement, à notre connaissance, aucune solution ne présente ces trois dimensions. Un des problèmes majeurs de la gestion des déréférencements de nul est la gestion des attributs, notamment lors de l'instantiation des objets. L'approche que nous présentons ici pour gérer les déréférencements de nul est une approche (1) simple et (2) exacte. Bien que notre approche présente un composant de typage statique, nous ajoutons aussi des tests dynamiques pour la compléter, ce qui fait qu'elle ne respecte pas totalement les trois dimensions. Nous introduisons aussi des analyses statiques pour détecter l'initialisation d'attributs dans les constructeurs pour ensuite, à l'aide d'optimisations, supprimer les tests dynamiques que nous avons ajoutés à la phase précédente. Pour un programme de grande taille (110.000 lignes de code), nous parvenons, avec nos analyses et nos optimisations, à supprimer 100% des tests dynamiques que nous avions introduits, tout en garantissant de façon statique qu'aucune erreur en lien avec le déréférencement de nul ne pourra se produire lors de l'exécution du programme. En conséquence, notre solution améliorée par les analyses statiques proposées permet de présenter les trois dimensions recherchées pour un sous-ensemble des programmes, ce qui fait un compromis très intéressant.
______________________________________________________________________________
MOTS-CLÉS DE L’AUTEUR : compilation, analyse statique, optimisation, types nullables, validation d'attributs, Nit
|
Page generated in 0.0559 seconds