Repositório Comunidade: HASLabHASLabhttps://hdl.handle.net/1822/212912024-03-28T11:39:06Z2024-03-28T11:39:06ZPerfEnerPy - Uma ferramenta para a avaliação da performance e eficiência energética de ferramentas DataframesMartins, AndréVilaça, Ricardo Manuel Pereirahttps://hdl.handle.net/1822/902342024-03-28T10:50:59Z2024-03-28T10:50:58ZTítulo: PerfEnerPy - Uma ferramenta para a avaliação da performance e eficiência energética de ferramentas Dataframes
Autor: Martins, André; Vilaça, Ricardo Manuel Pereira
Resumo: [Excerto] Dataframes [7] são estruturas de dados, frequentemente utilizadas em linguagens de scripting, como o Python, que implementam algoritmos para análise de dados e que são capazes de representar princípios de álgebra relacional e linear. As dataframes tornaram-se uma estrutura de dados de eleição para a análise de dados, sendo o pandas [5] a ferramenta mais utilizada a nível global. [...]
<b>Tipo</b>: conferenceAbstract2024-03-28T10:50:58ZWhy Adjunctions Matter—A Functional Programmer PerspectiveOliveira, José Nuno Fonsecahttps://hdl.handle.net/1822/902032024-03-27T17:58:15ZTítulo: Why Adjunctions Matter—A Functional Programmer Perspective
Autor: Oliveira, José Nuno Fonseca
Resumo: For the average programmer, adjunctions are (if at all known) more respected than loved. At best, they are regarded as an algebraic device of theoretical interest only, not useful in common practice. This paper is aimed at showing the opposite: that adjunctions underlie most of the work we do as programmers, in particular those using the functional paradigm. However, functions alone are not sufficient to express the whole spectrum of programming, with its dichotomy between specifications—what is (often vaguely) required—and implementations—how what is required is (hopefully well) implemented. For this, one needs to extend functions to relations. Inspired by the pioneering work of Ralf Hinze on “adjoint (un)folds”, the core of the so-called (relational) Algebra of Programming is shown in this paper to arise from adjunctions. Moreover, the paper also shows how to calculate recursive programs from specifications expressed by Galois connections—a special kind of adjunction. Because Galois connections are easier to understand than adjunctions in general, the paper adopts a tutorial style, starting from the former and leading to the latter (a path usually not followed in the literature). The main aim is to reconcile the functional programming community with a concept that is central to software design as a whole, but rarely accepted as such.
<b>Tipo</b>: conferencePaperOn difunctionsBackhouse, RolandOliveira, José Nuno Fonsecahttps://hdl.handle.net/1822/902022024-03-27T17:54:12ZTítulo: On difunctions
Autor: Backhouse, Roland; Oliveira, José Nuno Fonseca
Resumo: The notion of a difunction was introduced by Jacques Riguet in 1948. Since then it has played a prominent role in database theory, type theory, program specification and process theory. The theory of difunctions is, however, less known in computing than it perhaps should be. The main purpose of the current paper is to give an account of difunction theory in relation algebra, with the aim of making the topic more mainstream. As is common with many important concepts, there are several different but equivalent characterisations of difunctionality, each with its own strength and practical significance. This paper compares different proofs of the equivalence of the characterisations. A well-known property is that a difunction is a set of completely disjoint rectangles. This property suggests the introduction of the (general) notion of the “core” of a relation; we use this notion to give a novel and, we believe, illuminating characterisation of difunctionality as a bijection between the classes of certain partial equivalence relations.
<b>Tipo</b>: articleCompiling Quantamorphisms for the IBM Q ExperienceNeri, AnaBarbosa, Rui SoaresOliveira, José Nuno Fonsecahttps://hdl.handle.net/1822/901922024-03-28T09:35:13ZTítulo: Compiling Quantamorphisms for the IBM Q Experience
Autor: Neri, Ana; Barbosa, Rui Soares; Oliveira, José Nuno Fonseca
Resumo: Based on the connection between the categorical derivation of classical programs from specifications and a category-theoretic approach to quantum information, this paper contributes to extending the laws of classical program algebra to quantum programming. This aims at building correct-by-construction quantum circuits to be deployed on quantum devices such as those available through the IBM Q Experience. Reversibility is ensured by minimal complements. Such complementation is extended inductively to encompass catamorphisms on lists (vulgo folds), giving rise to the corresponding recursion scheme in reversible computation. The same idea is then applied to the setting of quantum programming, where computation is expressed by unitary transformations. This yields the notion of 'quantamorphism', a structural form of quantum recursion implementing cycles and folds on lists with quantum control flow. By Kleisli correspondence, quantamorphisms can be written as monadic functional programs with quantum parameters. This enables the use of Haskell, a monadic functional programming language, to perform the experimental work. Such calculated quantum programs prepared in Haskell are pushed through Quipper and the Qiskit interface to IBM Q quantum devices. The generated quantum circuits - often quite large - exhibit the predicted behaviour. However, running them on real quantum devices naturally incurs a significant amount of errors. As quantum technology is rapidly evolving, an increase in reliability is likely in the future, allowing for our programs to run more accurately.
<b>Tipo</b>: articleA large-scale empirical study on mobile performance: energy, run-time and memoryRua, Rui António RamadaSaraiva, Joãohttps://hdl.handle.net/1822/901892024-03-27T17:04:15Z2024-03-27T17:04:13ZTítulo: A large-scale empirical study on mobile performance: energy, run-time and memory
Autor: Rua, Rui António Ramada; Saraiva, João
Resumo: Software performance concerns have been attracting research interest at an increasing rate, especially regarding energy performance in non-wired computing devices. In the context of mobile devices, several research works have been devoted to assessing the performance of software and its underlying code. One important contribution of such research efforts is sets of programming guidelines aiming at identifying efficient and inefficient programming practices, and consequently to steer software developers to write performance-friendly code. Despite recent efforts in this direction, it is still almost unfeasible to obtain universal and up-to-date knowledge regarding software and respective source code performance. Namely regarding energy performance, where there has been growing interest in optimizing software energy consumption due to the power restrictions of such devices. There are still many difficulties reported by the community in measuring performance, namely in large-scale validation and replication. The Android ecosystem is a particular example, where the great fragmentation of the platform, the constant evolution of the hardware, the software platform, the development libraries themselves, and the fact that most of the platform tools are integrated into the IDE’s GUI, makes it extremely difficult to perform performance studies based on large sets of data/applications. In this paper, we analyze the execution of a diversified corpus of applications of significant magnitude. We analyze the source-code performance of 1322 versions of 215 different Android applications, dynamically executed with over than 27900 tested scenarios, using state-of-the-art black-box testing frameworks with different combinations of GUI inputs. Our empirical analysis allowed to observe that semantic program changes such as adding functionality and repairing bugfixes are the changes more associated with relevant impact on energy performance. Furthermore, we also demonstrate that several coding practices previously identified as energy-
<b>Tipo</b>: article2024-03-27T17:04:13Z