1 |
Automatic generation of VHDL-AMS from UML representations of mixed signal systemsCarr, Caitriona January 2005 (has links)
No description available.
|
2 |
A method for generating test cases with the unified modeling language for use with hyper-sequential programmingRudram, Christopher January 2003 (has links)
No description available.
|
3 |
An object oriented approach to interactive engineering software developmentCallaghan, Marie-Therese January 1993 (has links)
No description available.
|
4 |
Automatic detection of 'bad smell' design problems in object-oriented Java systemsMunro, Matthew James January 2006 (has links)
No description available.
|
5 |
Distributed processing, reconfigurable processes and active networkPeng, Yanfeng January 2003 (has links)
The fast spread of the Internet and the increasing demands of the service are leading to radical changes in the structure and management of underlying telecommunications systems. Active networks (ANs) offer the ability to program the network on a per-router, per-user, or even per-packet basis, thus promise greater flexibility than current networks. To make this new network paradigm of active network being widely accepted, a lot of issues need to be solved. Management of the active network is one of the challenges. This thesis investigates an adaptive management solution based on genetic algorithm (GA). The solution uses a distributed GA inspired by bacterium on the active nodes within an active network, to provide adaptive management for the network, especially the service provision problems associated with future network. The thesis also reviews the concepts, theories and technologies associated with the management solution. By exploring the implementation of these active nodes in hardware, this thesis demonstrates the possibility of implementing a GA based adaptive management in the real network that being used today. The concurrent programming language, Handel-C, is used for the description of the design system and a re-configurable computer platform based on a FPGA process element is used for the hardware implementation. The experiment results demonstrate both the availability of the hardware implementation and the efficiency of the proposed management solution.
|
6 |
Supporting integration activities in object-oriented applications / Aide à l'intégration des applications orientées objetsUquillas Gómez, Verónica Isabel 04 October 2012 (has links)
Les développeurs doivent souvent intégrer des modifications dans les versions en production de leurs applications. Des techniques de fusion avancée et automatique les aident dans cette intégration. Cependant ces techniques ne permettent pas de garantir un système fonctionnel et ne supportent pas une adaptation à la carte. Les techniques de pointe sont pour la plus part des outils textuels qui ne fournissent pas un aperçu global des modifications. En même temps, les outils existants n'offrent pas la possibilité de comprendre les changements au sein de leur contexte spécifique. Les développeurs doivent lire le code changé, vérifier les `diffs', se construire une idée d'un changement par eux-mêmes et comprendre le contexte pour évaluer l'impact des modifications.Cela peut être compliqué dans l'intégration de grands systèmes avec des modifications dans différentes `branches'. La fusion textuelle automatique ne prend pas en compte les entités de programme qu’une modification affecte ou leurs dépendances. Les développeurs doivent comparer manuellement chaque des changements et leur source d'origine. Cette thèse présente une solution pour les activités d'intégration, comme aider à comprendre l'effet d'un changement au sein d'une longue liste de changements dans un `commit'. Nous proposons une représentation de l'histoire du code source et des modifications d'un logiciel. Nous calculons les dépendances logiques entre les changements. Avec le soutien d'un outil visuel pour la caractérisation des changements et des dépendances, il est possible de fournir une approche globale pour aider les développeurs à comprendre les changements et de les guider au cours des processus d’intégration. / Developers deal with the integration of source code changes into the system release. Automatic and advanced merging techniques help them to merge their modifications. While these techniques help to merge changes, they do not guarantee to have a functional system, and they do not support performing cherry picking. Current state-of-the-art consists mostly of textual diff tools that do not provide an overview of the changes (how changes are distributed? what groups of entities did change?). At the same time, existing tools do not offer the possibility to understand changes within their specific context. Developers need to manually read the changed code, check the diffs to build an idea of a change, understand its context and assess its impact. This can be more complicated when developing large systems and the integration of streams of changes between branches is needed. Merging changes does not take into account the program entities they affect or their dependencies. Developers are responsible for performing manual and tedious comparison within the input stream of changes and also with their originating source. This dissertation presents a solution that supports the integration activities, such as aiding in understanding changes within a commit or within a stream of changes. We propose a first-class representation of the source code history and changes of a software system to enable the calculation of dependencies between changes. This combined with visual tool support for characterizing changes and dependencies, makes it possible to provide encompassing support for software integration aiding developers in understanding changes and guiding them during the merging processes.
|
7 |
Virtualization support for application runtime specialization and extension / Virtualisation pour spécialisation et extension d'environnements d'exécutionPolito, Guillermo 13 April 2015 (has links)
Un environnement d'exécution est l'ensemble des éléments logiciels qui représentent une application pendant son exécution. Les environnements d'exécution doivent être adaptables à différents contextes. Les progrès des technologies de l'information, tant au niveau logiciel qu'au niveau matériel, rendent ces adaptations nécessaires. Par exemple, nous pouvons envisager d'étendre un langage de programmation pour améliorer la productivité des développeurs. Aussi, nous pouvons envisager de réduire la consommation mémoire des applications de manière transparente afin de les adapter à certaines contraintes d'exécution e.g., des réseaux lents ou de la mémoire limités. Nous proposons Espell, une infrastructure pour la virtualisation d'environnement d'éxécution de langages orienté-objets haut-niveau. Espell fournit une infrastructure généraliste pour le contrôle et la manipulation d'environnements d'exécution pour différentes situations. Une représentation de "premier-ordre" de l'environnement d'exécution orienté-objet, que nous appelons "object space", fournit une interface haut-niveau qui permet la manipulation de ces environnements et clarifie le contrat entre le langage et la machine virtuelle. Un hyperviseur est client d'un object space et le manipule soit directement au travers d'objets "miroirs", soit en y exécutant des expressions arbitraires. Nous avons implémenté un prototype de Espell sur Pharo. Nous montrons au travers de notre prototype que cet infrastructure supporte le "bootstrapping" (i.e., l'amorçage ou initialisation circulaire) des langages et le "tailoring"~(i.e., la construction sur-mesure ou "taille") d'environnement d'exécution. En utilisant l'amorçage nous initialisons un langage orienté-objet haut-niveau qui est auto-décrit. Un langage amorcé profite de ses propres abstractions se montrant donc plus simple à étendre. Nous avons amorcé quatre langages qui présentent des modèles de programmation différents e.g., avec des "traits", avec des variables d'instance de 'premier-ordre' ou avec une couche réflexive basé sur le concept de "miroirs". La taille d'environnements d'exécution est une technique qui génère une application spécialisé en extrayant seulement le code utilisé pendant l'exécution d'un programme. Une application taillée inclut seulement les classes et méthodes qu'elle nécessite, et évite que des librairies et des frameworks externes surchargent inutilement la base de code. Notre technique de taille basé sur Espell, que nous appelons "run-fail-grow" (i.e., exécuter-échouer-grandir), créé des versions spécialisées des applications, en sauvant entre un 95% et 99% de la mémoire en comparaison avec la distribution officielle de Pharo. / An application runtime is the set of software elements that represent an application during its execution. Application runtimes should be adaptable to different contexts. Advances in computing technology both in hardware and software indeed demand it. For example, on one side we can think on extending a programming language to enhance the developers' productivity. On the other side we can also think on transparently reducing the memory footprint of applications to make them fit in constrained resource scenarios e.g., low networks or limited memory availability. We propose Espell, a virtualization infrastructure for object-oriented high-level languages runtimes. Espell provides a general purpose infrastructure to control and manipulate object-oriented runtimes in different situations. A first-class representation of an object-oriented runtime, namely an "object space", provides a high-level API that allows the manipulation of such runtime and clarifies the contract between the language and the virtual machine. A hypervisor is the client of an object space and manipulates it either directly through mirror objects, either by executing arbitrary expressions into it. We implemented a Espell prototype on Pharo. We show with this prototype that this infrastructure supports language "bootstrapping" and application runtime "tailoring". Using bootstrapping we describe an object-oriented high-level language initialization in terms of itself. A bootstrapped language takes benefit of its own abstractions and shows easier to extend. We bootstrapped four languages presenting different programming models e.g., traits, first-class instance variables and mirror-based reflection. Application runtime tailoring is a technique that generates a specialized application by extracting the elements of a program that are used during execution. A tailored application encompasses only the classes and methods it needs and avoids the code bloat that appears from the usage of third-party libraries and frameworks. Our run-fail-grow tailoring technique based on Espell succeeds in creating specialized versions of applications, saving between a 95% and 99% of memory in comparison with Pharo's official distribution.
|
8 |
Sista : a metacircular architecture for runtime optimisation persistence / Sista : une architecture métacirculaire pour la persistance d'optimisation à la voléeBéra, Clément 15 September 2017 (has links)
La plupart des langages de programmation de haut niveau s'exécutent sur une machine virtuelle (VM) pour être indépendant du hardware utilisé. Pour atteindre de hautes performances, la VM repose généralement sur un compilateur à la volée (JIT), qui spécule sur le comportement du programme basé sur ses premières exécutions pour générer à la volée du code machine efficace et accélérer l'exécution du programme. Étant donné que plusieurs exécutions sont nécessaires pour spéculer correctement sur le comportement du programme, une telle VM nécessite un certain temps au démarrage pour atteindre les performances maximales. Le JIT est habituellement compilé en code exécutable avec le reste de la VM avant sa première utilisation. La thèse propose Sista, une architecture pour un JIT, dans laquelle l'état optimisé de la VM peut être persisté entre plusieurs démarrages de la VM et le JIT s'exécute dans le même environnement d'exécution que le programme exécuté. Pour ce faire, le JIT est divisé en deux parties. Une partie est de haut niveau: elle effectue des optimisations spécifiques au langage de programmation exécuté par la VM et est méta-circulaire. Sans connaissances des détails de bas niveau, cette partie peut être lue, éditée et déboguée pendant le fonctionnement du programme en utilisant les outils de développement du langage de programmation exécuté par la VM. La deuxième partie est de bas niveau: elle effectue des optimisations spécifiques au hardware utilisé et est compilée en code exécutable, au sein de la VM, avant sa première utilisation. Les deux parties du JIT utilisent une représentation intermédiaire bien définie pour échanger le code à optimiser. Cette représentation est indépendante du hardware utilisé et peut être persistée entre plusieurs démarrages de la VM, ce qui permet à la VM d'atteindre rapidement les performances maximales. Pour valider l'architecture, la thèse inclus la description d'une implémentation utilisant Pharo Smalltalk et sa VM. L'implémentation est évaluée par rapport à différents indices de performance, incluant l'exécution de programme utilisés en entreprise et de petits programmes utilisés pour mesurer la performance d'aspects spécifiques de la VM. Le JIT est implémenté selon l'architecture proposée et permet d'exécuter le programme jusqu'à 5x plus vite que la VM en production aujourd'hui. En outre, les indices de performance montrent que les performances maximales peuvent être atteintes presque immédiatement après le démarrage de la VM si cette dernière peut réutiliser l'état optimisé d'une autre exécution. / Most high-level programming languages run on top of a virtual machine (VM) to abstract away from the underlying hardware. To reach high-performance, the VM typically relies on an optimising just-in-time compiler (JIT), which speculates on the program behavior based on its first runs to generate at runtime efficient machine code and speed-up the program execution. As multiple runs are required to speculate correctly on the program behavior, such a VM requires a certain amount of time at start-up to reach peak performance. The optimising JIT itself is usually compiled ahead-of-time to executable code as part of the VM. The dissertation proposes Sista, an architecture for an optimising JIT, in which the optimised state of the VM can be persisted across multiple VM start-ups and the optimising JIT is running in the same runtime than the program executed. To do so, the optimising JIT is split in two parts. One part is high-level: it performs optimisations specific to the programming language run by the VM and is written in a metacircular style. Staying away from low-level details, this part can be read, edited and debugged while the program is running using the standard tool set of the programming language executed by the VM. The second part is low-level: it performs machine specific optimisations and is compiled ahead-of-time to executable code as part of the VM. The two parts of the JIT use a well-defined intermediate representation to share the code to optimise. This representation is machine-independent and can be persisted across multiple VM start-ups, allowing the VM to reach peak performance very quickly. To validate the architecture, the dissertation includes the description of an implementation on top of Pharo Smalltalk and its VM. The implementation is able to run a large set of benchmarks, from large application benchmarks provided by industrial users to micro-benchmarks used to measure the performance of specific code patterns. The optimising JIT is implemented according to the architecture proposed and shows significant speed-up (up to 5x) over the current production VM. In addition, large benchmarks show that peak performance can be reached almost immediately after VM start-up if the VM can reuse the optimised state persisted from another run.
|
9 |
Towards self-aware virtual machines / Vers des machines virtuelles auto-décritesBruni, Camillo 16 May 2014 (has links)
Les langages de haut-niveau supportent des opérations réflectives qui permettent à l’environnement d’exécution d’un langage d’inspecter et de changer son propre état et sa propre exécution. Ces langages de haut-niveau s’exécutent normalement sur une machine virtuelle (VM) qui ajoute une couche d’abstraction au-dessus du matériel. À cause de cette séparation, peu d’opérations réflectives sont disponibles pour inspecter et modifier la VM. Plusieurs VMs expérimentales offrent de telles opérations réflectives en proposant un modèle unifié qui ne distingue pas la couche VM de la couche langage. Dans cette thèse, nous suivons une approche similaire qui propose un environnement d’exécution unifié et auto-décrit. Nous nous intéressons à une solution minimale. Au lieu de dépendre de modifications d’une VM, nous générons dynamiquement du code natif depuis la couche langage. Nous présentons Benzo, un framework pour la génération dynamique de code natif. Benzo fournit une interface générique et de bas-niveau pour accéder aux fonctionnalités fondamentales de la VM. Grâce à Benzo, nous analysons plusieurs applications qui nécessitent un accès direct à la VMM. Nous montrons comment Benzo peut être utilisé pour implémenter une librairie de Foreign Function Interfaces, permettant de faciliter l’accès aux fonctionnalités bas-niveau de la VM. Pour évaluer les limitations de Benzo, nous visons deux autres applications: la génération dynamique de primitive et un compilateur JIT (Just-In-Time). Ces deux applications doivent changer le comportement de la VM. Pour cela, elles ont besoin d’une interaction poussée avec la VM. / High-level languages implement reflection which allows a language runtime to inspect and alter its own execution and state. These high-level languages typically run on top of virtual machines (VMs) which have been built to create an abstraction layer over hardware. Due to the isolating nature of the VM, reflection is generally limited to the language-side. Several research VMs overcome this limitation and provide a unified model where there is no more a clear distinction between language-side and VM-side. In such a language runtime it is possible to reflectively modify VM components from language-side as they reside on the same abstraction layer. In this dissertation we follow the same global direction towards a unified language-runtime and self-aware VM. However, instead of looking for a holistic solution we focus on a minimal approach. Instead of using a custom tailored language runtime we use dynamic native code activation from language-side on top of an existing VM. We first present Benzo our framework for dynamic native code activation. Benzo provides a generic but low-level interface to the VM internals. Based on this framework we then evaluate several applications that typically require direct VM support. We show first how Benzo is used to build an efficient Foreign Function Interface, allowing for a more structured access to VM internal functions. To evaluate the limitations of Benzo we target two more applications: dynamic primitives and a language-side JIT compiler. Both of them require a tight interaction with the underlying VM.
|
10 |
A modular approach to object initialization for Pharo / Une approche modulaire de l'initialisation d'objets pour PharoNaddeo, Marco 24 November 2017 (has links)
La modularité du code favorise la réutilisation. Les concepteurs de langages de programmation se sont principalement consacrés à la modularité des méthodes. À l’inverse, la modularité du code d’initialisation a souvent été négligé. Le code d’initialisation de beaucoup de langages orientés objets à classe est laborieux dans plusieurs cas: par exemple, quand quelques champs (i.e., variables d’instances) ont plusieurs options d’initialisation (e.g., un rectangle peut être initialisé avec des coordonnées Cartésiennes ou polaires), ont une initialisation optionnelle (e.g., un rectangle peut être positionné à une coordonnée fournie ou à l’origine (0,0) si aucune coordonnée n’est fournie) ou héritent d’une initialisation de la super classe (e.g., un rectangle coloré doit redéfinir tous les constructeurs de sa super classe pour ajouter la notion de couleur). Dans de telles circonstances, le nombre de constructeurs augmente exponentiellement avec les options d’initialisation car l’approche d’initialisation manque de modularité.Nous proposons une approche d’initialisation novatrice s’inspirant du langage prototypique Magda. Cette approche est basée sur des modules d’initialisation composables plus petits que les constructeurs classiques. De plus, le nombre de ces modules augmente linéairement avec les options d’initialisation. Nous appliquons cette approche à Pharo, un langage orienté objets dynamiquement typé inspiré de Smalltalk. L’adaptation à Pharo de l’approche d’initialisation de Magda implique la résolution de nouveaux défis issus du passage d’un contexte statiquement typé à un contexte dynamique. / Code modularity is important for code reuse. Language designers mainly focused on method code modularity. On the contrary, initialization code modularity has usually been neglected. The initialization code of many class-based object-oriented languages becomes cumbersome in different situations: for example, when some fields have multiple initialization options (e.g., a rectangle can be positioned by providing Cartesian or polar coordinates), have optional initialization (e.g., a rectangle can be positioned in the origin (0,0) if no other coordinates are provided), or have superclass initialization (e.g., a colored rectangle must redefine all the constructors of its rectangle superclass to add the notion of color). In such cases, the number of constructors increases exponentially in the size of the initialization options, since the initialization approach lacks modularity.We propose a novel approach to field initialization, inspired by the prototypical language Magda. This approach is based on easy-to-compose initialization modules, which result to be smaller compared to classical constructors. Moreover, their number grows linearly in the size of the initialization options. We apply such approach to Pharo, a dynamically-typed object-oriented programming language inspired by Smalltalk. The adaptation to Pharo of Magda’s initialization approach implies solving some new challenges related to moving from a statically typed context to a dynamically typed one.
|
Page generated in 0.0283 seconds