João Paulo Fernandes

dblp:94/5770 · DBLP profile ↗
← Back
43ranked-venue papers
4as first author
10since 2021 · last 2025
0000-0002-1952-9460ORCID · conflict

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 29 · 4 first-author · 8 since 2021Human-computer interaction and ubiquitous computing · 9 · 1 since 2021Applied, interdisciplinary, general and emerging computing · 5Artificial intelligence and machine learning · 1 · 1 since 2021Security and privacy · 1 · 1 since 2021Databases, data management, data science and information retrieval · 1
YearPublicationVenuePosition
2025 A Roadmap for Integrating Sustainability into Software Engineering Education
abstract
The world faces escalating crises: record-breaking temperatures, widespread fires, severe flooding, increased oceanic microplastics, and unequal resource distribution. Academia introduces courses around sustainability to meet the new demand, but software engineering education lags behind. While software systems contribute to environmental issues through high energy consumption, they also hold the potential for solutions, such as more efficient and equitable resource management. Yet, sustainability remains a low priority for many businesses, including those in the digital sector. Business as usual is no longer viable. A transformational change in software engineering education is urgently needed. We must move beyond traditional curriculum models and fully integrate sustainability into every aspect of software development. By embedding sustainability as a core competency, we can equip future engineers not only to minimise harm but also to innovate solutions that drive positive, sustainable change. Only with such a shift can software engineering education meet the demands of a world in crisis and prepare students to lead the next generation of sustainable technology. This article discusses a set of challenges and proposes a customisable education roadmap for integrating sustainability into the software engineering curricula. These challenges reflect our perspective on key considerations, stemming from regular, intensive discussions in regular workshops among the authors and the community, as well as our extensive research and teaching experience in the field.
Ana Moreira 0001, Patricia Lago, Rogardt Heldal, Stefanie Betz, Ian Brooks 0003, Rafael Capilla, Vlad C. Coroama, Leticia Duboc, João Paulo Fernandes, Ola Leifler, Ngoc-Thanh Nguyen 0002, Shola Oyedeji, Birgit Penzenstadler, Anne-Kathrin Peters, Jari Porras, Colin C. Venters
ACM Trans. Softw. Eng. Methodol.9
2024 Trading Runtime for Energy Efficiency: Leveraging Power Caps to Save Energy across Programming Languages
abstract
Energy efficiency of software is crucial in minimizing environmental impact and reducing operational costs of ICT systems. Energy efficiency is therefore a key area of contemporary software language engineering research. A recurrent discussion that excites our community is whether runtime performance is always a proxy for energy efficiency. While a generalized intuition seems to suggest this is the case, this intuition does not align with the fact that energy is the accumulation of power over time; hence, time is only one of the factors in this accumulation. We focus on the other factor, power, and the impact that capping it has on the energy efficiency of running software. We conduct an extensive investigation comparing regular and power-capped executions of 9 benchmark programs obtained from The Computer Language Benchmarks Game, across 20 distinct programming languages. Our results show that employing power caps can be used to trade running time, which is degraded, for energy efficiency, which is improved, in all the programming languages and in all benchmarks that were considered. We observe overall energy savings of almost 14% across the 20 programming languages, with notable savings of 27% in Haskell. This saving, however, comes at the cost of an overall increase of the program's execution time of 91% in average. We are also able to draw similar observations using language specific benchmarks for programming languages of different paradigms and with different execution models. This is achieved analyzing a wide range of benchmark programs from the nofib Benchmark Suite of Haskell Programs, DaCapo Benchmark Suite for Java, and the Python Performance Benchmark Suite. We observe energy savings of approximately 8% to 21% across the test suites, with execution time increases ranging from 21% to 46%. Notably, the DaCapo suite exhibits the most significant values, with 20.84% energy savings and a 45.58% increase in execution time. Our results have the potential to drive significant energy savings in the context of computational tasks for which runtime is not critical, including Batch Processing Systems, Background Data Processing and Automated Backups.
Simão Cunha, Luís Silva, João Saraiva, João Paulo Fernandes
SLE4
2024 Programming languages ranking based on energy measurements
Alberto Gordillo, Coral Calero, María Ángeles Moraga, Félix García 0001, João Paulo Fernandes, Rui Abreu 0001, João Saraiva
Softw. Qual. J.5
2023 Analyzing the Resource Usage Overhead of Mobile App Development Frameworks
abstract
Mobile app development frameworks lower the effort to write and deploy apps across different execution platforms. At the same time, their use may limit native optimizations and impose overhead, increasing resource usage. In this paper, we analyze the resource usage of Android benchmarks and apps based on three mobile app development frameworks, Flutter, React Native, and Ionic, comparing them to functionally equivalent, native variants written in Java. These frameworks, besides being in widespread use, represent three different approaches for developing multiplatform apps: Flutter supports the deployment of apps that are compiled and run fully natively, React Native runs interpreted JavaScript code combined with native views for different platforms, and Ionic is based on web apps, which means that it does not depend on platform-specific details. We measure the energy consumption, execution time, and memory usage of ten optimized, CPU-intensive benchmarks, to gauge overhead in a controlled manner, and two applications, to measure their impact when running commonly mobile app functionalities. Our results show that cross-platform and hybrid frameworks can be competitive in CPU-intensive applications. In five of the ten benchmarks, at least one framework-based version exhibits lower energy consumption and execution time than its native counterpart, up to a reduction of 81% in energy and 83% in execution time. Furthermore, in three other benchmarks, framework-based and native versions achieved similar results. Overall, Flutter, usually imposes the least overhead in execution time and energy, while React Native imposes the highest in all the benchmarks. However, in an app that continuously animates multiple images on the screen, without interaction, the React Native version uses the least CPU and energy, up to a reduction of 96% in energy compared to the second-best framework-based version. These findings highlight the importance of analyzing expected application behavior before committing to a specific framework.
Wellington Oliveira, Bernardo Moraes, Fernando Castor Filho, João Paulo Fernandes
EASE4
2022 Herb: Privacy-preserving Random Forest with Partially Homomorphic Encryption
abstract
Building a Machine Learning model requires the use of large amounts of data. Due to privacy and regulatory concerns, these data might be owned by multiple sites and are often not mutually shareable. Our work deals with private learning and inference for the Weighted Random Forest model when data records are vertically distributed among multiple sites. Previous privacy-preserving vertical tree-based frameworks either adapt Secure Multi-party Computation or share intermediate results and are hard to generalize or scale. In contrast, our proposal contains efficient collaborative calculation algorithms of the Gini Index and Entropy for computing the impurity of decision tree nodes while protecting all intermediate values and disclosing minimal information. We offer a learning protocol based on the Paillier Cryptosystem and Digital Envelope. Also, we provide an inference protocol found on the Look-up Table. Our experiments show that the proposed protocols do not cause predictive performance loss while still establishing and utilizing the model within a reasonable time. The results imply that practitioners can overcome the barrier of data sharing and produce random forest models for data-heavy domains with strict privacy requirements, such as Health Prediction, Fraud Detection, and Risk Evaluation.
Qianying Liao, Bruno Cabral 0001, João Paulo Fernandes, Nuno Lourenço 0002
IJCNN3
2022 HERB+: Evolving an Industrial-Strength Privacy-Preserving Machine Learning Framework
abstract
Supervised machine learning does not hold without data. However, the needed data can be distributed in different locations and are non-shareable under privacy constraints. Methods to circumvent disclosure restrictions in collaborative machine learning are in strong demand. Thus, we propose HERB+ (Homomorphic Encryption for Random forest and gradient Boosting plus), a confidential learning framework for tree-based models under the scenario of vertically dispersed data. While previous related work focused on a specific algorithm, this work presents a wide variety of privacy-preserved and distributed tree-based algorithms (i.e., Decision Tree, Random Forest, and Gradient Boosting Decision Trees for both classification and regression tasks). HERB+ provides the most detailed and general discussions on using Fully Homomorphic Encryption for computing distributed tree-based algorithms during the training process. Our experiments show that although the learning protocols' efficiencies are not optimal, the predictive performance and privacy are preserved. The results imply that practitioners can overcome the barrier of data sharing and produce tree-based models for data-heavy domains with strict privacy requirements, such as Health Prediction, Fraud Detection, and Risk Evaluation.
Qianying Liao, Alexandre Cortez Santos, Bruno Cabral 0001, João Paulo Fernandes, Nuno Lourenço 0002
PRDC4
2022 Which Technologies are Most Frequently Used by Data Scientists?
abstract
Data collection is pervasively bound to our digital lifestyle. A recent study reports that the growth of the data created and replicated in 2020 was even higher than in the previous years to an astonishing global amount of 64.2 zettabytes of data. There are numerous companies whose services/products rely heavily on data analysis, and mining the produced data has already revealed great value for businesses in different sectors. In order to be able to support the professionals that do this job, typically known as data scientists, we first need to characterize them. To contribute towards this characterization, we conducted a public survey and in this work we present the results about a particular aspects of their life: the tools they use and need.
Paula Pereira, João Paulo Fernandes, Jácome Cunha
VL/HCC2
2021 Improving energy-efficiency by recommending Java collections
Wellington Oliveira, Renato O. Santos, Fernando Castor Filho, Gustavo Pinto 0001, João Paulo Fernandes
Empir. Softw. Eng.5
2021 GreenHub: a large-scale collaborative dataset to battery consumption analysis of android devices
Rui Pereira, Hugo Matalonga, Marco Couto 0001, Fernando Castor Filho, Bruno Cabral 0001, Simão Melo de Sousa, João Paulo Fernandes
Empir. Softw. Eng.8
2021 Ranking programming languages by energy efficiency
Rui Pereira, Marco Couto 0001, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, João Saraiva
Sci. Comput. Program.6
2020 PACE: A DSL-based Approach to Manage Complex Build Pipelines
abstract
Software development must be accelerated as much as possible in order to keep up with the fast-changing needs of the current market. When developing software products with complex architectures, one of the challenges is to handle dependencies between the (sub-)products developed by different teams. Namely during the validation stage, complex build pipelines need to be implemented, which may slow down the release of the software. The current strategies to implement build pipelines do not exploit abstraction, are often too restrictive in their application domain and require significant implementation, evolution, and maintenance efforts. We report our experience with an alternative approach that we believe combines for the first time the possibility of constructing a build pipeline architecture and at the same time all the automation logic. This allows for code reuse and inheritance. Our solution is in the form of a Domain-Specific Language called PACE, which we implemented and validated (in-house) in an industrial context. Our results provide evidence that in general, there are benefits in using PACE.
Nelson Fonseca, João Paulo Fernandes, Mário Pires, Simão Melo de Sousa
SEAA2
2020 On Understanding Data Scientists
abstract
Data is everywhere and in everything we do. Most of the time, usable information is hidden in raw data and because of that, there is an increasing demand for people capable of working creatively with it. To fully understand how we can assist data science workers to become more productive in their jobs, we first need to understand who they are, how they work, what are the skills they hold and lack, and which tools they need. In this paper, we present the results of the analysis of several interviews conducted with data scientists. Our research allowed us to conclude that the heterogeneity between these professionals is still understudied, which makes the development of methodologies and tools more challenging and error prone. The results of this research are particularly useful for both the scientific community and industry to propose adequate solutions for these professionals.
Paula Pereira, Jácome Cunha, João Paulo Fernandes
VL/HCC3
2020 Energy Refactorings for Android in the Large and in the Wild
abstract
Improving the energy efficiency of mobile applications is a timely goal, as it can contribute to increase a device's usage time, which most often is powered by batteries. Recent studies have provided empirical evidence that refactoring energy-greedy code patterns can in fact reduce the energy consumed by an application. These studies, however, tested the impact of refactoring patterns individually, often locally (e.g., by measuring method-level gains) and using a small set of applications. We studied the application-level impact of refactorings, comparing individual refactorings, among themselves and against the combinations on which they appear. We use scenarios that simulate realistic application usage on a large-scale repository of Android applications. To fully automate the detection and refactoring procedure, as well as the execution of test cases, we developed a publicly available tool called Chimera. Our findings include statistical evidence that i) individual refactorings produce consistent gains, but with different impacts, ii) combining as much refactorings as possible most often, but not always, increases energy savings when compared to individual refactorings, and iii) a few combinations are harmful to energy savings, as they can actually produce more losses than gains. We prepared a set of guidelines for developers to follow, aiding them on deciding how to refactor and consistently reduce energy.
Marco Couto 0001, João Saraiva, João Paulo Fernandes
SANER3
2020 SPELLing out energy leaks: Aiding developers locate energy inefficient code
Rui Pereira, Tiago Carção, Marco Couto 0001, Jácome Cunha, João Paulo Fernandes, João Saraiva
J. Syst. Softw.5
2019 GreenHub farmer: real-world data for Android energy mining
abstract
As mobile devices are supporting more and more of our daily activities, it is vital to widen their battery up-time as much as possible. In fact, according to the Wall Street Journal, 9/10 users suffer from low battery anxiety. The goal of our work is to understand how Android usage, apps, operating systems, hardware and user habits influence battery lifespan. Our strategy is to collect anonymous raw data from devices all over the world, through a mobile app, build and analyze a large-scale dataset containing real-world, day-to-day data, representative of user practices. So far, the dataset we collected includes 12 million+ (anonymous) data samples, across 900+ device brands and 5.000+ models. And, it keeps growing. The data we collect, which is publicly available and by different channels, is sufficiently heterogeneous for supporting studies with a wide range of focuses and research goals, thus opening the opportunity to inform and reshape user habits, and even influence the development of both hardware and software for mobile devices.
Hugo Matalonga, Bruno Cabral 0001, Fernando Castor Filho, Marco Couto 0001, Rui Pereira, Simão Melo de Sousa, João Paulo Fernandes
MSR7
2019 On Haskell and energy efficiency
Luis Gabriel Lima, Francisco Soares-Neto, Paulo Lieuthier, Fernando Castor Filho, Gilberto Melfe, João Paulo Fernandes
J. Syst. Softw.6
2019 Memoized zipper-based attribute grammars and their higher order extension
João Paulo Fernandes, Pedro Martins 0001, Alberto Pardo, João Saraiva, Marcos Viera
Sci. Comput. Program.1
2017 Energy efficiency across programming languages: how do energy, time, and memory relate?
abstract
This paper presents a study of the runtime, memory usage and energy consumption of twenty seven well-known software languages. We monitor the performance of such languages using ten different programming problems, expressed in each of the languages. Our results show interesting findings, such as, slower/faster languages consuming less/more energy, and how memory usage influences energy consumption. Finally, we show how to use our results to provide software engineers support to decide which language to use when energy efficiency is a concern.
Rui Pereira, Marco Couto 0001, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, João Saraiva
SLE6
2016 Haskell in Green Land: Analyzing the Energy Behavior of a Purely Functional Language
abstract
Recent work has studied the effect that factors such as code obfuscation, refactorings and data types have on energy efficiency. In this paper, we attempt to shed light on the energy behavior of programs written in a lazy purely functional language, Haskell. We have conducted two empirical studies to analyze the energy efficiency of Haskell programs from two different perspectives: strictness and concurrency. Our experimental space exploration comprises more than 2000 configurations and 20000 executions. We found out that small changes can make a big difference in terms of energy consumption. For example, in one of our benchmarks, under a specific configuration, choosing one data sharing primitive (MVar) over another (TMVar) can yield 60% energy savings. In another benchmark, the latter primitive can yield up to 30% energy savings over the former. Thus, tools that support developers in quickly refactoring a program to switch between different primitives can be of great help if energy is a concern. In addition, the relationship between energy consumption and performance is not always clear. In sequential benchmarks, high performance is an accurate proxy for low energy consumption. However, for one of our concurrent benchmarks, the variants with the best performance also exhibited the worst energy consumption. To support developers in better understanding this complex relationship, we have extended two existing performance analysis tools to also collect and present data about energy consumption.
Luis Gabriel Lima, Francisco Soares-Neto, Paulo Lieuthier, Fernando Castor Filho, Gilberto Melfe, João Paulo Fernandes
SANER6
2016 Evaluating refactorings for spreadsheet models
Jácome Cunha, João Paulo Fernandes, Pedro Martins 0001, Jorge Mendes 0001, Rui Pereira, João Saraiva
J. Syst. Softw.2
2016 Embedding attribute grammars and their extensions using functional zippers
Pedro Martins 0001, João Paulo Fernandes, João Saraiva, Eric Van Wyk, Anthony M. Sloane
Sci. Comput. Program.2
2016 Multiple intermediate structure deforestation by shortcut fusion
Alberto Pardo, João Paulo Fernandes, João Saraiva
Sci. Comput. Program.2
2015 Embedding, Evolution, and Validation of Model-Driven Spreadsheets
abstract
This paper proposes and validates a model-driven software engineering technique for spreadsheets. The technique that we envision builds on the embedding of spreadsheet models under a widely used spreadsheet system. This means that we enable the creation and evolution of spreadsheet models under a spreadsheet system. More precisely, we embed ClassSheets, a visual language with a syntax similar to the one offered by common spreadsheets, that was created with the aim of specifying spreadsheets. Our embedding allows models and their conforming instances to be developed under the same environment. In practice, this convenient environment enhances evolution steps at the model level while the corresponding instance is automatically co-evolved. Finally, we have designed and conducted an empirical study with human users in order to assess our technique in production environments. The results of this study are promising and suggest that productivity gains are realizable under our model-driven spreadsheet development setting.
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, João Saraiva
IEEE Trans. Software Eng.2
2014 Smelling Faults in Spreadsheets
abstract
Despite being staggeringly error prone, spreadsheets are a highly flexible programming environment that is widely used in industry. In fact, spreadsheets are widely adopted for decision making, and decisions taken upon wrong (spreadsheet-based) assumptions may have serious economical impacts on businesses, among other consequences. This paper proposes a technique to automatically pinpoint potential faults in spreadsheets. It combines a catalog of spreadsheet smells that provide a first indication of a potential fault, with a generic spectrum-based fault localization strategy in order to improve (in terms of accuracy and false positive rate) on these initial results. Our technique has been implemented in a tool which helps users detecting faults. To validate the proposed technique, we consider a well-known and well-documented catalog of faulty spreadsheets. Our experiments yield two main results: we were able to distinguish between smells that can point to faulty cells from smells and those that are not capable of doing so, and we provide a technique capable of detecting a significant number of errors: two thirds of the cells labeled as faulty are in fact (documented) errors.
Rui Abreu 0001, Jácome Cunha, João Paulo Fernandes, Pedro Martins 0001, Alexandre Perez, João Saraiva
ICSME3
2014 FaultySheet Detective: When Smells Meet Fault Localization
abstract
This paper presents a tool, dubbed Faulty Sheet Detective, for aiding in spreadsheet fault localization, which combines the detection of bad smells with a generic spectrum-based fault localization algorithm.
Rui Abreu 0001, Jácome Cunha, João Paulo Fernandes, Pedro Martins 0001, Alexandre Perez, João Saraiva
ICSME3
2014 Generating attribute grammar-based bidirectional transformations from rewrite rules
abstract
Higher order attribute grammars provide a convenient means for specifying uni-directional transformations, but they provide no direct support for bidirectional transformations. In this paper we show how rewrite rules (with non-linear right hand sides) that specify a forward/get transformation can be inverted to specify a partial backward/put transformation. These inverted rewrite rules can then be extended with additional rules based on characteristics of the source language grammar and forward transformations to create, under certain circumstances, a total backward transformation. Finally, these rules are used to generate attribute grammar specifications implementing both transformations.
Pedro Martins 0001, João Saraiva, João Paulo Fernandes, Eric Van Wyk
PEPM3
2014 Embedding model-driven spreadsheet queries in spreadsheet systems
abstract
Spreadsheets are widely used not only to define mathematical expressions, but also to store large and complex data. To query such data is usually a difficult task to perform, usually for end user. In this work we embed the textual query language in the model-driven spreadsheet environment as a spreadsheet itself. The result is an expressive and powerful query environment that has knowledge of the business logic defined by the spreadsheet data (the spreadsheet model) to guide end users constructing correct queries.
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, Rui Pereira, João Saraiva
VL/HCC2
2014 ES-SQL: Visually querying spreadsheets
abstract
This paper presents ES-SQL, an embedded tool for visually constructing queries over spreadsheets. This tool provides an expressive query environment which has knowledge on the business logic of spreadsheets, and by this knowledge it assists the user in defining the intended queries.
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, Rui Pereira, João Saraiva
VL/HCC2
2013 Complexity Metrics for ClassSheet Models
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, João Saraiva
ICCSA (2)2
2013 A Framework for Modular and Customizable Software Analysis
Pedro Martins 0001, Nuno Ramos Carvalho, João Paulo Fernandes, José João Almeida, João Saraiva
ICCSA (2)3
2013 QuerySheet: A bidirectional query environment for model-driven spreadsheets
abstract
This paper presents a tool, named QuerySheet, to query spreadsheets. We defined a language to write the queries, which resembles SQL, the language to query databases. This allows to write queries which are more related to the spreadsheet content than with current approaches.
Orlando Belo, Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, Rui Pereira, João Saraiva
VL/HCC3
2013 Querying model-driven spreadsheets
abstract
Spreadsheets are being used with many different purposes that range from toy applications to complete information systems. In any of these cases, they are often used as data repositories that can grow significantly. As the amount of data grows, it also becomes more difficult to extract concrete information out of them. This paper focuses on the problem of spreadsheet querying. In particular, we propose an expressive and composable technique where intuitive queries can be defined. Our approach builds on a model-driven spreadsheet development environment, and queries are expressed referencing entities in the model of a spreadsheet instead of in its actual data. Finally, the system that we have implemented relies on Google's query function for spreadsheets.
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, Rui Pereira, João Saraiva
VL/HCC2
2012 Towards a Catalog of Spreadsheet Smells
Jácome Cunha, João Paulo Fernandes, Hugo Ribeiro, João Saraiva
ICCSA (4)2
2012 Program and Aspect Metrics for MATLAB
Pedro Martins 0001, Paulo Lopes, João Paulo Fernandes, João Saraiva, João M. P. Cardoso
ICCSA (4)3
2012 MDSheet: A framework for model-driven spreadsheet engineering
abstract
In this paper, we present MDSheet, a framework for the embedding, evolution and inference of spreadsheet models. This framework offers a model-driven software development mechanism for spreadsheet users.
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, João Saraiva
ICSE2
2012 A bidirectional model-driven spreadsheet environment
abstract
In this extended abstract we present a bidirectional model-driven framework to develop spreadsheets. By being model driven, our approach allows to evolve a spreadsheet model and automatically have the data co-evolved. The bidirectional component achieves precisely the inverse, that is, to evolve the data and automatically obtain a new model to which the data conforms.
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, João Saraiva
ICSE2
2012 SmellSheet detective: A tool for detecting bad smells in spreadsheets
abstract
This tool demo paper presents SmellSheet Detective: a tool for automatically detecting bad smells in spreadsheets. We have defined a catalog of bad smells in spreadsheet data which was fully implemented in a reusable library for the manipulation of spreadsheets. This library is the building block of the SmellSheet Detective tool, that has been used to detect smells in large, real-world spreadsheets within the EUSES corpus, in order to validate and evolve our bad smells catalog.
Jácome Cunha, João Paulo Fernandes, Pedro Martins 0001, Jorge Mendes 0001, João Saraiva
VL/HCC2
2012 Extension and implementation of ClassSheet models
abstract
In this paper we explore the use of models in the context of spreadsheet engineering. We review a successful spreadsheet modeling language, whose semantics we further extend. With this extension we bring spreadsheet models closer to the business models of spreadsheets themselves. An addon for a widely used spreadsheet system, providing bidirectional model-driven spreadsheet development, was also improved to include the proposed model extension.
Jácome Cunha, João Paulo Fernandes, Jorge Mendes 0001, João Saraiva
VL/HCC2
2011 Strictification of circular programs
abstract
Circular functional programs (necessarily evaluated lazily) have been used as algorithmic tools, as attribute grammar implementations, and as target for program transformation techniques. Classically, Richard Bird [1984] showed how to transform certain multitraversal programs (which could be evaluated strictly or lazily) into one-traversal ones using circular bindings. Can we go the other way, even for programs that are not in the image of his technique? That is the question we pursue in this paper. We develop an approach that on the one hand lets us deal with typical examples corresponding to attribute grammars, but on the other hand also helps to derive new algorithms for problems not previously in reach.
João Paulo Fernandes, João Saraiva, Daniel Seidel, Janis Voigtländer
PEPM1
2011 Embedding and evolution of spreadsheet models in spreadsheet systems
abstract
This paper describes the embedding of ClassSheet models in spreadsheet systems. ClassSheet models are well-known and describe the business logic of spreadsheet data. We embed this domain specific model representation on the (general purpose) spreadsheet system. By defining such an embedding, we provide end users a model-driven engineering spreadsheet developing environment. End users can interact with both the model and the spreadsheet data in the same environment. Moreover, we use advanced techniques to evolve spreadsheets and models and to have them synchronized. In this paper we present our work on extending a widely used spreadsheet system with such a model-driven spreadsheet engineering environment.
Jácome Cunha, Jorge Mendes 0001, João Saraiva, João Paulo Fernandes
VL/HCC4
2009 Shortcut fusion rules for the derivation of circular and higher-order monadic programs
abstract
Functional programs often combine separate parts using intermediate data structures for communicating results. These programs are modular, easier to understand and maintain, but suffer from inefficiencies due to the generation of those gluing data structures. To eliminate such redundant data structures, some program transformation techniques have been proposed. One such technique is shortcut fusion, and has been studied in the context of both pure and monadic functional programs.
Alberto Pardo, João Paulo Fernandes, João Saraiva
PEPM2
2007 A shortcut fusion rule for circular program calculation
abstract
Circular programs are a powerful technique to express multiple traversal algorithms as a single traversal function in a lazy setting. In this paper, we present a shortcut deforestation technique to calculate circular programs. The technique we propose takes as input the composition of two functions, such that the first builds an intermediate structure and some additional context information which are then processed by the second one, to produce the final result. Our transformation into circular programs achieves intermediate structure deforestation and multiple traversal elimination. Furthermore, the calculated programs preserve the termination properties of the original ones.
João Paulo Fernandes, Alberto Pardo, João Saraiva
Haskell1
2007 Tools and libraries to model and manipulate circular programs
abstract
This paper presents techniques to model circular lazy programs in a strict, purely functional setting. Circular lazy programs model any algorithm based on multiple traversals over a recursive data structure as a single traversal function. Such elegant and concise circular programs are defined in a (strict or lazy) functional language and they are transformed into efficient strict and deforested, multiple traversal programs by using attribute grammars-based techniques. Moreover, we use standard slicing techniques to slice such circular lazy programs.
João Paulo Fernandes, João Saraiva
PEPM1