VLDB 2026 Research / reviewers in the wild / expert
José F. Morales 0001
dblp:03/305 · also José Francisco Morales 0001
· DBLP profile ↗
41ranked-venue papers
8as first author
13since 2021 · last 2026
0000-0001-9782-8135ORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 38 · 8 first-author · 13 since 2021Theory of computation · 18 · 5 first-author · 3 since 2021Security and privacy · 2Systems, architecture and hardware · 1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2026 | Multi-configurable Search Rules in Prolog and Application to Testing
Daniela Ferreiro, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
PADL | 2 |
| 2025 | Extending the FSyntax/Hiord Approach with Imperative Notation
Paula Corral, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2025 | Hiord $^{{\kern2pt}\sharp}$ : An Approach to the Specification and Verification of Higher-Order (C)LP ProgramsabstractAbstract Higher-order constructs enable more expressive and concise code by allowing procedures to be parameterized by other procedures. Assertions allow expressing partial program specifications, which can be verified either at compile time (statically) or run time (dynamically). In higher-order programs, assertions can also describe higher-order arguments. While in the context of (constraint) logic programming ((C)LP), run-time verification of higher-order assertions has received some attention, compile-time verification remains relatively unexplored. We propose a novel approach for statically verifying higher-order (C)LP programs with higher-order assertions. Although we use the Ciao assertion language for illustration, our approach is quite general, and we believe is applicable to similar contexts. Higher-order arguments are described using predicate properties – a special kind of property which exploits the ( Ciao ) assertion language. We refine the syntax and semantics of these properties and introduce an abstract criterion to determine conformance to a predicate property at compile time, based on a semantic order relation comparing the predicate property with the predicate assertions. We then show how to handle these properties using an abstract interpretation-based static analyzer for programs with first-order assertions by reducing predicate properties to first-order properties. Finally, we report on a prototype implementation and evaluate it through various examples within the Ciao system. Marco Ciccalè, Daniel Jurjo-Rivas, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2025 | Checkification: A Practical Approach for Testing Static Analysis TruthsabstractAbstract Static analysis is an essential component of many modern software development tools. Unfortunately, the ever-increasing complexity of static analyzers makes their coding error-prone. Even analysis tools based on rigorous mathematical techniques, such as abstract interpretation, are not immune to bugs. Ensuring the correctness and reliability of software analyzers is critical if they are to be inserted in production compilers and development environments. While compiler validation has seen notable success, formal validation of static analysis tools remains relatively unexplored. In this paper we present checkification , a simple, automatic method for testing static analyzers. Broadly, it consists in checking, over a suite of benchmarks, that the properties inferred statically are satisfied dynamically. The main advantage of our approach lies in its simplicity, which stems directly from framing it within the Ciao assertion-based validation framework, and its blended static/dynamic assertion checking approach. We demonstrate that in this setting, the analysis can be tested with little effort by combining the following components already present in the framework: 1) the static analyzer , which outputs its results as the original program source with assertions interspersed; 2) the assertion run-time checking mechanism, which instruments a program to ensure that no assertion is violated at run time; 3) the random test case generator , which generates random test cases satisfying the properties present in assertion preconditions; and 4) the unit-test framework , which executes those test cases. We have applied our approach to the CiaoPP static analyzer, resulting in the identification of many bugs with reasonable overhead. Most of these bugs have been either fixed or confirmed, helping us detect a range of errors not only related to analysis soundness but also within other aspects of the framework. Daniela Ferreiro, Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2024 | An Order Theory Framework of Recurrence Equations for Static Cost Analysis - Dynamic Inference of Non-Linear Inequality Invariants
Louis Rustenholz, Pedro López-García 0001, José F. Morales 0001, Manuel V. Hermenegildo |
SAS | 3 |
| 2024 | Abstract Environment TrimmingabstractAbstract Variable sharing is a fundamental property in the static analysis of logic programs, since it is instrumental for ensuring correctness and increasing precision while inferring many useful program properties. Such properties include modes, determinacy, non-failure, cost, etc. This has motivated significant work on developing abstract domains to improve the precision and performance of sharing analyses. Much of this work has centered around the family of set-sharing domains, because of the high precision they offer. However, this comes at a price: their scalability to a wide set of realistic programs remains challenging and this hinders their wider adoption. In this work, rather than defining new sharing abstract domains, we focus instead on developing techniques which can be incorporated in the analyzers to address aspects that are known to affect the efficiency of these domains, such as the number of variables, without affecting precision. These techniques are inspired in others used in the context of compiler optimizations, such as expression reassociation and variable trimming. We present several such techniques and provide an extensive experimental evaluation of over 1100 program modules taken from both production code and classical benchmarks. This includes the Spectector cache analyzer, the s(CASP) system, the libraries of the Ciao system, the LPdoc documenter, the PLAI analyzer itself, etc. The experimental results are quite encouraging: we have obtained significant speedups, and, more importantly, the number of modules that require a timeout was cut in half. As a result, many more programs can be analyzed precisely in reasonable times. Daniel Jurjo-Rivas, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 2 |
| 2023 | Transforming Big-Step to Small-Step Semantics Using Interpreter Specialisation
John P. Gallagher, Manuel V. Hermenegildo, José F. Morales 0001, Pedro López-García 0001 |
LOPSTR | 3 |
| 2023 | A Rule-Based Approach for Designing and Composing Abstract Domains
Daniel Jurjo-Rivas, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2022 | Fifty Years of Prolog and BeyondabstractAbstract Both logic programming in general and Prolog in particular have a long and fascinating history, intermingled with that of many disciplines they inherited from or catalyzed. A large body of research has been gathered over the last 50 years, supported by many Prolog implementations. Many implementations are still actively developed, while new ones keep appearing. Often, the features added by different systems were motivated by the interdisciplinary needs of programmers and implementors, yielding systems that, while sharing the “classic” core language, in particular, the main aspects of the ISO-Prolog standard, also depart from each other in other aspects. This obviously poses challenges for code portability. The field has also inspired many related, but quite different languages that have created their own communities. This article aims at integrating and applying the main lessons learned in the process of evolution of Prolog. It is structured into three major parts. First, we overview the evolution of Prolog systems and the community approximately up to the ISO standard, considering both the main historic developments and the motivations behind several Prolog implementations, as well as other logic programming languages influenced by Prolog. Then, we discuss the Prolog implementations that are most active after the appearance of the standard: their visions, goals, commonalities, and incompatibilities. Finally, we perform a SWOT analysis in order to better identify the potential of Prolog and propose future directions along with which Prolog might continue to add useful features, interfaces, libraries, and tools, while at the same time improving compatibility between implementations. Philipp Koerner, Michael Leuschel, João Barbosa, Vítor Santos Costa, Verónica Dahl, Manuel V. Hermenegildo, José F. Morales 0001, Jan Wielemaker, Daniel Diaz 0001, Salvador Abreu |
Theory Pract. Log. Program. | 7 |
| 2022 | Introduction to the 38th International Conference on Logic Programming Special IssueabstractThis issue and its companion, the following one Yuliya Lierler, José F. Morales 0001 |
Theory Pract. Log. Program. | 2 |
| 2022 | Introduction to the 38th International Conference on Logic Programming Special Issue II
Yuliya Lierler, José F. Morales 0001 |
Theory Pract. Log. Program. | 2 |
| 2021 | Incremental and Modular Context-sensitive AnalysisabstractAbstract Context-sensitive global analysis of large code bases can be expensive, which can make its use impractical during software development. However, there are many situations in which modifications are small and isolated within a few components, and it is desirable to reuse as much as possible previous analysis results. This has been achieved to date through incremental global analysis fixpoint algorithms that achieve cost reductions at fine levels of granularity, such as changes in program lines. However, these fine-grained techniques are neither directly applicable to modular programs nor are they designed to take advantage of modular structures. This paper describes, implements, and evaluates an algorithm that performs efficient context-sensitive analysis incrementally on modular partitions of programs. The experimental results show that the proposed modular algorithm shows significant improvements, in both time and memory consumption, when compared to existing non-modular, fine-grain incremental analysis techniques. Furthermore, thanks to the proposed intermodular propagation of analysis information, our algorithm also outperforms traditional modular analysis even when analyzing from scratch. Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 2 |
| 2021 | VeriFly: On-the-fly Assertion Checking via IncrementalityabstractAbstract Assertion checking is an invaluable programmer’s tool for finding many classes of errors or verifying their absence in dynamic languages such as Prolog. For Prolog programmers, this means being able to have relevant properties, such as modes, types, determinacy, nonfailure, sharing, constraints, and cost, checked and errors flagged without having to actually run the program. Such global static analysis tools are arguably most useful the earlier they are used in the software development cycle, and fast response times are essential for interactive use. Triggering a full and precise semantic analysis of a software project every time a change is made can be prohibitively expensive. This is specially the case when complex properties need to be inferred for large, realistic code bases. In our static analysis and verification framework, this challenge is addressed through a combination of modular and incremental (context- and path-sensitive) analysis that is responsive to program edits, at different levels of granularity. In this tool paper, we present how the combination of this framework within an integrated development environment (IDE) takes advantage of such incrementality to achieve a high level of reactivity when reflecting analysis and verification results back as colorings and tooltips directly on the program text – the tool’s VeriFly mode. The concrete implementation that we describe is Emacs-based and reuses in part off-the-shelf “on-the-fly” syntax checking facilities (flycheck). We believe that similar extensions are also reproducible with low effort in other mature development environments. Our initial experience with the tool shows quite promising results, with low latency times that provide early, continuous, and precise assertion checking and other semantic feedback to programmers during the development process. The tool supports Prolog natively, as well as other languages by semantic transformation into Horn clauses. Miguel A. Sanchez-Ordaz, Isabel Garcia-Contreras, Victor Perez 0001, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2020 | Testing Your (Static Analysis) Truths
Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2020 | Cost Analysis of Smart Contracts Via Parametric Resource Analysis
Victor Perez 0001, Maximiliano Klemen, Pedro López-García 0001, José F. Morales 0001, Manuel V. Hermenegildo |
SAS | 4 |
| 2020 | Spectector: Principled Detection of Speculative Information FlowsabstractSince the advent of Spectre, a number of counter-measures have been proposed and deployed. Rigorously reasoning about their effectiveness, however, requires a well-defined notion of security against speculative execution attacks, which has been missing until now.In this paper (1) we put forward speculative non-interference, the first semantic notion of security against speculative execution attacks, and (2) we develop Spectector, an algorithm based on symbolic execution to automatically prove speculative non-interference, or to detect violations.We implement Spectector in a tool, which we use to detect subtle leaks and optimizations opportunities in the way major compilers place Spectre countermeasures. A scalability analysis indicates that checking speculative non-interference does not exhibit fundamental bottlenecks beyond those inherited by symbolic execution. Marco Guarnieri, Boris Köpf, José F. Morales 0001, Jan Reineke 0001, Andrés Sánchez |
SP | 3 |
| 2019 | Computing Abstract Distances in Logic Programs
Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Roberto Giacobazzi, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2019 | An Integrated Approach to Assertion-Based Random Testing in Prolog
Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2019 | Incremental Analysis of Logic Programs with Assertions and Open Predicates
Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2019 | A General Framework for Static Cost Analysis of Parallel Logic Programs
Maximiliano Klemen, Pedro López-García 0001, John P. Gallagher, José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 4 |
| 2019 | Theory and Practice of Finding Eviction SetsabstractMany micro-architectural attacks rely on the capability of an attacker to efficiently find small eviction sets: groups of virtual addresses that map to the same cache set. This capability has become a decisive primitive for cache side-channel, rowhammer, and speculative execution attacks. Despite their importance, algorithms for finding small eviction sets have not been systematically studied in the literature. In this paper, we perform such a systematic study. We begin by formalizing the problem and analyzing the probability that a set of random virtual addresses is an eviction set. We then present novel algorithms, based on ideas from threshold group testing, that reduce random eviction sets to their minimal core in linear time, improving over the quadratic state-of-the-art. We complement the theoretical analysis of our algorithms with a rigorous empirical evaluation in which we identify and isolate factors that affect their reliability in practice, such as adaptive cache replacement strategies and TLB thrashing. Our results indicate that our algorithms enable finding small eviction sets much faster than before, and under conditions where this was previously deemed impractical. Pepe Vila, Boris Köpf, José F. Morales 0001 |
IEEE Symposium on Security and Privacy | 3 |
| 2018 | Multivariant Assertion-Based Guidance in Abstract Interpretation
Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2018 | Exploiting Term Hiding to Reduce Run-Time Checking Overhead
Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
PADL | 2 |
| 2018 | Static Performance Guarantees for Programs with Runtime ChecksabstractInstrumenting programs for performing runtime checking of properties, such as regular shapes, is a common and useful technique that helps programmers detect incorrect program behaviors. This is specially true in dynamic languages such as Prolog. However, such runtime checks inevitably introduce runtime overhead (in execution time, memory, energy, etc.). Several approaches have been proposed for reducing this overhead, such as eliminating the checks that can statically be proved to always succeed, and/or optimizing the way in which the (remaining) checks are performed. However, there are cases in which it is not possible to remove all checks statically (e.g., open libraries which must check their interfaces, complex properties, unknown code, etc.) and in which, even after optimizations, these remaining checks may still introduce an unacceptable level of overhead. It is thus important for programmers to be able to determine the additional cost due to the runtime checks and compare it to some notion of admissible cost. The common practice used for estimating runtime checking overhead is profiling, which is not exhaustive by nature. Instead, we propose a method that uses static analysis to estimate such overhead, with the advantage that the estimations are functions parameterized by input data sizes. Unlike profiling, this approach can provide guarantees for all possible execution traces, and allows assessing how the overhead grows as the size of the input grows. Our method also extends an existing assertion verification framework to express "admissible" overheads, and statically and automatically checks whether the instrumented program conforms with such specifications. Finally, we present an experimental evaluation of our approach that suggests that our method is feasible and promising. Maximiliano Klemen, Nataliia Stulova, Pedro López-García 0001, José F. Morales 0001, Manuel V. Hermenegildo |
PPDP | 4 |
| 2018 | Some trade-offs in reducing the overhead of assertion run-time checks via static analysis
Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
Sci. Comput. Program. | 2 |
| 2016 | Rahft: A Tool for Verifying Horn Clauses Using Abstract Interpretation and Finite Tree Automata
Bishoksan Kafle, John P. Gallagher, José F. Morales 0001 |
CAV (1) | 3 |
| 2016 | Reducing the overhead of assertion run-time checks via static analysisabstractIn order to aid in the process of detecting incorrect program behaviors, a number of approaches have been proposed which include a combination of language-level constructs (such as procedure-level assertions/contracts, program-point assertions, gradual types, etc.) and associated tools (such as code analyzers and run-time verification frameworks). However, it is often the case that these constructs and tools are not used to their full extent in practice due to a number of limitations such as excessive run-time overhead and/or limited expressiveness. Verification frameworks that combine static and dynamic techniques offer the potential to bridge this gap. In this paper we explore the effectiveness of abstract interpretation in detecting parts of program specifications that can be statically simplified to true or false, as well as the impact of such analysis in reducing the cost of the run-time checks required for the remaining parts of these specifications. Starting with a semantics for programs with assertion checking, and for assertion simplification based on static analysis information, we propose and study a number of practical assertion checking modes, each of which represents a trade-off between code annotation depth, execution time slowdown, and program safety. We also propose techniques for taking advantage of the run-time checking semantics to improve the precision of the analysis. Finally, we study experimentally the performance of these techniques. Our experiments illustrate the benefits and costs of each of the assertion checking modes proposed as well as the benefit of analysis for these scenarios. Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
PPDP | 2 |
| 2016 | Semantic code browsingabstractAbstract Programmers currently enjoy access to a very high number of code repositories and libraries of ever increasing size. The ensuing potential for reuse is however hampered by the fact that searching within all this code becomes an increasingly difficult task. Most code search engines are based on syntactic techniques such as signature matching or keyword extraction. However, these techniques are inaccurate (because they basically rely on documentation) and at the same time do not offer very expressive code query languages. We propose a novel approach that focuses on querying for semantic characteristics of code obtained automatically from the code itself. Program units are pre-processed using static analysis techniques, based on abstract interpretation, obtaining safe semantic approximations. A novel, assertion-based code query language is used to express desired semantic characteristics of the code as partial specifications. Relevant code is found by comparing such partial specifications with the inferred semantics for program elements. Our approach is fully automatic and does not rely on user annotations or documentation. It is more powerful and flexible than signature matching because it is parametric on the abstract domain and properties, and does not require type definitions. Also, it reasons with relations between properties, such as implication and abstraction, rather than just equality. It is also more resilient to syntactic code differences. We describe the approach and report on a prototype implementation within the Ciao system. Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 2 |
| 2016 | Description and Optimization of Abstract Machines in a Dialect of PrologabstractAbstract In order to achieve competitive performance, abstract machines for Prolog and related languages end up being large and intricate, and incorporate sophisticated optimizations, both at the design and at the implementation levels. At the same time, efficiency considerations make it necessary to use low-level languages in their implementation. This makes them laborious to code, optimize, and, especially, maintain and extend. Writing the abstract machine (and ancillary code) in a higher-level language can help tame this inherent complexity. We show how the semantics of most basic components of an efficient virtual machine for Prolog can be described using (a variant of) Prolog. These descriptions are then compiled to C and assembled to build a complete bytecode emulator. Thanks to the high-level of the language used and its closeness to Prolog, the abstract machine description can be manipulated using standard Prolog compilation and optimization techniques with relative ease. We also show how, by applying program transformations selectively, we obtain abstract machine implementations whose performance can match and even exceed that of state-of-the-art, highly-tuned, hand-crafted emulators. José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 1 |
| 2015 | Practical run-time checking via unobtrusive property cachingabstractAbstract The use of annotations, referred to as assertions or contracts, to describe program properties for which run-time tests are to be generated, has become frequent in dynamic programing languages. However, the frameworks proposed to support such run-time testing generally incur high time and/or space overheads over standard program execution. We present an approach for reducing this overhead that is based on the use of memoization to cache intermediate results of check evaluation, avoiding repeated checking of previously verified properties. Compared to approaches that reduce checking frequency, our proposal has the advantage of being exhaustive (i.e., all tests are checked at all points) while still being much more efficient than standard run-time checking. Compared to the limited previous work on memoization, it performs the task without requiring modifications to data structure representation or checking code. While the approach is general and system-independent, we present it for concreteness in the context of the Ciao run-time checking framework, which allows us to provide an operational semantics with checks and caching. We also report on a prototype implementation and provide some experimental results that support that using a relatively small cache leads to significant decreases in run-time checking overhead. Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 2 |
| 2014 | Pre-indexed Terms for Prolog
José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 1 |
| 2014 | Assertion-based Debugging of Higher-Order (C)LP ProgramsabstractHigher-order constructs extend the expressiveness of first-order (Constraint) Logic Programming ((C)LP) both syntactically and semantically. At the same time assertions have been in use for some time in (C)LP systems helping programmers detect errors and validate programs. However, these assertion-based extensions to (C)LP have not been integrated well with higher-order to date. This paper contributes to filling this gap by extending the assertion-based approach to error detection and program verification to the higher-order context within (C)LP. We propose an extension of properties and assertions as used in (C)LP in order to be able to fully describe arguments that are predicates. The extension makes the full power of the assertion language available when describing higher-order arguments. We provide syntax and semantics for (higher-order) properties and assertions, as well as for programs which contain such assertions, including the notions of error and partial correctness. We also discuss several alternatives for performing run-time checking of such programs. Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
PPDP | 2 |
| 2013 | Reversible Language Extensions and Their Application in Debugging
Zoé Drey, José F. Morales 0001, Manuel V. Hermenegildo, Manuel Carro |
PADL | 2 |
| 2012 | An overview of Ciao and its design philosophyabstractAbstract We provide an overall description of the Ciao multiparadigm programming system emphasizing some of the novel aspects and motivations behind its design and implementation. An important aspect of Ciao is that, in addition to supporting logic programming (and, in particular, Prolog), it provides the programmer with a large number of useful features from different programming paradigms and styles and that the use of each of these features (including those of Prolog) can be turned on and off at will for each program module. Thus, a given module may be using, e.g., higher order functions and constraints, while another module may be using assignment, predicates, Prolog meta-programming, and concurrency. Furthermore, the language is designed to be extensible in a simple and modular way. Another important aspect of Ciao is its programming environment, which provides a powerful preprocessor (with an associated assertion language) capable of statically finding non-trivial bugs, verifying that programs comply with specifications, and performing many types of optimizations (including automatic parallelization). Such optimizations produce code that is highly competitive with other dynamic languages or, with the (experimental) optimizing compiler, even that of static languages, all while retaining the flexibility and interactive development of a dynamic language. This compilation architecture supports modularity and separate compilation throughout. The environment also includes a powerful autodocumenter and a unit testing framework, both closely integrated with the assertion system. The paper provides an informal overview of the language and program development environment. It aims at illustrating the design philosophy rather than at being exhaustive, which would be impossible in a single journal paper, pointing instead to previous Ciao literature. Manuel V. Hermenegildo, Francisco Bueno, Manuel Carro, Pedro López-García 0001, Edison Mera, José F. Morales 0001, Germán Puebla |
Theory Pract. Log. Program. | 6 |
| 2012 | Lightweight compilation of (C)LP to JavaScriptabstractAbstract We present and evaluate a compiler from Prolog (and extensions) to JavaScript which makes it possible to use (constraint) logic programming to develop the client side of web applications while being compliant with current industry standards. Targeting JavaScript makes (C)LP programs executable in virtually every modern computing device with no additional software requirements from the point of view of the user. In turn, the use of a very high-level language facilitates the development of high-quality, complex software. The compiler is a back end of the Ciao system and supports most of its features, including its module system and its rich language extension mechanism based onpackages. We present an overview of the compilation process and a detailed description of the run-time system, including the support for modular compilation into separate JavaScript code. We demonstrate the maturity of the compiler by testing it with complex code such as a CLP(FD) library written in Prolog with attributed variables. Finally, we validate our proposal by measuring the performance of some LP and CLP(FD) benchmarks running on top of major JavaScript engines. José F. Morales 0001, Rémy Haemmerlé, Manuel Carro, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 1 |
| 2011 | Modular Extensions for Modular (Logic) Languages
José F. Morales 0001, Manuel V. Hermenegildo, Rémy Haemmerlé |
LOPSTR | 1 |
| 2008 | Comparing tag scheme variations using an abstract machine generatorabstractIn this paper we study, in the context of a WAM-based abstract machine for Prolog, how variations in the encoding of type information in tagged words and in their associated basic operations impact performance and memory usage.We use a high-level language to specify encodings and the associated operations. An automatic generator constructs both the abstract machine using this encoding and the associated Prolog-to-bytecode compiler. Annotations in this language make it possible to impose constraints on the final representation of tagged words, such as the effectively addressable space (fixing, for example, the word size of the target processor / architecture), the layout of the tag and value bits inside the tagged word, and how the basic operations are implemented. We evaluate a large number of combinations of the different parameters in two scenarios: a) trying to obtain an optimal general-purpose abstract machine and b) automatically generating a specially-tuned abstract machine for a particular program. We conclude that we are able to automatically generate code featuring all the optimizations present in a hand-written, highly-optimized abstract machine and we can also obtain emulators with larger addressable space and better performance José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
PPDP | 1 |
| 2006 | High-level languages for small devices: a case studyabstractIn this paper we study, through a concrete case, the feasibility of using a high-level, general-purpose logic language in the design and implementation of applications targeting wearable computers. The case study is a "sound spatializer" which, given real-time signals for monaural audio and heading, generates stereo sound which appears to come from a position in space. The use of advanced compile-time transformations and optimizations made it possible to execute code written in a clear style without efficiency or architectural concerns on the target device, while meeting strict existing time and memory constraints. The final executable compares favorably with a similar implementation written in C. We believe that this case is representative of a wider class of common pervasive computing applications, and that the techniques we show here can be put to good use in a range of scenarios. This points to the possibility of applying high-level languages, with their associated exibility, conciseness, ability to be automatically parallelized, sophisticated compile-time tools for analysis and verification, etc., to the embedded systems eld without paying an unnecessary performance penalty. Manuel Carro, José F. Morales 0001, Henk L. Muller, Germán Puebla, Manuel V. Hermenegildo |
CASES | 2 |
| 2006 | Towards Description and Optimization of Abstract Machines in an Extension of Prolog
José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
LOPSTR | 1 |
| 2005 | A Generator of Efficient Abstract Machine Implementations and Its Application to Emulator Minimization
José F. Morales 0001, Manuel Carro, Germán Puebla, Manuel V. Hermenegildo |
ICLP | 1 |
| 2004 | Improved Compilation of Prolog to C Using Moded Types and Determinism Information
José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
PADL | 1 |